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 |