XSS代码审计

审计步骤

确定用户的输入
用户输入的处理
确定用户的输出
用户输出的处理

yxcms存储型XSS漏洞

确定用户的输入和用户输入的处理

确定输入的页面

查看表单源码,确定表单处理页面和传输的字段键值

找到对应的index方法

这里可以利用phpstorm设置断点,判断变量的值


开始步入extend函数

经过分析,需要post数据才能步入这个语句块

为此我们提交表单再步入

步入到这一步时:

这里判断提交的表单是否是数组,是则走上面语句块,不是则走下面语句块
而xss漏洞是上面这个语句块,所以我们要构造数组变量,由于BP不能抓127.0.0.1的包,所以将xdebug的代理和BP的代理都改为本机的ip即可

继续跟进deletehtml函数


这里吧对应的实体字符编码转化为符号

继续跟进in函数


这里进行htmlspecialchars()实体编码和addslashes()加上转义

如果在这里输入的是字符型就要经过html_in()和RemoveXSS()和htmlspecialchars()和addslashes()

最后存入数据库

确定用户的输出和用户的输出处理

找到用户的输出页面

按住F12看看表单


发现这是跟删除有关的按钮,通过前缀我们可以发现页面展示确定在extendfield前缀的页面,由猜想只,fieldlist与其字段有关,meslist与其字段值有关

确定输出



这里可以看看html_out()函数

这里读取了数据库的信息并分配到了前端页面

看看html_out的代码(不知道怎么设置断点跟进,这是我第一次学习phpstorm和代码审计,所以只好去核心函数库找)

这里就用sexy全局搜索了一下

这里把html实体编码解码了和去除了反斜线

总的来说

经过了deletehtml()和in()和html_out函数的处理

所以构造的payload(部分)

tname[]=test<script%26gt;alert(1)</script%26gt;

测试一下



猜你喜欢

转载自www.cnblogs.com/lyxsalyd/p/12514777.html