某xxphp网站后台存储型XSS漏洞分析

简介: 某xxphp网站后台存储型XSS漏洞分析

简单测试


1.1、环境搭建


测试环境:


在官⽹下载好源码包,解压后访问upload⽬录,根据提示安装好测试环境,即可进⼊后台⻚⾯


e4104f6ee5f71d37fde41e0c3f5cd4cf_640_wx_fmt=jpeg&wxfrom=5&wx_lazy=1&wx_co=1.jpg


1.2、测试XSS


后台可以新增内容,先试试增加⼀篇⽂章,这⾥框写的是<script>alert(1)</script>


3cf746a0a51b4799cf8907517010b817_640_wx_fmt=jpeg&wxfrom=5&wx_lazy=1&wx_co=1.jpg


然后发现⻚⾯⾃动跳转到了⽂章列表⻚,并弹出1


630123dc4b32fe9b4c85fc548d6b781d_640_wx_fmt=jpeg&wxfrom=5&wx_lazy=1&wx_co=1.jpg


打开前台⻚⾯,发现也有弹框1,是⼀个存储型的XSS漏洞


5bb951420dfc0d0bc11ca1a7dc6d0700_640_wx_fmt=jpeg&wxfrom=5&wx_lazy=1&wx_co=1.jpg


源码分析


2.1、如何保存到数据库


使⽤Seay代码审计系统对⽹站源码进⾏⾃动审计,通过软件提供的Mysql监控功能,发现新建 这篇⽂章时,执⾏的SQL语句,除了⽂章描述部分的<>被转化成了实体字符,其他如title处的<script>alert(1)</script>都被完整插⼊数据库中


6a550a70f55307284ccd3f3d9ec932bc_640_wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1.png


查看admin/article.php源码进⾏分析,看起来似乎代码并没有对$_POST传递的值进⾏过滤


e5fd053611be1f02119ae6adacc0b9f0_640_wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1.png


实际上,admin/article.php在最开始引⼊了/inculde/init .php⽂件


3e19a7ba5fbf23e38236029deab0c615_640_wx_fmt=jpeg&wxfrom=5&wx_lazy=1&wx_co=1.jpg


⽽在admin/inculde/init .php⽂件中,实例化了Check()与Firewall这两个类,调⽤了dou_firewall()⽅法


6d5a4d62e69a37691cdf354c18bbe841_640_wx_fmt=jpeg&wxfrom=5&wx_lazy=1&wx_co=1.jpg


这两个类是通过include/check.class.php 与 include/firewall.class.php这两个⽂件来引⼊,数据的过滤⽅法就在这⾥。


0587c96c3fd22f7d1f005a33e8221e56_640_wx_fmt=jpeg&wxfrom=5&wx_lazy=1&wx_co=1.jpg


其中,include/check.class.php⽂件的is_number⽅法,使⽤正则对参数进⾏了过滤,确保传递的 参数是数字


905d8fe202f58d1f22fd0039cbc16540_640_wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1.png


在admin/article.php中调⽤了该⽅法,确保cat _id参数是数字


5fec8cad350276ca69308b72ba8d4a48_640_wx_fmt=jpeg&wxfrom=5&wx_lazy=1&wx_co=1.jpg


include/firewall.class.php这个⽂件中,dou_firewall() 调⽤了dou_magic_quot es()⽅法


a4d90cbd38171ef173f8a5a5f6f57f06_640_wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1.png


dou_magic_quotes()⽅法的作⽤,是在magic_quotes_gpc没有开启时,调⽤addslashes_deep()⽅法


10cb15b5c753b42100f16fed2649805f_640_wx_fmt=jpeg&wxfrom=5&wx_lazy=1&wx_co=1.jpg


addslashes_deep()⽅法的作⽤,是通过递归的⽅式,利⽤addslashes()函数对' " \等特殊字符进⾏转义,问题应该就是出在这⾥,函数并未对<>/()这些特殊字符进⾏转义,导致

<script>alert(1)</script>被完整保存到数据库中


324a78f5cd7587090887e40e7271ca02_640_wx_fmt=jpeg&wxfrom=5&wx_lazy=1&wx_co=1.jpg


2.2、如何调⽤数据


点击⽂章列表时会弹窗,回头再看admin/article.php中的⽂章列表模块源码,将$row['title'] 赋值给"title",未过滤


a68361709519cf2e388ea6a31a3deb02_640_wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1.png


通过实例化的对象$smarty来调⽤调⽤assign⽅法,未过滤


e214b00ed77fc671cd9be9ad56217328_640_wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1.png


最后在admin/templat es/article.htm中直接取得$article.title的值,未过滤


31d4ea093723606c0150f20cde204db7_640_wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1.png


最终导致了存储型XSS的产⽣


总结


只是整理了下XSS的思路,还请各位师傅指正。


相关文章
|
3月前
|
存储 安全 JavaScript
26、XSS漏洞介绍
26、XSS漏洞介绍
19 0
|
3月前
|
存储 安全 JavaScript
小课堂 -- XSS漏洞介绍
小课堂 -- XSS漏洞介绍
19 0
|
4月前
|
存储 开发框架 安全
如何处理预防XSS漏洞攻击问题
防止XSS攻击需要从多个方面入手,包括输入验证和过滤、输出编码、设置正确的HTTP头部、使用最新的安全框架和库、定期进行安全审计和漏洞扫描以及培训和意识提升等。只有综合运用这些措施,才能有效地防止XSS攻击,保护网站和用户的安全。
|
10月前
|
安全 前端开发 JavaScript
信息服务上线渗透检测网络安全检查报告和解决方案2(安装文件信息泄漏、管理路径泄漏、XSS漏洞、弱口令、逻辑漏洞、终极上传漏洞升级)
信息服务上线渗透检测网络安全检查报告和解决方案2(安装文件信息泄漏、管理路径泄漏、XSS漏洞、弱口令、逻辑漏洞、终极上传漏洞升级)
135 0
|
2天前
|
存储 JavaScript
Medium 级别存储型 XSS 演示(附链接)
Medium 级别存储型 XSS 演示(附链接)
|
2天前
|
存储 JavaScript 前端开发
High 级别存储型 XSS 演示(附链接)
High 级别存储型 XSS 演示(附链接)
|
2天前
|
存储 前端开发 JavaScript
Low 级别存储型 XSS 演示(附链接)
Low 级别存储型 XSS 演示(附链接)
|
2月前
|
存储 前端开发 JavaScript
存储型 XSS 攻击演示(附链接)
存储型 XSS 攻击演示(附链接)
|
3月前
|
存储 安全
第二轮学习笔记:XSS跨站脚本漏洞
第二轮学习笔记:XSS跨站脚本漏洞
24 0
|
3月前
|
安全 开发工具 git
xss漏洞工具 -- xsser
xss漏洞工具 -- xsser
58 0