优化Knife插件的unicode解码及中文乱码
2023-2-9 09:3:36 Author: NOVASEC(查看原文) 阅读量:89 收藏

记录

△△△点击上方“蓝字”关注我们了解更多精彩
0x00 免责声明

在学习本文技术或工具使用前,请您务必审慎阅读、充分理解各条款内容。

1、本团队分享的任何类型技术、工具文章等文章仅面向合法授权的企业安全建设行为与个人学习行为,严禁任何组织或个人使用本团队技术或工具进行非法活动。

2、在使用本文相关工具及技术进行测试时,您应确保该行为符合当地的法律法规,并且已经取得了足够的授权。如您仅需要测试技术或工具的可行性,建议请自行搭建靶机环境,请勿对非授权目标进行扫描。

3、如您在使用本工具的过程中存在任何非法行为,您需自行承担相应后果,我们将不承担任何法律及连带责任。

4、本团队目前未发起任何对外公开培训项目和其他对外收费项目,严禁任何组织或个人使用本团队名义进行非法盈利。

5、本团队所有分享工具及技术文章,严禁不经过授权的公开分享。

如果发现上述禁止行为,我们将保留追究您法律责任的权利,并由您自身承担由禁止行为造成的任何后果。

0x01 前言

中文编码|Unicode解码一直是BurpSuite使用过程中的常见的两个问题.
以前的解决方案是: 中文乱码就手动修改display中的显示编码,一个个编码尝试很麻烦,也比较看天意. unicode就复制出来到网页在线解码.
数据少的时候还好,数据多的时候也会有一些不耐烦.
这种常见的问题肯定是有大佬解决过的,我记得的就有U2C,Knife.
Knife是bit4woo大佬开发的一个多功能小插件,最开始接触这个插件是为了使用Knife的sqlmap调用和open With browser功能。
bit4woo/knife: 添加一些右键菜单让burp用起来更顺畅https://github.com/bit4woo/knife
这里主要讲述和处理的就是Knife插件,因为Knife集成了bit4woo的U2C插件功能,能够自动解码Unicode到中文。
bit4woo/u2c: Unicode编码转中文的burp插件https://github.com/bit4woo/u2c
最近刚好遇到响应包中文Unicode编码的情况,不想复制出来解码,试用了下Knife发现unicode自动解码以后发现出现乱码。(如果我没有记错的话,以前之所以没有使用U2C是因为 有BUG   我不会用)
提Issue的时候发现也有好几个相关的Issue,有一段时间没有处理了.
Knife 2.1存在unicode解码不稳定问题· Issue #57https://github.com/bit4woo/knife/issues/57
V 2.1 unicode 解码乱码 · Issue #54 · bit4woo/knifehttps://github.com/bit4woo/knife/issues/54
2.1存在unicode识别失败 · Issue #56 · bit4woo/knifehttps://github.com/bit4woo/knife/issues/5
想了想这个问题也是经常遇到,是时候动手解决一波,因此有了这一篇记录.
改BUG的过程比较费时,记录就讲讲乱码的关键原因和解决,文末是Fork并修复的项目地址。
0x02 原因分析
工具 Knife的chinese Tab功能实际上是两个功能,两个功能都存在一些小问题.
功能1:Unicode解码问题分析处理
正则分析内容是否存在Unicode,再根据是否是Json格式来进行处理。
如果Unicode是在Json中,将使用Json格式化功能来自动解码.解码过程中,Json使用burpsuite的默认编码来自动解码成中文。
如果非Json进行其他处理(注:非Json的Unicode情况也会进行处理,但在此未深入测试.)
burpsuite默认编码根据程序启动时的命令行动态变化。
java11 -noverify -Dfile.encoding=UTF-8  -javaagent:BurpSuiteLoader.jar -jar burpsuite_pro.jar

java11 -noverify -javaagent:BurpSuiteLoader.jar -jar burpsuite_pro.jarWindows下不指定编码参数运行使用的是GBK编码.

