这个文章好
https://blog.csdn.net/huangyongkang666/article/details/123624164?fromshare=blogdetail&sharetype=blogdetail&sharerId=123624164&sharerefer=PC&sharesource=2401_88818565&sharefrom=from_link
XSS(跨站脚本攻击,Cross-Site Scripting)是一种常见的网络安全漏洞,攻击者在网页中嵌入客户端脚本,通常是js编写的危险代码,当用户使用浏览器浏览网页时,脚本就会在用户的浏览器上执行,从而达到攻击者的目的。XSS 通常用于窃取用户信息、会话劫持、篡改网页内容或传播恶意软件。
如:盗取网站保存的cookie登陆其他用户,摄像头拍照
发送的网址不要点,用虚拟机点
网站:正常网站(有xss漏洞)
xss平台:js文件下载
客户端浏览器
js执行
js可以操作cookie
跨站脚本攻击:执行了其他网址上的恶意js文件
如何区别是不是同一个网站:
https
http
浏览器根据同源策略判断这两个是不是同一个网站
同源策略:
协议 + 主机(域名/IP) + 端口,任何一个地方不一样就不是同一个网站
浏览器是根据同源策略来单独存储每一个网站的cookie
前端传入的数据没有做处理,变成了html的一部分来处理
处理指的是编码处理。
将<
变成了<
在html语言里很注重<>
如何让语句里出现尖括号,用html实体符号
显示结果 | 描述 | 实体名称 | 实体编号 |
---|---|---|---|
空格 | |
|
|
< | 小于号 | < |
< |
> | 大于号 | > |
> |
挖漏洞,点到为止用alter()
中危漏洞
把http请求发送后又回到客户端前端代码中。
必须要点击url,http
别乱点什么别人发的网址
出现位置:搜索框
留言,到数据库
先有一个人,把数据存进数据库,又有人访问时,将数据库里的数据返回到客户端浏览器。
高危漏洞。
进入网站就触发
js代码弹窗
alert
href
prompt(1)
能看懂前端js代码,不需要给服务器发http请求
xss执行方法:
xss防御的总体思路是:对输入进行过滤,单引号,双引号,尖括号之类,对输入进行编码
过滤:根据业务需求进行过滤,比如输入点要求输入手机号,则只允许输入手机号格式的数字
转义:所有输出到前端的数据都是根据输出点进行转义,比如输入到html中进行html实体转义,输入到js里面的进行js转义
xss之href输出绕过:javascript:alert(111),直接带入a标签href里面一样可以绕过htmlspecialchars,如果没有用户提交的数据交给a标签,其实很难绕过
url?name=
再试一下1没成功
看到网页源码,发现特殊符号没有转义
">
先试一下
看看源代码,这里是单引号闭合,并且符号被实体化
htmlspecialchars()函数将一些预定义的字符转换为html实体
没对’设置,可以用onfocus或者onclick
js’ οnclick=‘alert(111)’
'将value闭合
但是我再搜索框中不行,闭合不了,但再开发者工具里编辑html元素可以
这里和3一样,不过将’改为"就行
我咋感觉f12中,找到需要更改的位置编辑为html元素就行
正常先试试3的payload发现不行,所有带on的语句在on中间会加入_,那这里用a href标签
" > <"
这一关href也不行了
过滤了好多,看看大小写能不能绕过
发现大小写没有被过滤掉,这题能利用大小写进行绕过,所以我们可以用下面的方法,构造payload
用上面的改成部分大写
“> <”
先上关键字试试看
由源码
这里面进行了小写转化,将检测出来的on,script,href给删掉了,但是没有关系,我们可以利用双拼写来绕过。
我是l" oonnclick=‘alert(123)’
输入的值在两个,input标签,href属性
看看过滤了啥关键字
input标签添加了html实体转化函数还把双引号也给实体化了, 添加了小写转化函数,还有过滤掉了src、data、onfocus、href、script、"
利用href的隐藏属性自动Unicode解码,将之前的payload编码
javascript:alert(123)
这一关有检查,需要向传入的值里面添加http://并用注释符注释掉否则会执行不了无法弹窗
javascript:alert()/* http:// */
没搜索框
看到源代码,有隐藏传参,并过滤掉了<>号,不能闭合插入标签,但是我们还能用on
click事件,因为这里输入框被隐藏了,需要添加type=“text”
?t_sort="οnclick=‘alert(11)’ type="text
试试和上一关一样的
发现被转义
?t_sort="οnclick=‘alert(11)’ type="text
其他的传参也试试了发现不行
难搞查了一下,t_ref的标签是http头referer的参数(就是由啥地址转跳到这里的,http头的referer会记录有)
那进行抓包传参
把大于小于号><给删掉了
抓包之后构造请求
Referer:js" οnclick=‘alert(111)’ type="text
和11一样看到网页源代码可以看到,t_ua
在User-Agent中清除加入:js" οnclick=‘alert(111)’ type="text
t_cook,想到cookie
f12
cookie名为user,我们直接在这里改一下就好