Lord of sql injection - Evil wizard 풀이 |
los 24번 evil wizard 풀이 포스팅입니다.
문제 접근
if(preg_match('/prob|_|\.|proc|union|sleep|benchmark/i', $_GET[order])) exit("No Hack ~_~"); |
문제는 hell fire와 비슷해보인다. 근데 주석으로 달린 same with hell_fire? really? 라는 문구가 간담을 서늘하게한다...
필터링은 union과 time based sql injection에 대한 제한을 두는 것으로 보인다.
id column을 기준으로 출력해보았더니 역시나
id= admin, score = 50 인 계정의 email을 알아내는 문제이다. time based sql injection이 막혀있고, 에러를 출력하는 문구도 없다. 그럼 if문을 활용해서 참,거짓을 구분하는 방법을 활용할 수 있다.
먼저 email의 길이가 1보다 큰 경우의 쿼리를 넣어보았다. 조건이 참이기때문에 첫번째 컬럼인 id를 기준으로 정렬이 되는 모습이 나온다.
email의 길이를 100보다 크다를 조건으로 넣었을때, rubiya가 먼저 나온다. 조건이 거짓일때 10번째 컬럼을 기준으로 출력해서 테이블이 출력되지 않을줄 알았는데 출력이 되긴한다. 즉 조건이 거짓일때는 rubiya의 정보를 담은 row가 먼저 출력되고, 조건이 참일때는 admin의 정보를 담은 row가 출력된다.
따라서 email의 길이를 하나씩 대입해보면 되겠지만.. 귀찮기때문에 brute forcing으로 어떻게 해결해야할까 고민했다.
그래서 둘의 php 코드를 비교해보기로 했다.
먼저 조건이 참일때( = admin이 먼저 테이블에 출력될 때 )의 테이블을 나타내는 php 코드
<table border=1><tr><th>id</th><th>email</th><th>score</th><tr><td>admin</td><td>**************</td><td>50</td></tr><tr><td>rubiya</td><td>rubiya805@gmail.com</td><td>100</td></tr></table> |
조건이 거짓일때(= rubiya가 먼저 테이블에 출력될 때) 의 테이블을 나타내는 php 코드
<table border=1><tr><th>id</th><th>email</th><th>score</th><tr><td>rubiya</td><td>rubiya805@gmail.com</td><td>100</td></tr><tr><td>admin</td><td>**************</td><td>50</td></tr></table> |
여기서 힌트를 얻었다. admin이 출력되더라도 조건이 참인 경우에는
</th><tr><td>admin 의 php 코드가 생기고
조건이 거짓인경우에는 다른 태그로 admin이 출력된다. 이것을 이용해서 brute forcing을 진행해보자
brute forcing을 통해 email 알아내기
탐색된 이메일의 길이는 30
최종 이메일은 aasup3r_secure_email@emai1.com
'개인 공부 > WEB' 카테고리의 다른 글
[웹해킹] LOS 26 - (Red Dragon) (0) | 2021.07.03 |
---|---|
[웹해킹] LOS 25 - (Green Dragon) (0) | 2021.07.03 |
[웹해킹] LOS 23 - (Hell_Fire) (0) | 2021.07.03 |
[웹해킹] LOS 22 - (Dark_eyes) (0) | 2021.07.03 |
[웹해킹] LOS 21 - (Iron Golem) (0) | 2021.07.03 |
댓글