Wargame/Webhacking.kr

<Webhacking.kr> old-07

지우친구 웅이 2021. 11. 15. 17:38

old-07

'auth' 버튼을 누르면 

"접근이 거부되었다"는 메시지를 출력한다.

 

view-source를 통해 페이지 소스 코드를 살펴보면

GET 방식으로 전달받은 'val'의 값을 변수 '$go'라 한다.

$go의 값에서 2, -, +, from, _, =, \s, *, / 를 필터링한다.

그리고 1부터 5까지를 랜덤으로 정해 각기 다른 쿼리를 실행한다.

각기 20%의 확률이므로 $rand가 1일 경우에 맞춰 문제를 풀었다.

그리고 $data[0]가 2가 되어야 문제를 해결할 수 있다.

 

2를 만들기 위해서는 '1+1', '3-1' 등과 같은 방법은 연산자가 필터링되기 때문에 사용할 수 없다.

2를 만들기 위해서는 chr(50), mod(5,3) 등을 이용할 수 있다.

 

?val=char(50)을 입력하면

"query error"라는 메시지를 출력한다.

괄호가 필터링 되지 않았기 때문에 괄호를 사용해서 문제를 풀 수 있다.

"select * from table"은 "select(*)from(table)"과 쿼리가 동일하다는 점을 이용할 수 있다.

 

?val=1)union(select(chr(50))을 입력하면

문제가 풀리게 되는데 "nice try"라는 메시지를 출력할 수 도 있다.

이는 1~5까지의 숫자가 랜덤이기 때문에, 새로고침을 하다보면 문제를 해결할 수 있다.