用Python做渗透测试,渗透最舒服的测试地方在于不用在语言层面跟工具较劲。一个socket连接三行代码就能建立,渗透想改个payload直接改字符串,测试不用重新编译。渗透我最早用Python写渗透工具是测试因为一个老旧的Struts2漏洞,当时现成的渗透EXP要么带后门,要么参数写死了没法批量。测试索性自己用requests库撸了一个,渗透二十几行,测试跑通了。渗透
这不是测试什么高深的事。Python在渗透测试里的渗透角色,本质上就是测试胶水——把扫描、利用、渗透后渗透各个阶段串起来。有人觉得渗透测试必须用C写shellcode、用汇编调寄存器,那是另一回事。日常的Web渗透、内网信息收集、口令爆破,Python够用了,而且快。
信息收集阶段:别急着上重型武器
很多人一上来就nmap全端口扫描,其实可以先做被动信息收集。比如用
shodan的API查目标IP暴露的服务,Python的shodan库几行就能拉回来。我习惯先跑一段脚本看目标有没有泄露的Git仓库、备份文件、Swagger接口文档。这些用requests加一个字典文件就能搞定,比等nmap出结果快得多。有个细节值得注意:写目录扫描脚本时,别用
for循环加time.sleep(1)这种写法。用concurrent.futures的线程池,并发控制在20-30,既不会把目标打挂,速度也够。我见过有人用单线程扫了四十分钟,结果目标网站日志里全是他的IP,直接被封了。漏洞利用:POC要自己改
网上公开的POC质量参差不齐。我一般拿到一个POC后,先看它的请求构造逻辑,然后改三样东西:超时时间、重试机制、异常处理。很多POC在目标没响应时会直接抛异常崩掉,批量跑的时候一半时间浪费在处理报错上。
比如写一个SQL注入的检测脚本,不要只判断页面是否返回数据库报错。可以用时间盲注的方式,发一个
sleep(5)的payload,然后计算响应时间。Python的time模块配合requests的elapsed属性,能精确到毫秒。这样误报率低很多。后渗透:Python的用武之地
拿到shell之后,Python的优势更明显。目标机器上不一定有nc、不一定有curl,但大概率有Python。用
python -c执行一段反向连接代码,或者用pty模块起一个交互式shell,比传统工具灵活。我写过一个小脚本,专门用来在Windows目标上收集信息:系统版本、补丁列表、杀软进程、当前用户权限、网络连接。用
subprocess调wmic和netstat,输出格式化后直接回传。整个过程不到十秒,比上传一个exe再执行隐蔽得多。不过要小心,Python脚本在目标上运行会留下
__pycache__目录。如果不想留痕迹,用python -B参数禁止生成字节码。这个细节很多人忽略。工具链的取舍
别什么都自己写。端口扫描用
masscan,Web漏洞扫描用Burp,Python只负责调度和结果处理。我见过有人非要用Python重写一个目录爆破工具,结果速度比不上ffuf,功能比不上dirsearch。时间花在刀刃上。真正值得用Python写的是那些需要定制化的环节:比如针对特定CMS的漏洞批量验证、内网横向移动时的凭据抓取、或者把多个工具的输出整合成一份报告。这些场景下,Python的灵活性和生态优势才真正体现出来。
最后说一句,渗透测试的合法性边界很清楚。没有书面授权,任何扫描和利用行为都是违法的。Python只是工具,用在哪里,取决于拿键盘的人。
顶: 9踩: 96





评论专区