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

简单测试

1.1、环境搭建

测试环境:

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

0f63a515bed7bcfe768fb669ed558ce9.png

1.2、测试XSS

后台可以新增内容,先试试增加⼀篇⽂章,这⾥框写的是

3d6b8e2dbec8a488b90b2eab130a7fd2.png

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

12d9046963c6266a693781b76893d640.png

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

af552ae9639aa0bb5fbaf1a70378fba8.png

源码分析

2.1、如何保存到数据库

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

660af14e43b77902081cd832d7e1c186.png

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

87bcb1630d925b9f6d965bfc8c7f2eb9.png

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

9bd9f9292a542f7fea74ea61a27d4c75.png

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

a7a121e61551c8dca98307eb5212e289.png

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

61a36df99988b7f2d4f7775e759ebde5.png

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

dcc98d0fcd9cd3fd7045c16b7c815d44.png

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

5b90529a37edd2de4ecac703f2fa7aeb.png

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

9e1d2764e25103377977a79b50bad61e.png

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

7f9ebd4e8e4de32b473d6f70b4707f07.png

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

8b313f0b0c6b1dee99b903e4f351c796.png

2.2、如何调⽤数据

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

18d9499ffde38878cffc0ba62f02d2f8.png

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

94c96978d9a9b1fdffd5710b4c689177.png

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

d3a8ac47be6d21f8716d6943969da691.png

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

总结

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

end

a271d9d1374c5aa5363fd44b9cfa974b.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值