Smuggler是一款功能强大的HTTP请求走私和去同步安全测试工具,该工具基于纯Python 3开发,可以帮助广大研究人员针对应用程序的HTTP协议执行安全分析和测试。
由于该工具基于Python 3开发,因此我们首先需要在本地设备上安装并配置好Python 3环境。接下来,广大研究人员可以直接使用下列命令将该项目源码克隆至本地:
git
clone
https:
//github.com/defparam/smuggler.git
然后切换到项目目录中,执行下列命令即可查看工具帮助信息:
cd
smuggler
python3
smuggler.py -h
工具使用
针对单个主机执行安全扫描:
python3
smuggler
.py
-u
<
URL
>
查看主机列表:
cat
list_of_hosts.txt | python3 smuggler.py
工具参数选项
usage
: smuggler.py [-h] [-u URL] [-v VHOST] [-x] [-m METHOD] [-l LOG] [-q]
[-t TIMEOUT] [
--no-color] [-c CONFIGFILE]
optional arguments:
-h,
--help 显示工具帮助信息和退出
-u URL,
--url URL 设置目标节点URL
-v VHOST,
--vhost VHOST
指定一个虚拟主机
-x,
--exit_early 扫描到第一个结果后退出扫描
-m METHOD,
--method METHOD
要使用的HTTP方法,例如GET或POST,默认为POST
-l LOG,
--log LOG 指定一个日志文件
-q,
--quiet 开启静默模式,仅显示找到的安全问题
-t TIMEOUT,
--timeout TIMEOUT
Socket超时值,默认为5
--no-color 禁用颜色高亮显示
-c CONFIGFILE,
--configfile CONFIGFILE
Payload配置文件路径
(右滑查看更多)
需要注意的是,如果URL参数中指定了“https://”,那么Smuggler将会使用SSL/TLS与目标主机和端口链接。如果URL参数中指定的是“http://”,则不会使用SSL/TLS。如果不指定主机的话,工具默认使用“https://”。
工具配置文件
Smuggler的工具配置文件为Python文件,路径为“./config” ,这些文件用于米哦啊叔HTTP请求的内容以及要测试的传输编码变异。
下面给出的是default.py配置文件的内容样例:
def render_template(gadget):
RN =
"rn"
p = Payload()
p.header =
"__METHOD__ __ENDPOINT__?cb=__RANDOM__ HTTP/1.1"
+ RN
# p.header += "Transfer-Encoding: chunked" +RN
p.header += gadget + RN
p.header +=
"Host: __HOST__"
+ RN
p.header +=
"User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.87 Safari/537.36"
+ RN
p.header +=
"Content-type: application/x-www-form-urlencoded; charset=UTF-8"
+ RN
p.header +=
"Content-Length: __REPLACE_CL__"
+ RN
return
p
mutations[
"nameprefix1"
] = render_template(
" Transfer-Encoding: chunked"
)
mutations[
"tabprefix1"
] = render_template(
"Transfer-Encoding:tchunked"
)
mutations[
"tabprefix2"
] = render_template(
"Transfer-Encodingt:tchunked"
)
mutations[
"space1"
] = render_template(
"Transfer-Encoding : chunked"
)
for
i in [
0x1
,
0x4
,
0x8
,
0x9
,
0xa
,
0xb
,
0xc
,
0xd
,
0x1F
,
0x20
,
0x7f
,
0xA0
,
0xFF
]:
mutations[
"midspace-%02x"
%i] = render_template(
"Transfer-Encoding:%cchunked"
%(i))
mutations[
"postspace-%02x"
%i] = render_template(
"Transfer-Encoding%c: chunked"
%(i))
mutations[
"prespace-%02x"
%i] = render_template(
"%cTransfer-Encoding: chunked"
%(i))
mutations[
"endspace-%02x"
%i] = render_template(
"Transfer-Encoding: chunked%c"
%(i))
mutations[
"xprespace-%02x"
%i] = render_template(
"X: X%cTransfer-Encoding: chunked"
%(i))
mutations[
"endspacex-%02x"
%i] = render_template(
"Transfer-Encoding: chunked%cX: X"
%(i))
mutations[
"rxprespace-%02x"
%i] = render_template(
"X: Xr%cTransfer-Encoding: chunked"
%(i))
mutations[
"xnprespace-%02x"
%i] = render_template(
"X: X%cnTransfer-Encoding: chunked"
%(i))
mutations[
"endspacerx-%02x"
%i] = render_template(
"Transfer-Encoding: chunkedr%cX: X"
%(i))
mutations[
"endspacexn-%02x"
%i] = render_template(
"Transfer-Encoding: chunked%cnX: X"
%(i))
(右滑查看更多)
当前版本的Smuggler提供了三个配置文件,及default.py(快速)、doubles.py(小众使用,慢)、exhaustive.py(非常慢),其中default.py是最快的,其中包含了较少的变异。
我们可以直接使用“-c/--configfile <configfile>”命令行参数来指定要使用的配置文件。
工具提示
此工具不能保证没有假阳性或假阴性,该工具的输出结果仅表明目标可能存在潜在安全问题,我们还需要对工具输出结果进行深入分析和测试后才可得出结论。
许可证协议
本项目的开发与发布遵循MIT开源许可证协议。
项目地址
Smuggler:
https://github.com/defparam/smuggler
【FreeBuf粉丝交流群招新啦! 在这里,拓宽网安边界
甲方安全建设干货; 乙方最新技术理念; 全球最新的网络安全资讯; 群内不定期开启各种抽奖活动; FreeBuf盲盒、大象公仔...... 扫码添加小蜜蜂微信回复“加群”,申请加入群聊】 https://skeletonscribe.net/ https://portswigger.net/research/http-desync-attacks-request-smuggling-reborn https://www.nahamsec.com/ https://nahamcon.com/ 原文始发于微信公众号(FreeBuf):Smuggler:一款功能强大的HTTP请求走私和去同步安全测试工具
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论