본문 바로가기
워게임/LOS

[los - SQL injection] nightmare ( 18단계 )

by B T Y 2017. 9. 24.
반응형

[los - SQL injection] nightmare ( 18단계 )







  - pw=(' ')=0

  - 주석문자 대체: #, -  ->  ;%00


! mysql에서 '1234'=1234 같은걸로 처리한다.



[ 풀이과정 ]



nightmare는 if($result['id']) 조건이 만족되면 문제가 풀리게 된다.

여기서는 pw에 들어가는 입력값이 prob  _  .  (  )  #  -  문자가 preg_match() 함수로 인해서 필터링이 된다.

그리고 pw의 길이는 6을 넘으면 안되는 제약 또한 있다...

그렇다면 6개의 문자만을 이용해서 이 문제를 풀어내야한다.


SQL에서는 pw=('')=0과 같은 쿼리를 허용해준다.

이 특성을 잘 이용해보면 문제가 풀리는 방법이 보인다.


주석 문자가 막힌 부분은 ;%00으로 해결을 할수가 있다.


select id from prob_nightmare where pw=('') and id!='admin'의 쿼리에

select id from prob_nightmare where pw=('')=0;%00') and id!='admin'과 같이 추가시켜준다.


이렇게 되면 뒤쪽 쿼리 또한 없는 쿼리가 되어버리기 때문에 pw에 대한 결과가 참이므로 

이 식은 성립이 된다.





18단계 클리어~~~




반응형

댓글