본문 바로가기
STUDY/Hacking Factory

[WEB] 해커팩토리 초급

by CH@3M 2020. 6. 5.

해커팩토리 (https://hackerfactory.co.kr/)

초급

Problem-1. Burpsuite를 이용해 UserPoint 값을 구매금액 이상으로 변조해 주면된다.

Problem-2. CostDC 값을 OriginalCost값과 같게하여 TotalCost를 0으로 조작하면된다.

Problem-3. TotalCost 값을 암호화? 인코딩? 시킨것 같아보였으나, 역시 0으로 바꿔주니 구매에 성공하였다.

 

Problem-4. Filedownload 취약점 문제이다. Get으로 통신하며

 

Problem-5. Response 변조

function FileDownload(FileName) {
	FileName = FileName + "," + DownloadAccessPerm
	FileName = Base64.encode(FileName);	

	var DownloadActionMethod = "POST";
	var DownloadActionPage = "HackDownAct.php";

	if ( DownloadAccessPerm == "N") {
		alert("파일 다운로드 권한이 없는 사용자 입니다.");
	}

	document.frm.action = DownloadActionPage;
	document.frm.method = DownloadActionMethod;
	document.frm.FileName.value = FileName;
	document.frm.submit();
}

function DenyAlert() {
	alert("파일 다운로드 권한이 없는 사용자 입니다.");
}
<form name="frm" action="" method="">
<input type="hidden" name="FileName" value="">
</form>
<a href="javascript:FileDownload('.../...//.../...//temp/hacktory.txt')">File Download</a>

 

 

Problem-6. Burpsuite로 idx 수정하여 접근

 

Problem-7. 복호화 코드 짜야함 ㅠ

# -*- encoding: cp949 -*-
EncryptReadKey = "iRAJHaTRiRAJHaLLFBOwrXoLF6j2rSXC"
_keyStr = "DUYZabcVWdQefGghijklmAnEFopqrHstKLuvXwRSxyz0IO12M34JN5B6789+PT/=C"
output = ""
index = 0

while index < len(EncryptReadKey):
	if index == 28:
		for chr1 in range(33,126):
			for chr2 in range(33,126):
				enc1 = _keyStr[chr1 >> 2]
				enc2 = _keyStr[((chr1 & 3) << 4) | (chr2 >> 4)]
				enc3 = _keyStr[(chr2 & 15) << 2]
				enc4 = _keyStr[64]

				if EncryptReadKey[index] == enc1 and EncryptReadKey[index+1] == enc2 and EncryptReadKey[index+2] == enc3 and EncryptReadKey[index+3] == enc4:
						output += chr(chr1) + chr(chr2)
		index += 4
		print(output)

	else:
			for chr1 in range(33,126):
				for chr2 in range(33,126):
					for chr3 in range(33,126):
						enc1 = _keyStr[chr1 >> 2]
						enc2 = _keyStr[((chr1 & 3) << 4) | (chr2 >> 4)]
						enc3 = _keyStr[((chr2 & 15) << 2) | (chr3 >> 6)]
						enc4 = _keyStr[chr3 & 63]

						if EncryptReadKey[index] == enc1 and EncryptReadKey[index+1] == enc2 and EncryptReadKey[index+2] == enc3 and EncryptReadKey[index+3] == enc4:

							output += chr(chr1) + chr(chr2) + chr(chr3)
			index += 4
			print(output)

print("\nFinal result : %s" % output)

 

Problem-8. admin으로 바꾸고 개발자모드나 코드를 보면 비밀번호가 평문으로 노출되어있음. 그걸로 다시 로그인하면 성공

 

Problem-10. 주석을 보면 인가계정의 범위가 있음. MyPage 로 가면 sid 값이 나오는데, 이걸 BurpSuite의 Intruder 기능으로 찾아낼 수 있다.

반응형