티스토리 뷰

hacking/LOS

<LOS> - 4번(orc)

khe0616 2018. 4. 6. 00:04








admin이라는 id의 pw를 GET으로 입력해줘야 하는 문제이다.

preg_match()와 addslashes()로 필터링이 되어있다. 또한 GET으로 입력해준 pw와 DB상의 pw가 같아야 클리어 되기 때문에 admin 계정의 정확한 pw를 찾아야한다.








일단 pw의 길이를 알아내야 한다. length()함수를 이용하였다.


pw=' or id=admin and length(pw)=1%23

주소창에 위와 같이 입력되면 pw의 길이가 1일경우, Hello admin이 출력된다.

1부터 시작해서 찾은 결과 pw의 길이는 8이다.








이제 두가지 방법중 하나를 택할 수 있다.

방법1은 위와 같이 substr(pw , 시작인덱스, 추출할 길이) 함수를 이용하는 것이다.



pw=' or id='admin' and substr(pw,1,1)='0'

이와 같이 입력하면 pw의 첫번째 문자가 0일경우 Hello admin이 출력된다.


만약 패스워드가 숫자와 알파벳으로만 이루어졌다면,

파란색 글씨 자리에 [0-9], [a-z] 를 하나씩 입력해 가다보면 (MYSQL에서 대소문자 구별안함) pw의 첫번째 자리를 찾을 수 있다.


두 번째 자리를 찾으려면 substr(pw,2,1) ,세 번째는 substr(pw,3,1) ,  .... , substr(pw,8,1) 까지 반복하면 8자리의 pw를 찾을 수 있다.




그러나 패스워드에 특수문자가 포함된 경우 방법1로 찾는것이 어렵고, 특수문자가 없다 하더라도 너무 비효율적이므로 방법2(파이썬으로 코드 작성)을 이용하여 풀었다.







파이썬으로 코딩해서 admin의 pw를 알아냈다.









?pw=295d5844 를 입력해주면 클리어









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

<LOS> - 6번(wolfman)  (0) 2018.04.06
<LOS> - 5번(wolfman)  (0) 2018.04.06
<LOS> -3번(goblin)  (0) 2018.03.22
<LOS> - 2번(cobolt)  (0) 2018.03.22
<LOS> - 1번(gremlin)  (0) 2018.03.18
공지사항
최근에 올라온 글
최근에 달린 댓글
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
글 보관함