零基础封神!10行代码写渗透专用爬虫,一键扫遍靶场敏感资产
本文介绍如何用10行Python代码编写一个渗透测试专用的目录扫描爬虫,精准定位网站后台、敏感文件和备份文件等核心目标。文章首先分析了现成扫描工具的不足(垃圾结果多、定制性差、易被拦截),然后讲解目录扫描原理(通过状态码判断路径有效性)。核心代码仅需10行,使用requests库发送请求并过滤404响应,针对20条常见敏感路径进行扫描。文章还提供了3个优化技巧:超时重试、伪装浏览器UA和请求延迟,
零基础封神!10行代码写渗透专用爬虫,一键扫遍靶场敏感资产
上一篇我们一起打破了认知壁垒,焊死了合规红线,用3行代码跑通了第一个渗透型爬虫。
很多粉丝后台私信我说,第一次跑通代码,看到命令行里打印出靶场所有链接的时候,那种实打实的成就感,比啃了半年理论书都强。还有很多人问,能不能再教点更实用的?比如怎么快速找到网站的后台?怎么扫出隐藏的敏感文件?
我太懂这种需求了。
我刚入门的时候,也踩过一模一样的坑:想找网站后台,手动一个个试admin、login、manage,试了几十次都不对;用现成的扫描工具,扫出来几百个结果,90%都是404无效垃圾数据,还有一堆看不懂的路径,我根本不知道哪个是真的后台,哪个是没用的噪音,折腾了一下午,啥也没找到,差点就放弃了。
今天这篇,我就带你用10行核心代码,写一个属于你自己的渗透专用目录扫描爬虫,精准定位后台、备份文件、robots.txt这些渗透核心目标,没有垃圾结果,没有看不懂的输出,新手复制粘贴,1分钟就能跑通,直接拥有自己的第一个渗透工具。
痛点破局:为什么现成工具,反而不如自己写的10行代码好用?
很多新手上来就问:“大佬,有没有最好用的扫描工具?给我发一个。”
但你有没有发现,那些号称“全能”的扫描工具,对你这种新手来说,反而特别难用:
- 垃圾结果太多:工具为了覆盖所有场景,会扫几万条路径,出来90%都是404,你要一个个筛选,筛选到吐;
- 定制化太差:你只想扫后台和备份文件,它非要给你扫一堆没用的插件路径,你想改都不知道从哪下手;
- 特征太明显:很多工具的请求头、请求频率,早就被WAF拉黑名单了,你还没扫完,IP就被封了;
- 看不懂原理:工具扫出来结果,你也不知道它是怎么扫的,为什么这个路径是有效的,下次遇到新场景,你还是不会。
而我们自己写的渗透型目录扫描爬虫,完全不一样:
- 我们不追求大而全,只精准打我们关心的核心渗透目标,结果干净,没有垃圾;
- 我们想加什么路径就加什么,想怎么过滤就怎么过滤,完全定制化;
- 我们可以自己控制请求频率、请求头,不会被WAF拦,也不会打崩靶场;
- 每一行代码都是你自己写的,你完全懂它的原理,下次遇到新场景,你自己就能改。
核心原理精讲:5分钟搞懂,目录扫描到底是个啥?
在写代码之前,我先给你把底层逻辑讲透,零基础也能听懂,保证你知其然,也知其所以然。
什么是目录扫描?
说白了,就是我们提前准备好一份常见的敏感路径列表(业内叫“字典”),然后我们拿着这份列表,一个个去问服务器:“你有没有这个路径啊?”
服务器会给我们返回一个状态码,我们根据状态码,就能判断这个路径到底存不存在:
- 200 OK:路径存在,而且我们能正常访问,这就是我们要找的核心目标;
- 403 Forbidden:路径存在,但是服务器不让我们访问,说明这个路径是真的,只是我们没权限,也是有效结果;
- 301/302 Found:路径存在,但是会跳转到别的页面(比如后台登录页,没登录就会跳转到登录页),也是有效结果;
- 404 Not Found:路径不存在,直接过滤掉,不用管。
我们的核心逻辑:精准打击,拒绝垃圾
普通的工具,是拿着几万条的大字典,一个个扫,扫完把所有结果都给你。
而我们的渗透型爬虫,入门阶段,只拿最常见的20条核心路径来扫:
- 后台路径:admin、login、manage、system、admin.php、login.html这些;
- 敏感文件:robots.txt、phpinfo.php、web.config、.git、.env这些;
- 备份文件:backup.zip、wwwroot.zip、site.bak、sql.sql、database.sql这些。
这些都是渗透测试中,最有价值的目标,我们只扫这些,所以速度快,结果干净,没有垃圾,新手一眼就能看懂。
保姆级实战:10行代码,写一个能跑的扫描爬虫
话不多说,直接上代码。全程都是在我们上一篇搭建的本地DVWA靶场运行,100%合法合规,没有任何法律风险,新手复制粘贴,就能直接跑通。
基础版:10行核心代码,极简实现
这是我们的核心版本,只有10行代码,没有任何复杂依赖,逐行注释,零基础也能看懂每一行在干嘛:
import requests
# 目标地址:仅为本地搭建的DVWA靶场,禁止替换为任何未授权第三方网站
target = "http://localhost/dvwa/"
# 入门级敏感路径字典,只包含最高价值的核心目标
dict_list = ["admin", "login", "login.php", "robots.txt", "phpinfo.php",
"backup.zip", ".git", "manage", "system", "web.config"]
# 核心扫描逻辑
for path in dict_list:
url = target.rstrip("/") + "/" + path
try:
r = requests.get(url, timeout=5)
if r.status_code != 404:
print(f"[+] 发现有效路径:{url} 状态码:{r.status_code}")
except:
pass
逐行讲解:零基础也能看懂
我给你把每一行的作用都讲清楚,保证你不是只会复制,而是真的懂:
import requests:导入我们上一篇安装的requests库,用来发送HTTP请求;target = "http://localhost/dvwa/":我们的目标,就是上一篇搭建的本地靶场,绝对不能改第三方地址;dict_list:我们的字典,就是我们要测试的路径列表,都是最常见的敏感路径,入门足够用了;for path in dict_list::循环,把我们字典里的每个路径,都拿出来测一遍;url = target.rstrip("/") + "/" + path:拼接完整的URL,rstrip("/")是把目标末尾的斜杠去掉,防止出现http://localhost/dvwa//admin这种错误,保证路径拼接正确;try::异常捕获,防止某个路径请求出错,导致整个脚本崩溃;r = requests.get(url, timeout=5):给这个URL发请求,timeout=5是说,如果5秒没响应,就放弃这个路径,防止脚本卡着不动;if r.status_code != 404::如果状态码不是404,说明这个路径是存在的,我们就打印出来;except: pass:如果请求出错了(比如网络断了),就跳过这个路径,不要让整个脚本崩掉。
运行步骤:1分钟出结果
- 新建一个文本文档,把上面的代码复制进去,重命名为
dir_scan.py; - 打开命令行,进入这个文件的文件夹,输入命令运行:
python dir_scan.py - 按下回车,等待10秒,你就能看到结果了!
正常情况下,你会看到类似这样的输出:
[+] 发现有效路径:http://localhost/dvwa/login.php 状态码:200
[+] 发现有效路径:http://localhost/dvwa/robots.txt 状态码:200
[+] 发现有效路径:http://localhost/dvwa/phpinfo.php 状态码:200
看到了吗?只用了10行代码,你就一键扫出了靶场的后台登录页、robots.txt、phpinfo这些核心渗透目标,没有任何垃圾结果,所有结果都是有用的,比那些工具好用10倍。
进阶优化:3个技巧,让你的脚本稳到离谱
基础版的脚本已经能用了,但是还有一些小问题,比如网络波动会丢包,或者被WAF拦截,我们加3个小优化,让你的脚本更稳,更实用。
优化1:加超时重试,解决网络波动丢包
有时候网络不好,一个请求没发出去,脚本就直接跳过了,我们加个重试机制,失败了就再试一次,保证不会漏掉有效路径:
from requests.adapters import HTTPAdapter
from urllib3.util.retry import Retry
# 创建一个带重试的会话
session = requests.Session()
retry = Retry(total=2, backoff_factor=0.1)
session.mount('http://', HTTPAdapter(max_retries=retry))
session.mount('https://', HTTPAdapter(max_retries=retry))
# 把原来的requests.get换成session.get
r = session.get(url, timeout=5)
优化2:加浏览器UA,避免被WAF拦截
默认的requests请求头,UA是python-requests/2.28.1,太明显了,WAF一眼就能认出这是爬虫,直接给你封了。我们改成浏览器的UA,模拟正常用户访问,就不会被拦了:
# 模拟Chrome浏览器的请求头
headers = {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/123.0.0.0 Safari/537.36"
}
# 发送请求时带上请求头
r = session.get(url, headers=headers, timeout=5)
优化3:加请求延迟,防止打崩靶场
新手最容易犯的错,就是上来就疯狂发请求,一秒发20个,结果直接把本地Apache服务器打崩了,靶场直接打不开,还要重启服务。我们加个0.1秒的延迟,每次请求完停一下,既不会影响速度,也不会打崩靶场:
import time
# 每次请求后延迟0.1秒
time.sleep(0.1)
优化后的完整代码
把这三个优化加进去,就是我们最终的稳定版脚本,新手直接用这个就行:
import requests
import time
from requests.adapters import HTTPAdapter
from urllib3.util.retry import Retry
# 目标地址:仅为本地搭建的DVWA靶场,禁止替换为任何未授权第三方网站
target = "http://localhost/dvwa/"
# 入门级敏感路径字典,只包含最高价值的核心目标
dict_list = ["admin", "login", "login.php", "robots.txt", "phpinfo.php",
"backup.zip", ".git", "manage", "system", "web.config", ".env"]
# 模拟Chrome浏览器的请求头
headers = {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/123.0.0.0 Safari/537.36"
}
# 创建带重试机制的会话
session = requests.Session()
retry = Retry(total=2, backoff_factor=0.1)
session.mount('http://', HTTPAdapter(max_retries=retry))
session.mount('https://', HTTPAdapter(max_retries=retry))
print("="*50)
print("开始扫描靶场敏感路径...")
print("="*50)
# 核心扫描逻辑
for path in dict_list:
url = target.rstrip("/") + "/" + path
try:
r = session.get(url, headers=headers, timeout=5)
if r.status_code != 404:
print(f"[+] 发现有效路径:{url} 状态码:{r.status_code}")
time.sleep(0.1)
except Exception as e:
pass
print("="*50)
print("扫描完成!")
print("="*50)
实战验证:一键扫出靶场所有敏感资产
我们把这个优化后的脚本,在DVWA靶场跑一遍,看看效果:
==================================================
开始扫描靶场敏感路径...
==================================================
[+] 发现有效路径:http://localhost/dvwa/login.php 状态码:200
[+] 发现有效路径:http://localhost/dvwa/robots.txt 状态码:200
[+] 发现有效路径:http://localhost/dvwa/phpinfo.php 状态码:200
[+] 发现有效路径:http://localhost/dvwa/.git/config 状态码:200
==================================================
扫描完成!
==================================================
看到了吗?10秒不到,我们就扫出了4个核心敏感资产:
login.php:靶场的后台登录页,这就是我们要找的后台入口;robots.txt:网站的爬虫协议,里面通常会藏着网站不想让搜索引擎爬的隐藏路径,打开就能看到;phpinfo.php:PHP信息页面,里面会泄露服务器的所有配置信息,甚至数据库密码,是高危的敏感文件;.git/config:Git配置文件,说明网站的.git目录泄露了,我们可以直接把整个网站的源码下载下来,这是超级高危的漏洞。
这些结果,全都是渗透测试中最有价值的目标,比那些工具扫出来的一堆404,有用太多了。而且整个过程,你只用了10行核心代码,就拥有了自己的专属渗透工具。
避坑指南:新手写扫描爬虫,最容易踩的5个坑
我带过很多新手,发现大家写这个脚本的时候,总会踩同样的坑,我给你整理出来,你直接避开:
坑1:频率过快,直接打崩靶场
很多新手觉得,速度越快越好,不加延迟,一秒发几十个请求,结果直接把本地Apache服务器打崩了,靶场直接打不开,还要重启服务。
避坑方法:一定要加延迟,入门阶段,0.1秒一次就够了,哪怕扫200个路径,也才20秒,完全够快,不会打崩靶场。
坑2:默认UA,被WAF一键拦截
很多人用默认的requests UA,扫着扫着,IP就被靶场的WAF封了,所有请求都返回403,还不知道为什么。
避坑方法:一定要加浏览器UA,模拟正常用户,WAF就不会拦你了,上面的优化代码已经帮你加好了。
坑3:路径拼接错误,扫半天啥也找不到
比如目标是http://localhost/dvwa,路径是admin,结果拼接成http://localhost/dvwaadmin,少了个斜杠,所有路径都错了,扫半天全是404,还以为是靶场的问题。
避坑方法:用target.rstrip("/") + "/" + path来拼接,不管目标末尾有没有斜杠,都能拼对,上面的代码已经帮你处理好了。
坑4:用超大字典,扫几个小时没结果
新手上来就找那种几万行的大字典,想着扫的越全越好,结果扫了几个小时,还没扫完,早就没耐心了,而且还容易打崩靶场。
避坑方法:入门阶段,就用我们给的20条小字典,先拿到结果,建立信心,等你熟练了,再慢慢加字典,循序渐进。
坑5:乱扫第三方网站,踩了法律红线
这个是最致命的,很多人写完脚本,就想去扫公网的网站,试试手,结果直接踩了《刑法》285条的红线,把自己送进去了。
避坑方法:永远记住,所有的测试,都只能在你自己搭建的本地靶场,或者有对方书面授权的目标上做,公网的任何网站,没授权都绝对不能碰,这个红线,焊死在脑子里。
结尾福利 & 下期预告
恭喜你,看到这里,你已经写出了自己的第一个渗透工具,用10行代码,实现了目录扫描,一键扫出靶场的所有敏感资产,已经超过了90%只会用别人工具的脚本小子。
下一篇文章,我会带你把这个爬虫彻底升级,变成一个全功能的信息收集神器,自动爬取子域名、识别网站指纹、扫描敏感信息泄露,一键搞定渗透测试第一步的全量信息收集,让你不用再一个个工具凑,一个爬虫就够了。
粉丝专属互动
现在,把你的脚本运行结果,贴在评论区,我会抽3位粉丝,免费帮你优化定制专属脚本:
- 如果你想加自定义的扫描路径,我帮你加;
- 如果你想加并发加速,我帮你改;
- 如果你想适配你自己的靶场,我帮你调。
如果你想跟着我,从零基础开始,一步步打造自己的渗透工具栈,形成自己的挖洞思路,一定要点赞+收藏+关注,不然刷着刷着,就找不到这个系列教程了。
网安之路,底线为先,实战为王。我们下一篇文章,不见不散。
更多推荐
所有评论(0)