-
|Lord of SQL_injection| #28 FrankensteinWargame Site/SQL injection 2019. 3. 5. 12:32
이것 까지 해결하면 4 문제만 풀면 끝난다!!
가보자~
학창시절 별명이 프랑켄슈타인이었는데....
우선 if(mysql_error()) 를 보니 Error 기반의 SQL Injection 인 것 같다.
하지만 우선, select 1 union select 2 를 사용할 수 없다.
따라서 다른 에러를 발생하는 구문을 떠올려야한다.
우선 조건을 사용해야하지만 '( ' 가 필터링 되어있으므로 if 를 사용할 수 없다.
이럴 때 생각나는 한가지 !!!
21번 문제 Iron_golem 에서 다뤘던 Case when then else end 문을 떠올려보자
그럼 then ?? else ?? 자리에 어떤 것을 넣어야할까?
도저히 구문을 못찾겠다..... 그래서 구글링을 해봤다 ㅎㅎ
그 결.과. MySQL 에선 9e307을 초과하는 수를 받을 경우 에러를 발생시킨다는 점을 Catch 했다.
모든 준비는 끝났다
이를 이용해서 query 를 작성했다.
?pw=' or case when id='admin' and [ pw 조건 ] then 9e308 else 0 end%23
하.지.만
단일쿼리를 날렸을 때는 반응을 했지만, 패스워드를 찾는 과정에서는 반응하지 않는것이다!!
html 에서 인자를 통해 넘겨줬을 땐 error 라고 나왔던 구문이 스크립트를 작성했을 때 검출이 안되는 것이 확인 되었다.
이 부분에 대해서는 다시 생활코딩에 질의를 했고, 우선 다른 사람들의 풀이를 봤더니 9e307*2 를 하시는 분들이 계셨다.
그냥 단순히 9e308 을 9e307*2 로 바꿔주었을 뿐인데 문제가 해결된 것을 알 수 있었다.
혹시나해서 9e123123123123123123 와 같은 형태의 큰 수를 대입해봐도 반응을 하지 않았다.
오로지 9e307*[ ] 와 같은 형태에만 반응을 보였다!!
이에대한 부분은 끝까지 파헤쳐봐야겠다
짜잔!!
대문자를 소문자로 바꿔서 대입한 이유는 앞서 포스팅했던 글에 적어놨다. ㅎㅎ
Clear!!
'Wargame Site > SQL injection' 카테고리의 다른 글
|Lord of SQL_injection| #29 Phantom (0) 2019.03.15 아는 동생의 SOS (0) 2019.03.08 |Lord of SQL_injection| #27 Blue_dragon (0) 2019.03.04 |Lord of SQL_injection| #26 Red_dragon (0) 2019.03.02 |Lord of SQL_injection| #25 Green_dragon (0) 2019.03.01 댓글