经过测试发现,指定显示编码底层不会修改应用的默认编码.这种情况下,如果默认编码为[GBK],但是指定显示编码为[UTF-8],则会发生中文乱码。

GBK环境下设置UTF8编码

原始Unicode数据

Unicode自动解码后在UTF8下的显示乱码

GBK环境下设置默认编码

Unicode自动解码后在GBK下的显示正常

正确使用knife插件解码Unicode应该设置burpsuite显示编码为默认编码. 这样Json解码的编码才和UI显示的编码一致.

该问题的深层原因主要是:
json格式化时使用【应用默认编码】进行解码,但显示内容时使用【指定编码】进行转码导致的乱码。
如果能够让使用插件使用【指定编码】进行unicode解码,此时再使用【指定编码的值】进行显示,就不会存在错误了。
修复方式:

如果想要设置burpsuite显示编码为【指定编码】,还想要这个unicode显示正常的话,就需要获取到这个显示编码.

查询API没发现能够获取【指定编码】的值,折中方案,我在knife的增加【Display_Coding】变量来手工指定这个【指定编码】的值来应对这种情况.

手动指定编码为UTF-8

GBK环境下成功使用UTF8显示成功

功能2:编码转换按钮问题分析处理
当自动解码的不成功时,可以手动使用编码解码功能进行内容转换,直到获取到正确的内容.(注:该窗口退出后会还原到自动解码数据) 
V2.1版本这个只能设置转换目标编码,.不能配置转换前的原始编码.如果原始编码判断错误,后续就更难碰到正确的结果了.
修复后支持指定原始编码:

原始编码默认设置范围为:
GBK,GB2312,UTF-8,GB18030,Big5,Big5-HKSCS,UNICODE,ISO-8859-1

目标编码默认设置范围为: 

GBK,GB2312,UTF-8,GB18030,Big5,Big5-HKSCS,UNICODE,ISO-8859-1

可在Knife变量中限制编码范围.

注:变量enable状态为ture时才会生效.
注:会简单的按逗号切割成列表.
新增功能3:根据响应编码自动转换显示内容
部分情况下,响应头表明内容编码格式[如UTF8],但是解码会使用burp默认编码[如GBK]来进行解码,最终导致显示乱码。

这种情况下,如果发现内容检测的编码和系统编码不一样,就应该使用检测到的编码来进行一次转换。 

后续发现乱码情况下,没有成功检测出内容的Json格式,一并进行了Json格式化.

默认gbk响应utf8导致乱码

自动根据响应utf8修复GBK下的显示
0x03 Fork项目修复地址
winezer0/knife:  添加一些右键菜单让burp用起来更顺畅https://github.com/winezer0/knife
修复2.1的unicode自动解码问题修复2.1编码后的json不格式化问题修复2.1的响应包编码和burpsuite显示编码不一致导致的乱码问题
注意:建议设置burpsute显示编码为default.如果自动解码乱码,可点击[Current Encoding]按钮进行编码切换.
修复记录已Pull,但暂未合并,可以先从本项目地址进行下载.
0x04 总结

由于burpsuite中没有找到API来获取用户配置的UI解码类型.导致自动转码显示的功能还有些小瑕疵.但是目前已能够应付大部分情况.

继一个破站日两天以后,一个BUG也改了天,感觉自己真的没有深刻没有天赋吃这口饭.

END

如您有任何投稿、问题、建议、需求、合作、后台留言NOVASEC公众号!

或添加NOVASEC-余生 以便于及时回复。

感谢大哥们的对NOVASEC的支持点赞和关注

加入我们与萌新一起成长吧!

本团队任何技术及文件仅用于学习分享,请勿用于任何违法活动,感谢大家的支持!


文章来源: http://mp.weixin.qq.com/s?__biz=MzUzODU3ODA0MA==&mid=2247488497&idx=1&sn=22a59cc8f516e9d42a6ff131a0029eef&chksm=fad4cee6cda347f0e3b9f8dc4a97f3553e5b4b980e3cacd1e3861ecc11fd0268e29813c9b0f8#rd
如有侵权请联系:admin#unsafe.sh