审计步骤
确定用户的输入
用户输入的处理
确定用户的输出
用户输出的处理
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;
测试一下