본문 바로가기

보안/기초

burpsuite을 이용해 파일업로드취약점 확장자 명 우회 취약점 / burpsuite 문제점

파일 업로드 취약점 확장자명으로 우회 하는 방법

다른 버전으로 우회하는 방법

PHP: .php, .php2, .php3, .php4, .php5, .php6, .php7, .phps, .phps, .pht, .phtm, .phtml, .pgif, .shtml, .htaccess, .phar, .inc, .hphp, .ctp, .module

Working in PHPv8: .php, .php4, .php5, .phtml, .module, .inc, .hphp, .ctp

ASP: .asp, .aspx, .config, .ashx, .asmx, .aspq, .axd, .cshtm, .cshtml, .rem, .soap, .vbhtm, .vbhtml, .asa, .cer, .shtml

Jsp: .jsp, .jspx, .jsw, .jsv, .jspf, .wss, .do, .action

Coldfusion: .cfm, .cfml, .cfc, .dbm

Flash: .swf

Perl: .pl, .cgi

Erlang Yaws Web Server: .yaws

그외 다른 방법

1. 대소문자를 이용한 방법

파일 확장자명을 대소문자와 섞어서 우회를 피한다.

[예시]

파일이름.pHP2

파일이름.CshTm

2. 유효한 확장자를 쓰고 실행할 확장자 쓰기

[예시]

파일이름.png.php

파일이름.png.php5

3. 특수문자를 끝에 추가하기

[예시]

파일이름.php%20

파일이름.php.%0a

파일이름.php.%00

파일이름.php.%0d%0a

파일이름.php/

파일이름.php.\

파일이름.

파일이름.php….

파일이름.pHP5…..

4. 실행할 확장자에 서버사이드 언어에서 사용되는 주석처리,null 데이터 등을 쓰기

[예시]

파일이름.png.php

파일이름.php.pHp5

파일이름.php#.png

파일이름.php%00.png

파일이름.php%0a.png

파일이름.php%0d%0a.png

파일이름.phpJunk123png

 

5. 확장자의 층(another layer of extension)을 감시하는 부분전에 넣기

[예시]

파일이름.png.jpg.php

파일이름.php%00.png%00.jpg

 

6.exec 확장자를 실행할 확장자 이전에 넣고 서버오류로 인해 실행되기를 기도하기

php 확장자로 아파치 서버 공격하는데 유용하게 쓰인다.꼭 php 확장자가 아니여도 된다.

 

7. 윈도우에 NTFS ADS(aleternate data stream)를 이용하기

윈도우에서 NTFS 대체 데이터 스트림(Alternate Data Stream, ADS)을 사용하는 경우, 금지된 확장자 뒤에 허용된 확장자 앞에 콜론 문자 ":"이 삽입된다. 이로 인해 서버에 금지된 확장자를 가진 빈 파일이 생성된다(예: "file.asax:.jpg"). 나중에 이 파일은 다른 기술을 사용하여 편집될 수 있다. 예를 들어 해당 파일의 짧은 파일 이름을 사용하는 방법 등이 있다. "::$data" 패턴도 비어 있지 않은 파일을 생성하는 데 사용될 수 있다. 따라서 이 패턴 뒤에 점 문자를 추가하는 것이 추가적인 제한을 우회하는 데 유용할 수도 있다

[예시]

"file.asp::$data.

8. 파일 이름을 최대치 넘기기

파일이름을 검사하는 길이 다음으로 쓰고 나면 실행이 된다.

# Linux maximum 255 bytes
/usr/share/metasploit-framework/tools/exploit/pattern_create.rb -l 255
Aa0Aa1Aa2Aa3Aa4Aa5Aa6Aa7Aa8Aa9Ab0Ab1Ab2Ab3Ab4Ab5Ab6Ab7Ab8Ab9Ac0Ac1Ac2Ac3Ac4Ac5Ac6Ac7Ac8Ac9Ad0Ad1Ad2Ad3Ad4Ad5Ad6Ad7Ad8Ad9Ae0Ae1Ae2Ae3Ae4Ae5Ae6Ae7Ae8Ae9Af0Af1Af2Af3Af4Af5Af6Af7Af8Af9Ag0Ag1Ag2Ag3Ag4Ag5Ag6Ag7Ag8Ag9Ah0Ah1Ah2Ah3Ah4Ah5Ah6Ah7Ah8Ah9Ai0Ai1Ai2Ai3Ai4 # minus 4 here and adding .png
# Upload the file and check response how many characters it alllows. Let's say 236
python -c 'print "A" * 232'
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
# Make the payload
AAA<--SNIP 232 A-->AAA.php.png

 

 

 

