이 문제를 살펴보면
일단 id가 admin인 형태로 로그인이 되면 Hello admin이 출력된다.
근데 이 방식을 addslashes 함수에 필터링(?)을 해서 따음표를 이용한 우회공격은 할 수가 없게된다.
결국 진짜 비밀번호를 알아야 하는데.. 우리에게는 참과 거짓값을 확인할 수 있는 지표인
'Hello admin' 이 놈이 있다.
만일 비밀번호의 첫 번째가 a인지, b인지, c인지 ...,1인지,2인지,~~~
두 번째가 a인지, b인지~~~~~~~~
세,네,...번째가~~~~~~~~~~~
이렇게 쭉 get방식으로 보내보아서 참 값이 반환된다면 (Hello admin이 뜬다면) 비밀번호의 정보를 캘 수 있을 것이다.
이 문제는 Blind SQL injection 기본 문제 형태이다.
SQL의 함수들을 몇 가지 사용해보자
일단 비밀번호의 갯수를 알아보기 위해서 알아야 함수인 length를 사용해보면
몇 번 삽질을 해보아서...
비밀번호의 길이가 8자리임을 알 수가 있다.
그렇다면 이제 비밀번호의 첫번째 자리를 유추하고, 두번째 자리를 유추하고, ~~, 8번째 자리를 유추하면 된다.
첫 번째 자리를 유추하는 코드만 간단히 보여주겠다. httplib라는 파이썬 라이브러리가 있으니 이를 이용해도 좋다.
?pw=' or ascii(substr(pw,1,1))=a#
이런 식으로 하면 된다!!!!
'Web Hacking > LoS (Lord of SQL injection)' 카테고리의 다른 글
| LOS_darkelf (0) | 2016.07.21 |
|---|---|
| LOS_wolfman (0) | 2016.07.20 |
| LOS_goblin (0) | 2016.07.20 |
| LOS_cobolt (0) | 2016.07.20 |
| LOS_gremlin (0) | 2016.07.20 |