有关Python字典的一个坑

最近用gevent改写自己的pocmap,改写的两个点如下:

1.针对每个url都有一堆poc去测试;

2.有一堆url要去测试。

之前改了1,测试速度立刻提升了nnnn倍,我正要爽得飞起的时候,改2出问题了。。

改了2以后发现之前有漏洞的站测不出来了!

抓包一看我就震惊了:

2016-11-09 17:20:31屏幕截图

 

我发现在测试所有目标的时候目标的路径都变成了/easyInsurance/html5/login.html,也就是在我目标url列表里最后一个站的路径,怪不得测不出漏洞,这是个什么情况?!

2016-11-09 17:23:51屏幕截图

 

2016-11-09 17:44:49屏幕截图

 

路径就是上面productname字典的path键值,输出一下看看情况:

2016-11-09 17:23:06屏幕截图

 

沃日,传到g_scan_one函数之前还是对的,怎么里面就覆盖了?难道是gevent的问题?不对呀,为啥只有productname覆盖了,前面的参数像target_ip都是正确的?

2016-11-09 17:21:15屏幕截图

和同事一起研究,在传到g_scan_one函数之前用id函数输出一下target_ip和productname的地址,结果如下:

2016-11-09 17:21:45屏幕截图

 

看到结果就明白了,字符串target_id的地址是每次都变化的,而字典productname的地址每次循环都是不变的,所以path键字符串的地址也是不变的,由之前的输出可以知道,g_scan_one函数是循环完才开始执行的(下图),所以productname参数就都被覆盖成最后一个了。。。

2016-11-09 17:51:06屏幕截图

 

 

发表评论

电子邮件地址不会被公开。 必填项已用*标注