SQL injection/webhacking

Webhacking 29번

ys.k 2022. 5. 12. 14:29

포스팅에 앞서 내용이 틀릴 수도 있으며, 해당 부분 지적은 감사히 받겠습니다.

29번 문제이다.

이전 문제와 같이, 파일을 업로드할 수 있다.

FLAG는 다른 테이블에 있다고 한다.

필자는 파일 업로드 취약점에 굉장히 약하다..

접해본 적도 없고 예상도 쉽지가 않다...

그래서 풀이를 검색해봤다.

burp suite와 같은 웹 프락시 프로그램을 사용하여 파일을 업로드할 때의 패킷을 캡처하여 sql 쿼리를 삽입하는 방식으로 공격을 진행해야 한다고 한다.

정말 창의적인 공격 방법인 것 같다....

그럼 바로 수행해보자.

일단 바탕화면에 test.txt 파일을 하나 만들어준다.

나는 test.txt파일을 업로드하면서 injection을 진행할 것이다.

일단 그냥 test파일을 업로드했다.

시간과 ip주소, 파일명이 출력이 되었다.
같은 과정을 패킷을 캡처하여, 어떤 정보가 지나가는지 확인해보자.

 

post방식이며, filename="test.txt" 형식으로 전달해주고 있다.

데이터베이스에 데이터를 insert into (value1, value2, value3)으로 넣어주니 우리는 시간과 ip의 값이 어디에 위치하는지 알아내야 한다.

위 사진처럼 파일 이름, 123, 자신의 ip를 순서대로 입력했을 때

업로드가 성공하며, 이상한 시간 값과 나의 ip주소, test.txt이 순서대로 나타난다.

insert into의 데이터 타입은 문자형, 숫자형, 문자형 인 것 같다.

123은 09:02:03으로 나왔는데 2분 3초는 123초로 123은 sec단위이다.

이제 우리는 값을 추출할 수 있다.

flag는 다른 테이블에 있으니 database() 먼저 조회해보자.

위 사진처럼 쿼리를 주입한다.

업로드에 성공하며 두 개의 파일이 추가된다.

첫 번째는 test.txt이고 chall29이 출력되었다.

이제 table_name을 추출하자.

files, flag_congratz가 출력되었다.

flag는 높은 확률로 flag_congratz에 있을 것이다. ㅋㅋ

flag_congratz의 칼럼명을 추출하자.

해당 쿼리를 보내준다.

flag가 추출된 모습이다.

칼럼은 1개이다.

이제 칼럼의 value를 추출하자.

해당 쿼리를 보내주자.

flag 추출 성공

auth에 값을 입력해주자.

문제 해결!

시행착오

1. insert into를 통해 인젝션을 시도할 때, 기존의 소괄호 부분을 마무리해주고 추가로 하나를 더 열어 데이터를 삽입해줘야 원활한 인젝션이 수행된다.