티스토리 뷰
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 |