某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的思路,还请各位师傅指正。


相关文章
|
1月前
|
安全 网络安全 数据安全/隐私保护
XSS 漏洞可能会带来哪些危害?
【10月更文挑战第26天】XSS漏洞可能会给网站和用户带来诸多严重危害
|
1月前
|
存储 监控 安全
|
3月前
|
安全 JavaScript 前端开发
XSS漏洞的危害
XSS漏洞的危害
60 1
|
3月前
|
存储 安全 JavaScript
【XSS】XSS漏洞详细指南
【XSS】XSS漏洞详细指南
141 3
|
1月前
|
存储 JSON 安全
2024全网最全面及最新的网络安全技巧 二 之 CSRF+XSS漏洞的各类利用技巧
2024全网最全面及最新的网络安全技巧 二 之 CSRF+XSS漏洞的各类利用技巧
|
2月前
|
Web App开发 安全 关系型数据库
xss漏洞原理(五)BeEF
xss漏洞原理(五)BeEF
|
2月前
|
安全
xss漏洞原理(五)BeEF
xss漏洞原理(五)BeEF
|
2月前
|
开发框架 安全 JavaScript
xss漏洞原理(四)自动化XSS
xss漏洞原理(四)自动化XSS
|
7月前
|
存储 JavaScript
Medium 级别存储型 XSS 演示(附链接)
Medium 级别存储型 XSS 演示(附链接)
|
3月前
|
JSON 安全 JavaScript
Web安全-JQuery框架XSS漏洞浅析
Web安全-JQuery框架XSS漏洞浅析
541 2
下一篇
DataWorks