티스토리 뷰

86번째 글.

 

 

 

1. 시나리오

You are currently participating in a bug bounty program. The company participating in the program is most interested in critical flaws such as injection flaws, logic flaws, and server-side attacks. Server-side attacks are the most desirable and lucrative bug listed in this particular program.

 

 

 

2. 사용자 인터페이스

계정을 하나 만들고 로그인을 하면 이렇게 글을 작성하는 기능만 하는 페이지가 존재하였다.

 

 

 

3. Walkthrough

3.1 SSRF


이 모듈에서 핵심적으로 다뤘던 SSTI 취약점이 존재하는 줄 알고 템플릿 구문을 마구잡이 집어넣었는데 전혀 실행이 되지 않았다. 그래서 페이지 소스를 중점적으로 관찰한 결과 Delete 버튼에서 getmessage()라는 커스텀 함수를 사용하는 것을 알 수 있었다.

 

개발자 도구 soruce 탭에서 jquery 라이브러리를 사용한 js 파일을 볼 수 있었는데 base64로 인코딩 된 무언가를 조합하고 있었다.

function dec(str) {
	var w = atob(str);
	return w.split("").reverse().join("");
}
function getmessage() {
	var x = "Ly86cHR0aA==";
	var y = "dHNvaC5ub2l0YWNvbC53b2RuaXc=";
	var z = "dHh0LmVnYXNzZW0vMDgwODoxLjAuMC43MjEvLzpwdHRoPXQzM2w/M000M2wxRnQ0aFR0M0cv";
	var woot = dec(x) + eval(dec(y)) + dec(z);
	fetch(woot)
	.then(response => response.text())
	.then(data => {
		return confirm(data);
	});
}

 

console에서 base64 디코딩을 한 결과 값을 보기 위해서 woot 변수를 찍어주게 끔 getmessage 함수를 바꿔줬더니 아래와 같이 내부의 어떤 자원을 요청하고 있었다.

 

그리고 해당 url로 접속하면 디렉토리 리스팅 된 모습이 보였고 flag.txt 파일을 찾을 수 있었다.