워게임/Lord Of Sql Injection

Lord of Sql Injection goblin 3번문제

와.... 12월 31일이다.......

우선 3번문제는,

 

이런식으로 나와있다.

 

대충 풀이는 id, no를 비교할때, 이를 거짓으로 만들어야 하며 뒷부분에다가 id='admin'을 해줘야한다는것이다.

하지만 문제가있다.

 

if(preg_match('/\'|\"|\`/i'$_GET[no])) exit("No Quotes ~_~"); 

 

바로 ( ', ")를 필터링한다는 것이다. (싱글쿼터, 더블쿼터)

 

그래서 쿼터로 감싸줘야하는 문자열입력은 힘든상황이다.

 

우선, guest의 no값을 알아보기위해 약간의 테스트를 해보았다.

 

우선 no값이 1일때만 Hello guest가 출력되는것을 보아 guest의 no값은 1이라는것을 알 수 있다. 따라서

 

no=1 이 아닌 no=0등을 통해 이 조건문을 거짓으로 만들어야 한다.

 

?no=0 or id=  여기까지 만들어주면 된다. 이때 admin이라는 것은 문자열이기때문에, 16진수로 변환시켜주면

 

쿼터로 감싸줄 필요가 없게된다.

 

바로, admin은 16진수(hex)값으로 61646D696E 이다.

 

하지만 ?no=0 or id=61646D696E 이렇게 해주면 php에서는 hex라고 인식을 못한다. hex라는것을

 

알려주기 위해 0x61646D696E 로 해주면 된다.

 

따라서 파라미터를 ?no=0 or id=0x61646D696E 이렇게 작성해주면 된다.

 

요렇게 풀리는것을 확인 할 수 있다.