27번 문제풀이

정답이 공개되어 있다.

 

 

예전에 이미 풀었던 문제임에도 불구하고,

해결하는데 시간이 조금 걸린 것 같다.

복습이 중요하다는걸 깨달은 문제이다.

 

인덱스 페이지를 보자.

SQL 인젝션 문제이다.

 

힌트가 없나 해서 찾아보는데 소스보기를 했더니 index.phps 를 주석으로 담아두었다 .

 

Index.phps 로 힌트 소스를 보자.

Get 방식으로 넘어오는 no 값을 필터링을 하고 쿼리를 날린다음

Guest 일 땐 그대로 출력,

Admin 일땐 해결이다.

 

쿼리문을 봤을 때 id 값을 출력하는데 id 가 guest 이고, no값이 동일 해야 쿼리가 날라간다 .

소스대로 %27 ( 싱글쿼터 ' ) 를 날리니 die 구문으로 인해 query error 라는 문자열을 표시한다.

 

자 그럼 필터링을 거치고 나서 admin 이라는 값을 뽑아내야 한다 .

 

쿼리를 만들어보자 .

select id from challenge27_table where id='guest' and no=( $_GET[no] )

우리가 입력한 값이 저기에 들어가게 된다 .

'admin' 이라는 쿼리 결과를 얻어야 한다.

여러가지의 쿼리가 있겠지만, 바로 생각난 limit의 경우는 필터링에 의해 막혀있다 .

'=' 도 막혀있기 때문에

곰곰히 생각해보다 like 구문이 생각났다.

 

0) or (id like 'admin'

위와 같은 쿼리를 전송 시 완성되는 쿼리는

 

select id from challenge27_table where id='guest' and no=(0) or (id like 'admin)

 

결과는

하….. 필터링에 '(' 가 존재한다..

 

다행히 ')' 는 안 막아 두었다.

( 제출자의 세심한 배려를 느낀다 …. )

 

배려를 느끼며 다시 곰곰히 생각한 결과 주석처리를 하면 될 것 같다.

'#' 주석은 이미 필터링이 되어 있으므로, -- 주석을 이용하자.

 

0) or id like 'admin'--

위와 같은 쿼리를 날렸으나 결과는 query error….

역시나 SQL 에 너무 약한 필자다 ..T^T

DB에 대한 공부를 해야겠다는 마음을 갖게 만든다 ..

 

이미 풀었던 문제이므로 어쨋던 내가 답을 알고 있다 ..

id 말고 no 값으로 접근해보자.

 

 

0) or no like 2 –

 

결과는 성공

 

( 마지막 – 뒤에 공백을 꼭 붙여주도록 하자. 안그러면 주석처리가 제대로 안되서 query error 를 출력하게 된다. )

'WarGame > WEB_Hacking' 카테고리의 다른 글

Webhacking.kr 33번 문제풀이  (0) 2015.11.15
Webhacking.kr 32번 문제풀이  (0) 2015.11.14
Webhacking.kr 26번 문제풀이  (0) 2015.11.14
Webhacking.kr 25번 문제풀이  (0) 2015.11.14
Webhacking.kr 24번 문제풀이  (0) 2015.11.14

+ Recent posts