Cross-Site Scripting 简称为“CSS”,为避免与前端叠成样式表的缩写"CSS"冲突,故又称XSS。一般XSS可以分为如下几种常见类型:
XSS是一种发生在前端浏览器端的漏洞,所以其危害的对象也是前端用户。
形成XSS漏洞的主要原因是程序对输入和输出没有做合适的处理,导致“精心构造”的字符输出在前端时被浏览器当作有效代码解析执行从而产生危害。
在XSS漏洞的防范上,一般会采用“对输入进行过滤”和“输出进行转义”的方式进行处理:
靶场安装机器:Windows10(192.168.1.107)
渗透机器:Windows10(192.168.1.108)
遇到输入框,作为渗透测试人员,第一反应就是输入特殊字符看看,我这里就先输入一个双引号"
瞧瞧。
能输出,看来特殊字符做了过滤
发现无法完全输入,查看页面源码,这输入框做了长度限制
把长度限制改成100,再次输入js语句看看
登录它吧,pikachu靶场的默认账号密码是:admin/123456,如果你想用渗透手法获取账号密码,也可是使用上一个挑战 —— 暴力破解的手法来获取,这里节省时间,就直接登录了。
输入:
好了,弹出了cookie信息,说明这里的确存在XSS漏洞,第二关通关
。
使用另一个浏览器登录靶场,点开对应页面
我都还没有进入页面就先弹出我的cookie了,这说明这句payload已经存进了数据库。设想一下,一个正常网站,每次进去都会弹出十几次的弹框,这回让人非常不方便。
打开数据库查看,这一句payload的确已经存进来了。
第三关通关
。
发现被包裹在a标签里面了,难怪不起作用,这稍微构造以下payload吧
这里有个onclick事件,点开它看看
好了,看到我们输入的内容到这里来了,这直接按照第四关得步骤来吧
payload:#' onclick="alert(document.cookie)">
第五关通关。
随便输入点payload吧
提交后什么都没有发生,查看一下页面源码
同样什么都没有。发现我输入得东西被post表单提交了,想不到,只能看个提示了。
原来这里要登录后台查看
神奇得事情发生了,一登陆,我刚才输入的2个payload都弹出了。
好家伙,原来这就叫盲打,第六关通关。
好的,没反应,再来看看页面源码
也没看出啥,但是能发现是使用get表单的方式提交,来,抬头看看url
就在这里了。
结合URL和返回结果,只输出了一个 “>”字符,其他的内容被过滤了,但我们完全不清楚它的过滤规则是什么,没办法,就尝试一下把URL中的payload中的部分字母变成大写吧。
把URL中的payload部分字母变成大写
显示出来了!这不立即改写一下payload
改写后的payload:'
换个标签试一试吧,就尝试一下用a标签
输入的payload:
好了,点击后面变色的内容能够直接弹出了,看来过滤规则是针对script标签的,第七关通关。
查看页面源码
看到这情况,尝试改造payload,把a标签给闭合掉
输入的payload:#' onclick='alert(document.cookie)'>
点击查看
好了,成功弹出,第八关通关。
发现这里<
和>
被编码了,这样子哪怕是把a标签给闭合也不可能实现,那就只好使用函数了,因为JavaScript里面的a标签中的href属性是可以直接使用函数的。
输入payload:javascript:alert(document.cookie)
点击
好了成功输出。第九关通关。
查看页面源码
发现我输入的payload到了script标签上来了,顺便还把script标签给闭合了,所以才会出现这一串乱七八糟的东西。
接下来就简单了,直接重新构造payload
新的payload:';alert("cookie值是:"+document.cookie); //
这里cookie值是空获取不到,但弹窗了,第十关通关。