실습 환경설정

 

[그림1] 실습 환경 설정

 

bwapp을 이용하여 실습을 들어간다.

[그림2] 보안 레벨 설정

보안 레벨 설정은 midium 으로 설정을 해둔다.

midum 레벨에서는 일반적인 php 파일을 업로드 할시 실패가 되는 단계이다

[그림 3] 설정 완료시 모습

실습

실습에 이용할  webshell 파일은 시스템을 건드리는 웹쉘 파일이 아닌 그냥 info 정보만 호출되는 php 파일로 할것이다.

왜냐하면 실무에서 웹쉘을 올려놓고 지우는것을 까먹거나 테스트 도중에 블랙 해커가 해당 파일을 통해 악용될수 있기때문에 이를 방지하기 위해 정상적인 php 파일이 업로드가 되는지 정도의 파일로 실습을 진행한다. 

[그림4] 실습에 이용할 php 파일 소스
[그림 4-2] phpinfo 파일 화면

phpinfo()는 php 파일 버전 정보와 그외 php 관련 정보들을 확인할 수 있는 파일이다.

[그림 5] 프록시를 킨다

burpsuite을 실행을 시키고 프록시를 킨다.

[그림 6] 테스트할 파일을 선택한다

browse 버튼을 통해 실습할 php 파일을 업로드를 한다.

그리고 upload 버튼을 누르면 프록시에 잡힌다.

[그림 7] 프록시에 잡힌 내용

프록시에 잡힌 내용을 다음과 같이 확인할 수 있다.

[그림 8] send to Intruder

잡힌 프록시를 마우스 우클릭을 통해 Intruder에 보낸다.

[그림9] intuder 설정

그리고 확장자를 바꿀수 있게 확장자 부분에 블록지정을 하고 add 버튼을 누른다

 

[그림10] payload 탭 설정

payload 탭으로 이동하여 payload 세팅을 한다

payload type은 simple list로 하고 (디폴트 설정)

payload settings에서 다양한 확장자 명을 추가한다.

세팅이 완료가 되었다면 공격을 시작하면 된다.

[그림 11] payload 실행

 

response에 render탭에 들어가면 업로드가 성공한 것을 확인할 수 있다.

[그림 12] 업로드 확인

bee-box 서버에서 확인을 해보면 파일이 업로드 된것을 확인할 수 있다.

 

실습 완료.

 

Intruder 문제

[그림 13] 자동으로 인코딩으로 인젝션된다

payload 리스트에 내용들이 자동으로 인코딩이 되어서 실행이 된다.

이게 security level이 midium일때는 문제가 안되지만 high로 설정할때는 문제가 된다.

[그림 14] secuirt level high

레벨을 high로 설정을 한다.

 

[그림15] 서버사이드 주석처리를 붙여서 업로드
[그림16] 업로드 성공

파일 확장자 명에 #을 붙여서 서버사이드쪽에서 주석으로 인식을 해서 업로드가 성공이 되는 단계이다.

[그림17] Intruder로 실행

Intruder 단계에서는 인코딩을 한상태로 업로드가 된다.

[그림18] 업로드 실패

서버사이드에서 인코딩된 문자는 #으로 받아들이지 못해서 업로드에 실패를 하게 된다.

 

 

참고

https://book.hacktricks.xyz/pentesting-web/file-upload

 

반응형

'보안 > 기초' 카테고리의 다른 글

xss cheatsheet  (0) 2024.10.30
time base sql injection  (0) 2024.01.14
blind SQL injection  (1) 2024.01.14
Error based SQL injection  (0) 2024.01.13
TCP vs UDP  (0) 2023.11.14