본문 바로가기
Hacking/wargame.kr

[wargame.kr] Question 17. lonely guys

by 알거음슴 2021. 7. 19.

Question 17. lonely guys

문제

Blind SQLi challenge.

Can you SQLi with 'order by' in expression?

 

 

 

풀이

문제 접근 시 애인을 구하는 사람의 목록과 source-page를 확인할 수 있는 링크가 제공된다.

req_single 를 누르면 재정렬이 진행되며 내림차순 및 오름차순으로 정렬되는걸로 확인된다.

 

 

소스코드를 확인해 보자, 필요한 부분의 대한 내용만 가져온 내용이다 중요한점은

1) 21번 줄의 쿼리문을 전송하는 방법

2) 19번 줄의 tablecolumn의 정보가 제공

3) $sort post_method 방식으로 데이터 전송이 이루어진다.

 

 

위 내용을 참조하여 $sort 부분의 데이터에 sql 구문을 삽입해야한다. 위 문제에서 제공된것 처럼 order by 의 특징을 이용해야한다.

order by 의 경우 서브쿼리를 제공할 수 있으며 이때 if 조건문을 사용하면 blind sql injection 을 사용할 수 있다.

공격 가능성을 테스트 하기 위해 if(1=1, sleep(10),2) 를 통해ys 확인하였고, 10초뒤에 결과가 출력 됨으로 공격의 가능성을 확인하였다.

 

 

, if(length((select authkey from authkey limit 0,1))=’values’,cot(0),0)

해당 구문을 통해 flag의 길이값을 확인했다, 이때 사용된 cot(0)은 무한대임으로 오류를 유발한다, 결과 40자릿수를 가지고 있음을 확인했다.

 

 

, if(ord(substr((select authkey from authkey limit 0,1),'+value1+',1))='+value2+',cot(0),0)

를 통해 한글자씩 flag 값을 받아와 리스트화 진행하여, 해당 리스트를 출력하는것으로 플래그를 확인할 수 있었다.

이를 제출시 해당 단계도 통과할 수 있다.