본문 바로가기
해킹 공부/웹해킹

파이썬 requests 모듈 사용하기, 웹 요청

by zzzmilky 2021. 1. 8.

 

56번 문제. 250점

 

보드 하나랑 검색바 하나 있는 페이지다. id가 admin인 row하나랑 guest인 row하나가 있다. 더 살펴보자.

 

 

 

 

 

 

 

readme

 

readme에 링크가 걸려있어서 눌러보았다. 아쉽게도 access denied. secret 상태여서 그런 것 같다.

 

 

 

 

 

hi~

 

반면에 hi~를 눌러보니 hello~라고 적혀있는 내용을 열람할 수 있다. 

 

 

 

 

 

 

search 이용

 

search바도 있길래 한번 hello를 입력해 제출해보았다.

 

 

 

 

 

 

id가 guest인 row만 검색되었다. 'hello'라고 검색한게 'hi~'에만 포함되어있어서 그런것 같다.

그리고 이문제는, 아마 열람이 불가능한 'readme'에 flag가 포함되어 있고 그 flag를 구하는게 문제일 듯 하다.

실제로 search 바에 flag를 검색해보니, id가 admin인 row만 검색되었다.

 

 

그러면 어떻게 'readme'를 열람할 수 있을까 생각해보다가, search 바에 입력한 내용이 'readme'에 포함되어 있다면 'readme'가 검색된다는 것을 알게 되었다. 그점을 이용해 브루트폴스 방식으로 문자 하나하나 입력해보고 'readme'가 검색된다면 해당 문자를 계속 추가해가며 문자열을 만들어 최종적으론 flag를 완성시킬 수 있겠다는 생각이 들었다.

 

개발자 도구

 

해당 검색 폼은 post 방식을 사용하고 있었다. url을 보면 사실 get 방식이 아니라는 것을 쉽게 알 수 있다.

인풋 네임은 "search"라고 되어있다. 이게 request를 보낼때 사용되는 인자다.

 

 

 

 

파이썬 requests.post함수를 이용해서 request를 보내서 flag에 해당하는 문자 하나하나를 찾아낼 수 있었다. 

requests.post 함수에 url이 필요하고, 위 사이트의 경우 로그인을 해야만 접근가능하므로 cookie 인자가 필요하다. 그리고 data인자는 딕셔너리 형식으로, 검색하는 문자들을 전달한다. 

.text는 html파일을 텍스트로 변환시켜주고, 해당 텍스트에서 admin이 검색되는지 아닌지에 따라 해당 문자가 flag에 포함되는지 아닌지를 판별할 수 있다.

flag길이가 최대 55까지인 것만 알아서, i의 range를 처음엔 55까지 설정해봤지만 시간이 지나치게 오래걸렸다ㅜㅜ

그래서 5씩 끊어서 확인해보았고, 길이가 알고보니 45자였다.......

j의 range의 경우 flag에 해당하는 문자들의 ascii 코드가 48부터 무조건 시작한다는 보장이 없었지만 마찬가지로 시간 문제로 인해 48부터 시작한다고 보고 한번 시도해보았다.

 

import requests
cookies={'PHPSESSID':'??????'}

flag="flag{"
data={'search':""} #딕셔너리 방식
 
for i in range(0,5):
    for j in range (48,127):
        

        data['search']=flag+chr(j)
        res=requests.post('https://webhacking.kr/challenge/web-33/',
        cookies=cookies,data=data) 

        if((res.text).find("admin")>0): #문자하나하나를 search에 넣어
            #admin이 검색되면 해당 문자를 플래그에 포함
            flag+=chr(j)
            print(flag)
            break

print("???:"+flag)

 

 PHPSESSID 부분에는 세션아이디를 집어넣으면 된다. 세션아이디는 editthiscookie 확장프로그램을 사용하면 쉽게 확인가능하다.

 

 

 

flag 발견!

 

i의 range를 늘려주었지만 값이 그대로 나온 것으로 보아, 최종 flag를 발견했음을 알 수 있었다!

 

 

이상 파이썬 requests 모듈을 이용해 웹 요청을 해보았다. 


dgkim5360.tistory.com/entry/python-requests

lactea.kr/entry/python-requests-%EB%AA%A8%EB%93%88%EC%9D%84-%EC%9D%B4%EC%9A%A9%ED%95%9C-%EC%9B%B9-%EC%9A%94%EC%B2%AD

위 두 사이트가 requests.post를 이해하는데 많은 도움이 되었다!

댓글