(Lord of SQLInjection) cthulhu 문제입니다.

코드를 먼저 살펴보면
필터링으로 prob _ . \ admin 을 필터링 하고 있습니다.
거기에 특별하게 보이는 코드가 보이지 않습니다.
위에 rubiya서버는 ModSecurity Core Rule Set v3.1.0의 level 1을 사용중이라는
이부분이 문제를 해결하기 위해 중요한 부분으로 보여
정확하게 이게 무엇인지 찾아보니

웹 애플리케이션 방화벽중 하나로 SQL인젝션과 LFI RFI등등 OWASP Top 10을 포함한 공격을
보호하는 방화벽이라고 합니다.
이를 우회하기 위해 CRS v3.1.0 Bypass를 키워드로 검색해보니

우회하는 방법이 정리된 자료를 찾을 수 있었습니다.
{ }나 @같은 기호를 이용해 우회하는 방법을 찾았습니다.
다시 문제로 돌아와서

문제에서는 위의 Bypass방법으로 사용되는 { }와 @등을 필터링하지 않고 있으니
그대로 사용가능하며 문제를 해결하기 위해서는
id값을 존재하기만 하면되니
-1' <@=1 or {a 1}=1 or '
위 payload를 사용해 id값이 True가 되게 출력해준다면 문제가 해결됩니다.
일단 payload를 분석해보면
id='-1'<@=1 부분의 경우 '-1'<@1 은 null값이 나오게 됩니다..
즉 id=null 이되면서 다음 조건이 실행되고,
두번째 조건은 {a 1} =1 인데 이부분이 True가 나오게 됩니다.
이부분은 CRS를 우회하는 방법으로 설명헤주고 있는데 1=1과 동일하다고 합니다.
최종적으로 정리하면 아래와 같게 됩니다.
id=null or 1=1 or '
id부분에서 1=1로 True가 출력되며 or연산자로 인해 뒤에 오는 pw가 무시되니
id의 값이 True가 되게 됩니다.
위에서 정리한 payload를 문제사이트에 값을 전달해보면

문제가 해결되었습니다!
Reference
1. https://github.com/SpiderLabs/owasp-modsecurity-crs/issues/1181
Bypass the latest CRS v3.1.0 rules of SQL injection · Issue #1181 · SpiderLabs/owasp-modsecurity-crs
Type of Issue False Negative Description Per #1167, I wanna raise more FNs in this thread. Before getting into other FNs, I want to give out more information to #1167 so as to help the maintainers ...
github.com
'Wargame(Web) > Lord of SQLInjection' 카테고리의 다른 글
(Lord of SQLInjection) godzilla 문제 (0) | 2022.12.01 |
---|---|
(Lord of SQLInjection) death 문제 (0) | 2022.12.01 |
(Lord of SQLInjection) alien 문제 (0) | 2022.11.28 |
(Lord of SQLInjection) zombie 문제 (0) | 2022.11.25 |
(Lord of SQLInjection) ouroboros 문제 (0) | 2022.11.21 |