JS编码XPATH注

极客

本文目录导读:

  1. 先说个糟心事儿
  2. JS编码到底是怎么卡住我的?
  3. 我的破局三板斧
  4. 现在的安全工具有多离谱?
  5. 给新手的两个肺腑之言
  6. 最后的掏心窝子话

JS编码XPath注入实战:我的安全工具链踩坑实录

哎,说到XPath注入,我这个老菜鸟可真是有一肚子话要倒!最近为了挖一个站点的漏洞,愣是在JS编码和XPath注入的组合拳里摸爬滚打了三天三夜,今天必须得和各位老铁好好唠唠这个技术活儿!

先说个糟心事儿

上周接了个渗透测试的活儿,目标站点的搜索框一看就是典型的XPath查询结构,我寻思着这不是送分题吗?直接上经典注入语句' or '1'='1,结果尼玛返回的全是JS编码后的特殊字符,直接给我整不会了!

这时候我才恍然大悟——现在还能在互联网上活着的系统,哪个不是武装到牙齿?JS编码这层铠甲,就是我要过的第一道鬼门关。

JS编码到底是怎么卡住我的?

各位看官,您要是遇到和我一样的情况,不妨先深呼吸,JS编码最坑的地方在于,它会把关键字符全部转义成\x或者\u开头的东西,比如直接变成\x27,这就好比你把撬锁工具藏进鞋里,结果门锁换成指纹识别的了!

当时我尝试了直接提交\x27 or 1=1,结果服务器直接返回400,气得我差点把键盘嚼了!后来才明白,XPath注入的关键在于闭合查询逻辑,光把引号编码可远远不够。

我的破局三板斧

第一板斧:双重编码绕坑

既然前端做了一层JS解码,那咱就玩个双重编码!把注入语句先ASCII编码,再URL编码,最后再套一层JS的String.fromCharCode(),这招儿还真管用,成功绕过了第一道过滤,不过劝各位别高兴太早,因为——

第二板斧:XPath函数才是亲爹

正当我窃喜的时候,发现系统居然启用了XML解析的递归过滤!这要是硬刚非得碰个头破血流,这时候我突然想起XPath里的string()concat()这些函数,赶紧把注入语句改造成concat('or','1=1')的形式,哎哟喂,这招还真把WAF给骗过去了!

第三板斧:异常信息反向利用

最绝的来了!我故意构造一个语法错误的XPath,结果系统把调试信息直接吐在响应包里!虽然代码是JS编码的,但用unescape()函数一解,好家伙,整个XML文档结构全暴露了!这不就相当于把保险柜密码写在了便签上嘛!

现在的安全工具有多离谱?

有一说一,咱们也得承认,现在的扫描器是真聪明,什么sqlmapxpath_scan这些工具,都内置了JS解码模块,但劝各位一句,工具给的只是补刀的机会,真正的钓鱼还是要靠手工判断,比如通过检测响应中特定字符串的变化来验证注入点,这活儿的精细程度,比用AI写代码可考验人多了!

给新手的两个肺腑之言

第一,千万别小看前端JS对XPath的影响,现在很多开发为了防爬虫,故意在AJAX请求里加编码环节,你要是直接拿原始payload硬上,肯定碰一鼻子灰!第二,多琢磨怎么利用XPath的注释符(<!--)和节点关系来盲注,这比笛卡尔积拼接要省事得多。

再说说工具链配合

我现在的策略是Burp Suite抓包 → 手工改JS编码 → 配上自写的解码脚本 → 再用XPath盲注脚本调教,各位要是嫌麻烦,我这里有个小技巧:直接用浏览器Console执行encodeURIComponent(),然后再手动替换成\x格式,速度能快个三成!

最后的掏心窝子话

搞安全这么多年,最大的感悟就是:技术这玩意儿,永远是道高一尺魔高一丈,JS编码+XPath注入算是老生常谈了,但每次实战都能遇到新花样,昨晚我又遇到个用Base64嵌套JS编码的,到时候研究明白了再跟各位分享!

哎哟喂,说着说着都这个点儿了!最后劝大家一句,搞网络安全千万不能纸上谈兵,一定要在合法授权的前提下多实践,要是各位在实战中遇到什么奇葩编码案例,欢迎随时来唠!

JS编码XPATH注

学习网络安全可以加QQ:2845846651,咱们一起探讨JS编码、XPath注入这些有意思的技术活儿!不过加之前记得备注“安全交流”,不然我容易看成推销的给拒了哈!

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

目录[+]

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