freeBuf
主站

分类

云安全 AI安全 开发安全 终端安全 数据安全 Web安全 基础安全 企业安全 关基安全 移动安全 系统安全 其他安全

特色

热点 工具 漏洞 人物志 活动 安全招聘 攻防演练 政策法规

点我创作

试试在FreeBuf发布您的第一篇文章 让安全圈留下您的足迹
我知道了

官方公众号企业安全新浪微博

FreeBuf.COM网络安全行业门户,每日发布专业的安全资讯、技术剖析。

FreeBuf+小程序

FreeBuf+小程序

0

1

2

3

4

5

6

7

8

9

0

1

2

3

4

5

6

7

8

9

0

1

2

3

4

5

6

7

8

9

当Yakit 与 Burpsuite正面对碰!
yaklang 2023-11-06 16:07:37 158008

众所周知,BurpSuite几乎成为全球WEB安全从业者必用的安全测试工具,然而十余年来尚无一个可替代的解决方案。破解版被投毒风险高、商业版太贵、插件难写、依赖java…等等问题逐渐显露。

与我个人而言,经常会遇到的一种情况就是,有的网站BurpSuite一打开就会被WAF拦掉,这也是我从Burp转到Yakit的契机和原因之一吧。

在经过一段时间的使用与体验后,想着针对两个工具之间的功能性模块,来一个正面对决,1V1分析一番。

1699255482_654894ba3128d64176b25.png!small?1699255482643

BurpSuite-Proxy模块

先看熟悉的Burp抓包,打开抓包

1699255496_654894c855a7ca8921fb3.png!small?1699255496879

所有的流量都会拦下来,包括一些没用的"心跳",如下图

比如付款的页面,会不断发送数据包进行检测是否付款成功

1699255511_654894d76f4dba93bcb1e.png!small?1699255511894

尽管这里可以设置要拦截的流量,但是设置还是比较麻烦,

比如你要对一个网站进行测试,设置好了过滤的策略,这时候,突然电脑关机了,你打开Burp又要设置一遍过滤的策略。

1699255526_654894e67ca051164e008.png!small?1699255527027

在还没遇到并使用Yakit之前,我的解决办法是装一个插件 knife,对于没用且频繁发送的数据包dismiss。

1699255539_654894f3513e39a49c824.png!small?1699255539862

它根据url或host可以选择drop或者forward

1699255550_654894fed8cb0a6fda670.png!small?1699255551273

但是,我们在实际测试中还会有个问题

比如你测试的是a.com

有一个"心跳"为a.com?log=nkebsfks(随机数)

这个时候如果你选择dismissed整个host,那你测试这个站的流量全部会被放过,如果你选择dismissed这个url,下一个"心跳"仍然会被拦截(因为含有随机数)。

所以又不得不回到这里设置拦截的规则,而且对于不懂正则的人来说,这里可能又会碰上难题。

1699255563_6548950b3eb4f1345a23e.png!small?1699255563949


Yakit Proxy取代模块MITM

1699255625_6548954988a52d5b4d9b9.png!small?1699255625966

我们先看过滤模块:

1699255638_65489556762ee64adc486.png!small?1699255638902

首先这个界面和Burp比起来,很简洁有没有?

而且就操作而言,Yakit也相对方便很多(不需要你点击那么多次),Burp设置一条过滤要点击8、9次,而Yakit只需要2次。

1699255649_65489561af7d442df604b.png!small?1699255650357

接下来看标记和替换规则

1699255662_6548956e1e9c4fb428ce7.png!small?1699255662606

新增规则

1699255673_654895792ef72cbe5f591.png!small?1699255673470

添加规则后可以在该规则设置对哪些流量生效

1699255743_654895bf6edce36af8c45.png!small?1699255743880

然后发送一个请求参数为wifi的数据包看标记效果

1699255754_654895ca85bf4f17523e8.png!small?1699255755016

我发送的wifi也被替换成了WIFI

1699255766_654895d6d54c8017d0415.png!small?1699255767543

Yakit这些流量替换、标记的功能Burp虽然也有,不过相比起来,个人觉得Yakit的实现方式会更加方便使用。

接下来说一下Burp没有的功能—热加载

在Burp中如果你想自定义处理经过代理的流量,就需要自己开发插件,在懂java的基础上学个一两天差不多就可以开发插件了。

1699255782_654895e636a5f4159765e.png!small?1699255783196

当然插件也可以用Python开发,不过需要下载Jython,麻烦事也挺多的…

而对于Yakit,自定义处理流量就很简单了。

1699255795_654895f32f1e3e9590b4e.png!small?1699255796036

demo里第一个if是如果请求包含/products/plugins/plugin_11就替换内容后发送;

第二个if是如果请求包含/products/plugins/plugin_12直接丢弃;

即便你不懂java、python、go…这几行代码也没有压力吧

如果Yakit自带的规则满足不了你,那就使用热加载,想怎样就怎样!

之前提到过a.com?log=sevse(随机数)也可以使用热加载过滤掉。

1699255806_654895fe7ebf8e9dff630.png!small?1699255806951

BurpSuite-Repeter模块

这个相信大家都已经很熟悉了。

1699255827_65489613c2476792758b4.png!small?1699255828270

Yakit Repeter取代模块Web Fuzzer

效果上和Burp是差不多的

