本篇将会涉及:
- Selenium与PhantomJS
- 为渗透测试探测器添加截图功能
- 测试新功能
在前面文章中,我们使用Python编写了一个渗透测试探测器,从fuzz数据库中获取字典信息,利用requests模块请求拼接组装的URL,从而获得URL的响应内容,并借助termcolor模块将整理后的信息打印出来。
现在我们又有了一个不成熟的想法,不知道当不当说。
在正常的Web渗透测试中,我们在探测完一个网站,获取到所有的探测结果之后,肯定要看看请求成功的链接的网页是长什么样子的。如果URL过多,一个一个去点击的话,就太浪费时间了。所以我们需要获取到网页的截图,方便探测完之后,查看网页。
Selenium与PhantomJS
要对请求的网页进行截图,这样的操作,requests大概是没辙了。这时候,我们需要使用到另一个工具——Selenium,一个专门用于Web自动化测试的模块。
其能够借助浏览器内核驱动,实现浏览器的各种动作。在Python中,我们通过pip可以轻易的进行安装:
pip install selenium
Selenium可以使用多种浏览器内核,比如主流的Chrome、 Firefox等,但在这里,我们使用另一个非主流的浏览器——PhantomJS,一个无头浏览器。除了没有图形界面外,拥有其他主流浏览器的所有功能。
我们可以在命令行使用phantomjs,自然也可以在Python中使用Selenium来调用phantomjs:
from selenium import webdriver
driver = webdriver.PhantomJS(executable_path=r"D:\phantomjs.exe")
这样,就实现了使用PhantomJS作为Selenium调用的浏览器内核了。
在实例化一个webdriver后,使用get()方法,可以访问一个URL:
driver.get("http://bxu2713810459.my3w.com")
使用save_screenshot()方法,可以保存页面的截图。
driver.save_screenshot("zmister.com.png")
关于Selenium的其他运用,可以参见博客的其他文章,或是网络上的资料。在此,我们主要使用到这两个方法。
添加网页截图功能
了解到使用Selenium进行网页请求和截图的方法后,我们就可以为我们的渗透测试探测器添加新功能了。
当然,肯定不是每个页面都需要保存网页的截图,我们对请求成功的页面进行截图,也就是响应的状态码大于等于200小于300的网页才需要截图。
下面修改一下request_performer()类中的run()方法:
def run(self):
try:
r = requests.get(self.url)
# 统计网页行数
lines = str(r.text.count("\n"))
# 统计网页字符数
charts = str(len(r.text))
# 统计网页词数
words = str(len(re.findall(r"\S+", r.text)))
# 哈希值
hashs = str(hashlib.md5(r.content).hexdigest())
# 状态码
scode = str(r.status_code)
if scode != str(self.hidecode):
if '200' <= scode < '300':
driver = webdriver.PhantomJS(executable_path=r"D:\phantomjs.exe")
driver.get(self.url)
time.sleep(3)
driver.set_window_size(1024,768)
driver.save_screenshot(self.word+".png")
print(colored(scode,'green') + "\t" + charts + " \t" + lines + " \t" + words+" \t"+hashs+"\t"+self.url)
elif '400' <= scode < '500':
print(colored(scode,'red') + "\t" + charts + " \t" + lines + " \t" + words+" \t"+hashs+"\t"+self.url)
elif '300' <= scode < '400':
print(colored(scode,'blue') + "\t" + charts + " \t" + lines + " \t" + words+" \t"+hashs+"\t"+self.url)
else:
print(colored(scode,'yellow') + "\t" + charts + " \t" + lines + " \t" + words+" \t"+hashs+"\t"+self.url)
i[0] = i[0] -1
except Exception as e:
print(e)
我们主要添加了4行代码:
driver = webdriver.PhantomJS(executable_path=r"D:\phantomjs.exe")
driver.get(self.url)
time.sleep(3)
driver.set_window_size(1024,768)
driver.save_screenshot(self.word+".png")
实例化一个webdriver,请求url,等待3秒,设置浏览器窗口大小,保存网页截图。
测试网页截图功能
修改好代码之后,我们可以测试一下我们的第4版本的渗透测试探测器了。
在命令行终端运行命令:
python3 bruteforce4.py -w http://www.scruffybank.com/FUZZ -t 5 -f common.txt -c 404
运行完成,我们看看我们的文件夹:
多出了5个图片,我们打开一个看看:
与浏览器打开的是一样的:
这样我们使用Python编写的渗透测试探测器就基本完善好了。
接下来,我们将会介绍Python Web渗透测试之密码攻击!
文章版权所有:州的先生博客,转载必须保留出处及原文链接