본문 바로가기
개인 공부/WEB

[웹해킹] LOS 21 - (Iron Golem)

by 아메리카노와떡볶이 2021. 7. 3.
728x90
Lord of sql injection - 풀이

LOS 21번 iron golem에 대한 풀이 포스팅입니다.

문제 접근

if(preg_match('/prob|_|\.|\(\)/i'$_GET[pw])) exit("No Hack ~_~");
if(
preg_match('/sleep|benchmark/i'$_GET[pw])) exit("HeHe");

필터링 조건을 살펴보면, sleep 함수와 benchmark함수를 필터링하고 있다. 즉 지난 과제에서 다루었던 time based

sql injection을 제한하는것으로 보인다. 따라서 접근 방법을 error based sql injection이라 생각하고 접근해야할것 같다.

union select를 이용해서 1개 이상의 행을 반환할때 에러가 발생되는 것을 이용한다.

pw=' or if(length(pw)>5, (select 1 union select 2),1)%23

위와 같은 쿼리를 넣었을때, if문의 조건이 참이라면 (select 1 union select 2) 가 실행되고, 거짓이라면 1을 반환한다.

즉 다시 말해서, if문의 조건을 참으로 만들어서 select 1 union select 2를 통해 에러를 반환해서 공격자는 에러가 발생하는 것을 보고 조건의 참을 판단할 수 있게 되는 것이다.

pw의 길이가 5보다 큰지를 판단하는 조건문을 넣은 결과, 에러가 반환되었다. 즉 pw의 길이는 5보다 크다는 것이다.

위와 같은 방법으로 brute forcing을 진행해서 비밀번호의 길이를 구하고, 마찬가지로 완전한 pw를 구하면 된다.

 

brute forcing을 통해 패스워드 구하기

 

길이구하기

 

패스워드 구하기

결과

브루트 포싱하기전 몇개 입력 테스트중에 25 이상인것은 알고 있었기때문에 파이썬코드를 작성할 때 길이를 25이상부터 체크했다.

최종비밀번호는

06b5a6c16e8830475f983cc3a825ee9a

 

728x90

'개인 공부 > WEB' 카테고리의 다른 글

[웹해킹] LOS 23 - (Hell_Fire)  (0) 2021.07.03
[웹해킹] LOS 22 - (Dark_eyes)  (0) 2021.07.03
[웹해킹] LOS 20 - (Dragon)  (0) 2021.06.19
[웹해킹] LOS 19 - (Xavis)  (0) 2021.06.19
[웹해킹] LOS 18 - (Nightmare)  (0) 2021.06.19

댓글