1699255852_6548962cd97dbde8c4dbc.png!small?1699255853413

Burpsuite Decoder模块

说实话这个模块我基本上没有用过,因为它不支持中文解码。

还有一点就是有点麻烦,你需要找Decoder模块,在插件多的情况下,一眼看不到Decoder模块。

1699255884_6548964cb22c21872e3bf.png!small?1699255885581

关于中文解码,插件knife可以解决,

不过knife默认编码好像不是GBK,需要点点点进行切换…我修改了knife的源码优化了这点,需要的可以自取https://github.com/VVeakee/knife

1699255896_654896587eabde0acd44b.png!small?1699255897050

Yakit Decoder取代模块Codec

包含编码以及加解密算法

1699255915_6548966be69246af954b4.png!small?1699255916745

此外,Codec不单单是个模块,在代码中是有这个全局变量的,后面会在热加载中用来生成自定义的payload

1699255927_65489677352005cd13110.png!small?1699255927789

当然,最方便的用法还是右键即可!

1699255986_654896b2d408a02f40191.png!small?1699255987589

BurpSuite Intruder模块

对于Intruder模块最重要的无非两点

1. payload位置

1699256012_654896cc7b180bc98b7d0.png!small?1699256012924

2. payload(字典)

1699256031_654896dfb941570909a96.png!small?1699256032251

在以往的使用经验中,大概率是要你先生成payload然后load

比如你需要6位随机字符,很遗憾,Burp里并没有适合的生成该payload的type

1699256044_654896ecc1d7691424c62.png!small?1699256045275

你可能会用python写一段代码或者crunch生成payload

有时候甚至会想,偌大的Burp就没有一个好用的插件可以自动生成payload吗?

Yakit Intruder取代模块

1699256067_6548970336a17dda65e63.png!small?1699256068173

下面是自带的生成payload的规则

1699256078_6548970ec8ecb60f30735.png!small?1699256079215

如果不存在符合你需要的payload可以直接用代码生成,

如下,生成6位数字爆破手机验证码的payload为{{int(0-100000|6)}}

1699256093_6548971d52d96547f0cdc.png!small?1699256093886

除了代码生成的payload也可以使用定义好的payload

1699256104_654897286fedebfc0f0b2.png!small?1699256104963

把你定义好的payload上传云端,调用就是{{x(字典名)}}

比如我要使用user_top10这个字典

1699257646_65489d2e03cb981742c5d.png!small?1699257646810

如果插入两个位置就是对应Burp里的Cluster bomb模式,请求总数为payload1的个数 乘 payload2的个数。

1699257646_65489d2e1832d291e098c.png!small?1699257646810

如果仍然没有你想要的payload也没关系,咱们可以自己直接造。

这里有两种方式造payload,强烈推荐第一种!

1. 热加载

1699257646_65489d2e14eea761ef967.png!small?1699257646811

示例1: 转小写

1699257659_65489d3bae41b930bb4aa.png!small?1699257660320

示例2: base编码

1699257678_65489d4e5f39ec6fce08f.png!small?1699257678934

保存后直接粘贴payload就可以

1699257690_65489d5a277fef66bddd5.png!small?1699257690786

这个地方的payload可以说是即用即生成,超级方便!

2.常规写脚本

下图是用字符集abc123!@#生成10个6位的随机字符串

1699257703_65489d6758f9e2b6e0b6a.png!small?1699257703968

然后在payload管理里面专门生成一个字典temp放临时字典

1699257715_65489d7388b2434e1cdbb.png!small?1699257716293

BurpSuite turbo intruder 并发插件

一般是用来测试并发

1699257736_65489d88f1871d46ecfbd.png!small?1699257737845

Yakit并发取代模块

Yakit的并发集成在Web Fuzzer中

1699257757_65489d9d6f7bf7a33bcf9.png!small?1699257758077

BurpSuite target模块

1699257773_65489dadbfbba4b7589e1.png!small?1699257774302

Yakit target取代模块网站树

1699257792_65489dc0a61986416a49d.png!small?1699257793149

一点点建议

在网站树状图的地方,大概是我喜欢一眼能看到数据包的布局吧,如下图:

1699257811_65489dd3013ec61f4498a.png!small?1699257811559

总结

综上所述,Yakit作为后起之秀,已经把Burp经常用的功能全实现了,并且用起来更加方便快捷。

而且相比于Burp的插件,Yakit的插件更容易开发,还有一点算是大势所趋吧,Yakit的数据会上传到云端,你的个人习惯、使用的工具都会保存在云端(如果字典也可以上云那可就太妙了),可谓是拿来就用,但是Burp的话,换个设备就是又要从0开始了。

本文作者:VVeaker

# Burp Suite # burpsuite # yakit
本文为 yaklang 独立观点,未经授权禁止转载。
如需授权、对文章有疑问或需删除稿件,请联系 FreeBuf 客服小蜜蜂(微信:freebee1024)
被以下专辑收录,发现更多精彩内容
+ 收入我的专辑
+ 加入我的收藏
Yak Project
yaklang LV.8
做难而正确的事!
  • 153 文章数
  • 106 关注者
独立SyntaxFlow功能?IRify,启动!
2025-03-31
那我问你,MCP是什么?回答我!
2025-03-24
SyntaxFlow实战CVE漏洞?那很好了
2025-03-14
文章目录