일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
- 디스크 포렌식
- union sql injection
- 해커팩토리
- 웹 해킹
- 리버싱 기초
- python flask
- 게시판 만들기
- CTF-d
- 해커팩토리 8번
- 포렌식
- 네트워크 포렌식
- 테이블명 수집
- 로그 분석
- Burp Suite Intruder
- SQL Injection
- 웹해킹 실습
- 시스템 해킹
- 해커 팩토리 6번
- 해커 팩토리
- ftz
- Burp Suite
- 리버싱
- 부트스트랩
- 레나 튜토리얼
- 파일 다운로드 취약점
- 해커팩토리 10번
- 보안
- 해커팩토리 7번
- SANS
- Blind Sql Injection
- Today
- Total
Cha4SEr Security Study
[해커팩토리 초급] - 5번 본문
해커팩토리 초급 5번 문제입니다.
4번 문제와 유사하며 조금더 안전한 다운로드 게시판인것 같습니다.
접속해봅시당
역시나 똑같은 화면이 뜨고
게시글 하나를 클릭하니 접근 권한이 없다고 뜨고 이전 화면으로 돌아오게 됩니다.
F12 눌러서 게시글 url에 해당하는 부분을 클릭해서 들어가면
새로운 창으로 화면이 보이게 되고, 경고창은 뜨지만 이전 화면으로 돌아가지는 않습니다.
이제 이 페이지에서 취약점을 찾아봅시다.
우선 파일이 정상적으로 다운로드 되는지 확인하기 위해 다운로드 버튼을 누릅니다.
파일 다운로드 권한이 없다고 뜨네요
이것저것 많이 막아놓은것 같습니다.
F12를 눌러서 소스코드를 확인해봅시당
첫번째 알 수 있는 정보는 다운로드 버튼을 눌렀을 때 경고메세지를 출력하는 자바스크립트를 호출한다는것
두번째는 DownloadAccessPerm을 설정하는 부분의 존재
세번째는 Utill.js의 존재입니다.
Utill.js는 개발자가 웹 사이트를 만들면서 여러가지 유용한 자바스크립트 코드를 모아놓은 곳 정도로
보시면 될 것 같습니다.
크롬으로 사이트에 내장된 js파일을 보는 방법은 빨간색 박스 친 부분에서 Utill.js에 마우스 우클릭을 한 후
Open in new tab을 클릭하면
자바스크립트 코드를 볼 수 있습니다.
여기에는 Base64가 정의되어 있고, 밑으로 좀 내려보면
우리가 원하는 FileDownload에 대한 함수가 정의되어 있습니다.
이제 이 함수 코드를 해석해봅시다.
function FileDownload(FileName) {
// 파리미터로 받은 FileName과 DownloadAccessPerm을 합쳐서
// FileName을 새로 정의
FileName = FileName + "," + DownloadAccessPerm
FileName = Base64.encode(FileName);
// DownloadActionMethod와 DownloadActionPage라는 변수 정의
var DownloadActionMethod = "POST";
var DownloadActionPage = "HackDownAct.php";
// 만약 DownloadAccessPerm이 "N" 이라면 경고 메세지 출력
if ( DownloadAccessPerm == "N") {
alert("�뚯씪 �ㅼ슫濡쒕뱶 沅뚰븳�� �녿뒗 �ъ슜�� �낅땲��.");
}
// HTML 요소 중 name 속성이 "frm"인 요소의 "action" 속성을 "HackDownAct.php"로 설정
document.frm.action = DownloadActionPage;
// HTML 요소 중 name이 "frm"인 요소의 "method" 속성을 "POST"로 설정
document.frm.method = DownloadActionMethod;
// HTML 요소 중 name이 "frm"인 요소의 하위 요소 중 name 속성이 "FileName"인 요소의
//"value" 속성을 FileName으로 설정
document.frm.FileName.value = FileName;
// frm submit
document.frm.submit();
}
.
FileName 함수가 호출되면 HTML 요소 중 frm을 불러오고, 그 frm이 submit 되면서 파일 다운로드 요청을 하게 됩니다.
하지만 페이지 소스코드를 보시면 아시겠지만 주어진 코드에서는
1. FileDownload 함수를 호출하는 요소
2. name="frm"인 form 태그
3. name="frm"인 form 태그 하위에 있는 name="FileName"인 요소
세가지가 존재하지 않습니다.
때문에 우리는 저 3가지 요소를 추가해주어야 합니다.
이를 위해서 이번에는 서버로 보내는 요청값을 수정하는 것이 아닌,
서버로부터 오는 Response를 수정해야 합니다.
Burp Suite는 기본 설정으로는 HTTP Request만 보이지만, 서버로부터 오는 HTTP Response도 볼 수 있습니다.
[Proxy] - [Options] 에서 Intercept Server Responses에 있는 체크박스를 체크하시면 서버로부터 오는 응답 페이지를
위조할 수 있습니다.
이걸 체크한 다음 어떤 결과가 나오는지 확인해봅시다.
Burp Suite를 활성화 시킨 다음 우리가 손봐야할 이 페이지를 새로고침 합니다.
Request 화면이 먼저 보이고 Forward를 누르면
Response 헤더와 함께 출력할 HTML 코드까지 함께 보여집니다.
Request와 마찬가지로 저 정보들은 수정이 가능하기 때문에 위에서 부족했던 3가지 요소들을
이 Response 값에서 추가할 수 있습니다.
그전에 javascript 안에 숨은 DownloadAccessPerm을 "N"이 아닌 "Y"로 먼저 설정해줍니다.
HTML 코드를 조금 내려보면 저 부분이 보일겁니다. N에서 Y로 바꿔줍시다.
다음 <BODY> 태그 안에 아무 위치에 3가지 요소를 추가해봅시다.
우선 frm이라는 form 태그를 추가해야 합니다.
<form name ="frm" action="" method="">
<input type="hidden" name="FileName" value=""></input>
</form>
FileDownload 함수에 있는 내용과 일치시켜 주기 위해 name을 "frm"으로 설정한 다음 action과 method를 선언만
해주고 공백으로 비워둡니다. (FileDownload 함수가 실행되면서 저 부분이 "HackDownAct.php"과 "POST"로
채워질 것입니다.)
다음은 FileDownload 함수를 호출하는 요소를 추가해야 합니다.
<a href="javascript:FileDownload('..././..././temp/hacktory.txt')">download</a>
이렇게 하면
1. download 글자를 클릭한다.
2. FileDownload 함수가 호출된다.
3. FileDonwload 함수 내에서 name="frm" 인 form 태그의 속성을 채워간다.
4. FileDownload 함수 내에서 form 태그를 submit 하여 파일 다운로드가 진행된다.
위와 같은 순서로 파일 다운로드가 진행될 것입니다.
그럼 저 코드를 HTTP Response에 추가해봅시다.
컨테이너 가장 마지막 부분에 위 코드들을 추가해주었습니다.
이제 Forward를 눌러서 페이지를 봅시다.
왼쪽 밑에 download 버튼이 활성화되었습니다. 이 버튼을 누르게 되면!
다운로드가 성공적으로 되고 문제가 풀렸습니당!
'Web > 해커팩토리[초급]' 카테고리의 다른 글
[해커팩토리 초급] - 7번 (0) | 2020.07.09 |
---|---|
[해커팩토리 초급] - 6번 (1) | 2020.07.08 |
[해커팩토리 초급] - 4번 (0) | 2020.07.08 |
[해커팩토리 초급] - 3번 (0) | 2020.07.08 |
[해커팩토리 초급] - 2번 (0) | 2020.07.08 |