관리 메뉴

FU11M00N

Lord of Injection skeleton(10)단계 본문

Web Hacking/Lord of injection

Lord of Injection skeleton(10)단계

호IT 2019. 10. 30. 01:41

이번 시간엔 10단계인 스켈레톤입니다!! 드디어 10단계라니 기분좋으면서도

앞으로의 문제들이 두려워지네요,,, 화이팅!!

자 이번문제에서 preg_match로 금지시키는 것은 prob,_(언더바), .(쩜) , ( ) 입니다!!

그리고 쿼리문을보면 pw의 값을 사용자로부터 가져오고 뒤에 and 1=0 이라는 논리 연산자가 붙었네요!!!

그리고 쿼리문에서 id는 guest로 박혀있지만 id의 값을 admin으로 적어줘야

solve()가 뜨면서 Clear가 될것입니다 그럼 먼저!

 

and 1=0에대해 자세히 설명하기전에!! and와 or 논리연산자 에대해 간단히 설명하자면 

and는 둘다 참이면 True 값을 반환하고

or는 하나라도 참이면 Ture 값을 반환합니다!

 

제가만약에 ?pw=1111' or id='admin' 적어준다면 저것 자체는 참이지만

뒤에 and 1=0 때문에 False 값이 될것입니다.

 

자 그러면 어떻게 접근해야하나 생각해보면..

저희가 중점으로 봐야하는 코드는

id='guest' and pw='[사용자로부터의 값] and 1=0입니다.

그럼 정답을 유추해보겠습니다..!

참고로 and와 or의 우선연산자는 and가 더 높습니다!!

 

먼저 ?pw=123 으로 시작하여  id='guest' and pw=123 을 False 값으로 만들어서

앞에있는 id='guest' and pw=123가 연산을 하게되면 and 연산이 되기때문에,

쿼리문이 False 값이 반환됩니다.

 

그후 'or id='admin' pw=123 %23 을 넣으면 앞에서 반환받은

False 값과 id=admin이 or 연산을 하게되어 True값을 반환합니다. 

뒤에 %23을 하는이유는 뒤에있는 and 1=0을 주석 처리 하기위함입니다!!

 

그럼 쿼리문은

 id='guest' and ?pw=123 or id='admin' or pw=123

False or ture =ture값 반환 그럼 또 앞에서의 ture or false 연산 = ture값 반환   

  

 

그러하여 정답은 ?pw=1'or id='admin' or pw=123%23 입니다!

 

이번건 좀 저번단계보다 난이도가 있었다고 생각해요!!

다들 화이팅하고 다음단계로 가보겠습니다!

 

 

Comments