XPATH注入JS编

极客

哎呦喂!XPATH注入遇上JS编码,这波操作我直接人傻了!

家人们,今天咱们来聊点硬核但又贼有意思的东西——XPATH注入JS编码这俩货凑一块儿,那画面简直比我看女神朋友圈还刺激!说真的,我刚开始接触这玩意儿的时候,脑子里的弹幕就没停过:“这也能黑?”、“还有这种操作?”、“卧槽这也行?”……别笑,等你真正搞懂这俩组合拳,你也会跟我一样发出土拨鼠尖叫!

先说XPATH注入,这货到底是个啥?

咱就是说,很多小伙伴一听到“注入”俩字,脑子里就自动弹出SQL注入,觉得“哎呀我知道,不就是把数据库当橡皮泥捏嘛”,但XPATH注入那可完全不是一回事儿啊!它针对的是XML文档查询,就像你用百度地图搜地点,结果有人故意在搜索框里塞了一堆乱七八糟的条件,直接把地图导航给带偏了,气不气人?

我给你们举个活生生的例子哈,假设有个网站,让你输入用户名密码,然后后台用XPATH去XML文件里匹配用户信息,正常输入“admin”,那就是老实巴交地查呗,但如果我输入 ' or '1'='1 ,我的天,这查询条件就变成了“用户名等于空或者1等于1”,这不等于是对保安说“兄弟,我不是业主,但我带了个万能钥匙,而且我长得帅,让我进去呗”?

那JS编码进来凑什么热闹?这不是添乱嘛!

重点来了!这时候JS编码就该华丽登场了,很多系统安全防护都盯着参数里的特殊字符呢,比如单引号啊、双引号啊、and or 这些,但你要是把这些危险字符用JS的Unicode编码或者十六进制编码给“包浆”一下,比如把变成\u0027,或者把and变成\x61\x6e\x64,那防护系统一看:“哎呦,这不就是个普通字符嘛,放行放行!”结果后台解码一跑,嘿嘿,直接破防!

这感觉就像什么呢?就像你想去酒吧,但门口保安不让你带酒进去,你倒好,把酒瓶子玩成魔术,拧成了塑料袋的形状带进去,到了吧台再“叮”一下变回来,保安大哥还在那儿寻思:“这人手里明明是个购物袋啊!”——就是这么离谱,就是这么不讲武德!

真实案例:我亲眼看着朋友三步拿下管理员

这可不是我编的段子,我有一次跟一个搞安全的朋友做渗透测试,碰到一个网站,表单提交全走JS加密,看起来贼安全,但哥们儿用Burp Suite拦了个包,发现参数里有个userName字段,好家伙,直接拼进XPATH查询了。

他先试了个单引号,页面瞬间报错,那错误信息都把XPATH语句给吐出来了(真是日了狗了,这开发心真大),然后他写了个payload:admin'\u0061\u006e\u0064 '1'='1,也就是用JS编码把and藏起来,提交之后,啊哈!后台直接返回了管理员信息!我当时在旁边看得目瞪口呆,心想这尼玛也太easy了吧!就这?就这?就这防御水平?

所以说啊,现在的安全防护,只过滤明文特殊字符是远远不够的。JS编码、HTML实体编码、URL双重编码这三大“易容术”,黑客们早玩得比溜溜球还溜了,你要是不把这些解码场景摸透,被黑那就是分分钟的事儿。

咱们普通安全狗该咋应对?

说实话,我刚开始也觉得这玩意儿防不胜防,心态都快炸了,但后来总结了几个土方子,分享给大家:

第一,输入验证得往死里卷,不光要过滤明文,还得把解码后的内容再过滤一遍,最好整个白名单机制,不是白名单里的字符一律拒绝。

第二,永远不要用拼接XPATH,要用参数化查询,就跟防SQL注入一个道理,你要是拿用户输入直接拼XPATH,那就跟把家门钥匙挂腰上溜达一样,不招贼才怪!

第三,错误信息一定要屏蔽,千万别把XPATH报错原样返回给用户,我在测试那家网站的时候,要不是它把查询逻辑全报出来了,我都不知道从哪下手。

最后呢,配置安全防护策略的时候,记得把DOM parseXPathDocument这些组件升级到最新版,旧版本漏洞那可真是千疮百孔。

写在最后(忍不住想多说两句)

家人们,学网络安全这路,说白了就是跟人斗智斗勇,你以为你防住了单引号,人家给你来个';你以为你防住了JS编码,人家又来个base64变形金刚,道高一尺魔高一丈,真是永无止境啊!

今天这篇文章,我就是希望大伙儿能对XPATH注入JS编码的组合有个新认识,别老觉得“只要过滤了单引号就天下太平了”,记住没?防护要做全,解码要彻底,细节决定成败!

XPATH注入JS编

如果你也对网络安全这块儿感兴趣,想深入交流XPATH注入的花式玩法,或者PHP、JS、Python这些漏洞利用技巧,咱们可以私下切磋切磋!对了,学习网络安全的话可以加我QQ:33581810,咱们一起探讨攻防那些事儿,互相学习进步!毕竟这年头,一个人研究太容易钻牛角尖了,找几个志同道合的朋友一起折腾才有意思,你说是不?

文章版权声明:除非注明,否则均为咸鱼-即刻攻防原创文章,转载或复制请以超链接形式并注明出处。

目录[+]

取消
微信二维码
微信二维码
支付宝二维码