본문 바로가기
보안 공부/Web

SSRF(Server-Side Request Forgery) 취약점

by 그적 2020. 9. 1.

SSRF(Server-Side Request Forgery) 취약점

"PHP Warpper를 사용한 LFI" 라고 생각하면 되려나?  잘 모르겠다.
PHP는 Wrapper(래퍼)를 이용하여 파일에 대한 액세스를 추상화하는 취약점을 발생시킬 수 있다. 여러 종류의 PHP Wrapper 방법이 있지만, 가장 많이 시도되는 것은 php://를 사용한 base64 인코딩 방법이다.

PHP 5.0.0 이상 버전에서 사용이 가능하고, 우리가 흔히 브라우저에 접속할 때 http:// 를 사용하는 것도 http 프로토콜을 통해 파일이나 리소스에 접근하기 위한 url-syntax 형식의 wrapper라고 한다.

(URL scheme 종류)
- php://   다양한 입출력 스트림에 대한 접근 
- file://     로컬 파일 시스템 접속

- http://   HTTP url 접속
- ftp://     FTP url 접속
- zlib://    압축 스트림
- data://   데이터(RFC2397)
- glob://   패턴에 매치하는 경로 이름 검색
- phar://   php 아카이브

(php://filter 사용 예제)
: 로컬 파일 시스템에 접속하여 파일 내용 불러오기

아래 코드 내용을 가진 example.php 파일이 존재한다.

여기서 url 파라미터에 filename=php://filter/convert.base64-encode/resource=var/www/html/test.php를  준다면, test.php 파일 내용을 불러 올 수 있다.

** convert.base64-encode : 데이터를 base64로 인코딩
** resource : php://filter의 필수 파라미터, 필터링할 stream을 명시함

 

추가적으로 base64가 막힐 가능성이 있으므로, string.rot13으로 암호화하여 진행할 수도 있다.
 // 주석으로 들어감+복호화결과

(expect:// 사용 예제)
 : system command를 실행한다.

아래 코드를 가진 example.php 파일이 존재한다. (에러 코드 출력을 위해서 위의 두줄을 넣어줌)

url 파라미터에 filename=expect://ls 를 넘겨줄 경우에, 정상 작동되겠지만 expect 모듈을 설치하지 않았으므로 에러코드가 출력된다. (**zip도 모듈을 설치해야 할 것이다. 그러므로 PHP Warpper에 기본으로 탑재된 php://filter를 사용하자.)

 

(zip:// 사용 예제)
: zip 파일 압축을 풀고, 압축을 푼 파일 안에 있는 파일을 실행시켜주는 기능

www.example.com?filename=zip://file.zip#shell.php
** # 뒤에있는파일을 실행시킴

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

Exploit with PHP Protocols / Wrappers

(사진 출처 : https://www.cdxy.me/?p=752)

'보안 공부 > Web' 카테고리의 다른 글

[Web] SQL 쿼리 취약점 정리  (0) 2021.11.11
[Web] 웹 인코딩 종류  (0) 2021.11.11
LFI(Local File Inclusion) 취약점  (0) 2020.09.01
PHP 비교 연산자 취약점, 매직 해쉬  (0) 2020.07.31
[Python] Request 모듈 사용 방법  (1) 2020.04.30

댓글