워게임/LORD OF SQLINJECTION

[LOS] Level 3(goblin)

name2965 2022. 5. 2. 23:10
728x90

 

 

 

이번에는 전 레벨과 다른 방식입니다.

 

id는 guest로 정해져있고 no라는 column이 있는것을 확인할수 있습니다.

쿼리를 주입할수 있는곳은 no=다음부터 이므로 어떻게 해야 검증을 통과할수 있을지 생각해 봐야합니다.

 

일단 no에는 임의의값을 넣고 or id = 'admin' 이라는 쿼리를 작성해서

id가 'guest'와 'admin', 두 경우에서 모두 참이 나오도록 하면 쿼리를 통과시킬수 있을것입니다.

 

그렇게 해서 나온 쿼리문은 다음과 같습니다.

 

 

no=0 or id = 'admin'

 

 

그런데 이 쿼리문을 전송하면

 

 

 

 

다음과 같이 quotes를 쓸수 없다는 텍스트가 나옵니다.

php소스를 다시 살펴보면 

preg_match 함수를 통해서 필터링처리가 이루어지고 있는것을 확인할수 있습니다.

 

그러므로 이 함수의 필터링을 우회해야하는데, 제가 쓴 방법은 16진수 값을 쓰는것입니다.

 

16진수 값을 사용하면 따옴표 없이 문자열을 쿼리문에 쓸수 있습니다.

 

'admin' => 0x61646d696e

 

따옴표 부분을 제외한 문자열을 빅엔디언 방식의 16진수로 변환하면 따옴표 없이도 쓰는것이 가능해집니다. 

그러므로 쿼리문을 다음과 같이 수정할수 있게 됩니다.

 

 

no=0 or id = 0x61646d696e

 

 

이 쿼리문을 전송하면

 

 

 

 

다음과 같이 풀리게 됩니다.

 

 

728x90

'워게임 > LORD OF SQLINJECTION' 카테고리의 다른 글

[LOS] Level 6(darkelf)  (0) 2022.05.03
[LOS] Level 5(wolfman)  (0) 2022.05.03
[LOS] Level 4(orc)  (0) 2022.05.03
[LOS] Level 2(cobolt)  (0) 2022.05.02
[LOS] Level 1(gremlin)  (0) 2022.05.02