티스토리 뷰

hacking/LOS

<LOS> - 21번(iron_golem)

khe0616 2018. 5. 3. 01:27











id='admin'의 pw를 찾는 문제이다. 지금까지는 조건식이 맞으면 "Hello admin!" 이 출력되는 것을 이용할 수 있었지만, 이번에는 에러 메시지가 출력되는 입력을 이용한다.








select 1 union select 2 가 subquery로 사용될 경우 Subquery returns more than 1 row 라는 에러가 출력된다.


if(조건, 참, 거짓) 을 이용하면 된다.


if(length(pw)>pw길이,(select 1 union select 2),1)   를 이용하게 되는데, pw길이를 1에서 부터 증가시켜 입력한다면, 게속 에러가 출력되다가 pw길이가 실제 pw의 길이와 같아질 때 에러가 출력되지 않게된다.



?pw='or id ='admin' and if(length(pw)>16,(select 1 union select 2),1) %23

위와 같이 pw길이를 16으로 하였을때, 에러가 출력되지 않았다. 즉 'admin'의 pw길이는 16이라는 것을 알 수 있다.












pw 길이가 16이라는 것과, pw길이를 구했던 것과 비슷한 방식으로

if(ord(substr(pw,1,1))>p1 ,(select 1 union select 2),1) 를 이용해서 파이썬 프로그램을 작성하였다. 

p1을 낮은 값 부터 1씩 증가시키면 참 부분이 실행되서 에러가 출력되다가, p1의 값이 실제 pw의 1의 자리가 될때, 거짓 부분이 실행되며 에러가 출력되지 않는 것을 이용해서 작성했다.




위 사진에서 보면 1~4 자리는 !이고, 나머지 5~16자리는 스페이스바(공백) 이다.

pw는 결국 4자리라고 보면 된다.







?pw=!!!!

를 입력하면 클리어


'hacking > LOS' 카테고리의 다른 글

<LOS> - 22번(dark_eyes)  (0) 2018.05.03
<LOS> - 20번(dragon)  (0) 2018.05.03
<LOS> - 19번(xavis)  (0) 2018.05.02
<LOS> - 18번(nightmare)  (0) 2018.04.29
<LOS> - 17번(succubus)  (0) 2018.04.29
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
TAG
more
«   2024/07   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31
글 보관함