(Lord of SQLInjection) xavis 문제입니다.
문제 사이트에 접속해보면 PHP 코드를 제공해주고 있으며 코드가 두개인것이 한눈에 들어옵니다.
이제부터 위 코드 아래 코드로 구분하여 부르도록 하겠습니다.
먼저 아래 코드의 마지막쯤에 위치한 if 구문을 살펴보면 사용자가 제출한 pw와
저장된 pw가 완벽하게 일치해야 한다고 합니다.
즉 이전 문제들과 비슷하게 블라인드 SQL 인젝션 이 필요하다는 것을 알 수 있는 부분입니다.
그럼 다시 위 코드로 돌아와서 필터링부터 살펴보겠습니다.
pw에서 prob, _ , . , ( ), regex, like 를 필터링 하고 있습니다.
LoS문제를 계속하면서 블라인드 SQL 인젝션 문제를 해왔기에 이전 글을 참고해
https://skysquirrel.tistory.com/71?category=1038357
(Lord of SQLInjection) bugbear 문제
(Lord of SQLInjection) bugbear 문제입니다. 이번문제도 no가 있는걸보니 이부분을 활용하면 될것같습니다. 필터링을 먼저보면 싱글쿼터, substr ascii = or and like 0x 까지 필터링이 엄청 늘었습니다. 우회방.
skysquirrel.tistory.com
위 exploit code를 참고해 필터링에 걸리지 않게 hex( )를 이용해 실행했는데
길이는 12가 출력되었는데 어떠한 값도 찾을 수가 없었습니다.
그렇게 포기했다가 지인에게 힌트를 요청했습니다.
그랬더니 1바이트를 사용하는 pw가 아닌 멀티바이트 2바이트를 사용하는 유니코드, UTF-8등이라는 힌트를 받았습니다.
그러나 작성자는 유니코드, UTF-8을 이용하는 코드를 작성해본 경험이 아직없습니다.
해서 어쩔수 없이 라이트업을 참고하게 되었습니다.
https://g-idler.tistory.com/62
그러다 새로운 방식을 알게 되었습니다.
지금까지 블라인드 SQL을 하나하나 검색할 생각만 했는데 select where union등의 구문이 막혀있지 않다면
사용해볼법한 방법이였습니다.
해서 위 방법으로 payload를 아래와 같이 구성해
?pw=%27||(select @a:=pw where id='admin') union select @a%23
문제사이트에 제출해보니
Hello admin 대신 admin의 pw인 우왕굳 이 출력되었습니다.
이 값을 pw에 전달해 문제를 해결하였습니다.
유니코드를 활용하는 문제는 처음 접해보았고 어떻게 코드를 작성해야하는 지를 몰라 많이
당황스럽고 어렵게 느낀 문제였습니다.
'Wargame(Web) > Lord of SQLInjection' 카테고리의 다른 글
(Lord of SQLInjection) iron_golem 문제 (2) | 2022.09.27 |
---|---|
(Lord of SQLInjection) dragon 문제 (0) | 2022.09.25 |
(Lord of SQLInjection) nightmare 문제 (0) | 2022.09.19 |
(Lord of SQLInjection) zombie_assassin 문제 (0) | 2022.08.31 |
(Lord of SQLInjection) succubus 문제 (0) | 2022.08.31 |