(Lord of SQLInjection) golem 문제입니다.
이번 문제도 이전 문제와 마찬가지로 코드가 두개에
if(($result['pw']) && ($result['pw'] == $_GET['pw'])) solve("golem");
위의 코드로 보아 패스워드가 정확히 일치해야만 해결되는
블라인드 SQL 인젝션 문제입니다.
일단 필터링을 보겠습니다.
이번 필터링은 or and substr ( = 가 필터링으로 걸려있습니다.
이전에 찾아본 필터링 우회로 or and substr = 은
|| && mid like 로 해결이 가능하다는 것을 알고 있습니다.
이를 토대로 먼저 admin을 출력이 가능한 코드를 작성해보면
pw='||id like 'admin'#
으로 작성이 되는데 URL 인코딩을 거치면
pw=%27 || id%20like%20%27admin%27%23 이 됩니다.
이값을 문제 페이지에 전달해보면
admin으로 출력되었습니다.
그럼 이를 토대로 이전 리퀘스트 코드에서 url과 값만 조금 수정해서 작성해보면
pw='||id like 'admin' && length(pw) like {l}#
위 코드는 패스워드의 길이를 찾는 코드
pw='||id like 'admin' && ascii(mid(pw,{i},1)) like {j}#
위 코드는 패스워드의 값 하나하나를 찾는 코드로
파이썬 리퀘스트 코드에는 URL인코딩을 한뒤 입력한 것입니다.
작성이 완료된 코드를 실행해보면
pw워드의 길이는 8이며 값은 77d6290b 라고합니다.
패스워드 값을 문제사이트에 전달해보면
문제가 해결되었습니다
'Wargame(Web) > Lord of SQLInjection' 카테고리의 다른 글
(Lord of SQLInjection) bugbear 문제 (0) | 2022.08.24 |
---|---|
(Lord of SQLInjection) darkknight 문제 (0) | 2022.08.24 |
(Lord of SQLInjection) skeleton 문제 (0) | 2022.08.17 |
(Lord of SQLInjection) vampire 문제 (0) | 2022.08.17 |
(Lord of SQLInjection) troll문제 (0) | 2022.08.17 |