WarGame/Lord of SQL Injection

[LOSI] Lord of SQL Injection Level 33 - Cthulhu

크툴루다. 크툴루 신화를 모르는 사람은 어떡하라고....  러브크래프트의 코즈믹 호러 신화에 나오는 가상의 존재이다. 위엄과는 다르게 이번 문제에서는 비겁하게 출몰한다. 코드를 확인해보자

<출처 나무위키 : https://namu.wiki/w/%ED%81%AC%ED%88%B4%EB%A3%A8 >


코드

아이구... 영어 잘 못하는데, 위에 영어가 많다. 한번 읽어보면 Paranoia level 1의 ModSecurity Core Rule Set v3.1.0으로 WAF(Web Application Firewall)이 보호한다고 되어있다.(비겁하다! 크툴루! 방화벽 뒤에 숨어서!)

링크를 눌러보면 OWASP Mod Security홈페이지가 나온다.

<출처 : https://coreruleset.org/ >


해결방법

Answer Url : modsec.rubiya.kr/chall/XXXX.php?id=-1'<@=1 OR {a 1}=1 OR '

다행이도 우리의 친구 Github에 이를 ModSecurity PL1(Paranoia Level 1)을 bypass 할 수 있는 방법이 있다.

github.com/SpiderLabs/owasp-modsecurity-crs/issues/1167

 

Bypass the latest crs v3.1.0-rc3 rules for SQL injection · Issue #1167 · SpiderLabs/owasp-modsecurity-crs

Vulnerability demo(php+mysql+apache) test.php

github.com

위 게시글에 따르면 {'a',b}형태로 bypass가 가능하다고 이야기한다. 'a'에는 if나 version 같은 함수가 들어가고, b에는 비교 식이 들어간다고 적혀있다. 

 

으흠; 우리 상황과는 맞지 않는거 같다. table 도 명시적으로 추가되야하고, 사용할 수 있는 함수가 제한적으로 느껴진다.

위 글의 추가적인 내용을 덧붙히는 포스팅이 있었다.

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

오 이건 사용할 수 있을 거 같다. 이글에 따르면 오로지 MySQL에서 사용할 수 있다고 한다. 우리의 문제는 PL1으로 보호되어있지만, PL2 예시에 있는

 

-1'<@=1 OR {a 1}=1 OR '


요고 쓰면 해결 할 수 있다. 설명 들어간다.

 

이를 이용하여 다음의 쿼리로 cthulhu를 무찌를 수 있다.

* 정말 똑똑한 분들은 세상에 너무 많다. 항상 배운다. 감사한다.


뭐; 사실 필자는 거의 이해도 못하고 복붙으로 해결했다. 물론 Open된 솔루션을 사용하는 게 잘못되었다는 건 아니지만, 필자는 적어도 글을 올리는 사람이니, 이거 끝나면 ModSecurity 사용법을 정확하게 알아보아야겠다. 다음 관문에서 기다리겠다.