赞
踩
跨站脚本攻击XSS(Cross Site Scripting),为了不和层叠样式表(Cascading Style Sheets, CSS)的缩写混淆,故将跨站脚本攻击缩写为XSS。恶意攻击者往Web页面里插入恶意Script代码,当用户浏览该页面时,嵌入Web里面的Script代码会被执行,从而达到恶意攻击用户的目的。XSS攻击针对的是用户层面的攻击!
数据交互与输出的地方
漏洞产生的两个条件:
1.用户可以控制的输入点。
2.输入能返回到前端的页面上被浏览器当成脚本语言解析执行。
整体来说危害有:获取用户cookie、键盘记录、xss gets hell、刷流量,执行弹窗广告、传播蠕虫病毒。
细说危害:
1、盗取各类用户帐号,如机器登录帐号、用户网银帐号、各类管理员帐号
2、控制企业数据,包括读取、篡改、添加、删除企业敏感数据的能力
3、盗窃企业重要的具有商业价值的资料
4、非法转账
5、强制发送电子邮件(钓鱼)
6、网站挂马:会自动下载
7、控制受害者机器(肉鸡)向其它网站发起攻击
COOKIE:指某些网站为了辨别用户身份、进行 session 跟踪而储存在用户本地终端上的数据(通常经过加密)
客户端将用户名密码等信息给服务器,服务器返回用户身份对应的cookie给客户端,
之后两人的身份认定,就靠cookie来进行。
1.反射性xss:它是非持久型,参数型的跨站脚本。
2.存储型xss:它是将脚本代码写进数据库可以永久保存数据,危害最大。
3.DOM型xss:与反射性相似,但是DOM是树形结构,利用DOM标签。
代码
由上图代码中我们发现它并没有对我们进行限制,同时我们将输入值在h2标签中。
所有直接使用<script>alert(1)</script>
语句即可。
上图代码可以发现text后面接keword=“内容”
在url地址上输入?keword="<script>alert(1)</script>
代码
方法一:使用<script>alert(1) </script>
代码中我们发现输入的内容在value属性的双引号里面了,为此我们需要闭合引号再把标签也补全了。进行弹窗。
在输入框中输入
1" /> <script>alert(1) </script>
方法二
使用οnclick=“alert(1)” 弹窗
该方法同方法一,不同只处在于onclick为属性,可以不补全input标签直接内部输入就可以。
输入1" onclick="alert(1)
代码
在代码中我们输入内容在value中,但是这使用了PHP的htmlspecialchars() 函数。
htmlspecialchars() 函数把预定义的字符转换为 HTML 实体。
htmlspecialchars(string,flags,character-set,double_encode)
预定义的字符是:& (和号)成为 &
" (双引号)成为 "
’ (单引号)成为 ’
< (小于)成为 <
>
(大于)成为 >
提示:如需把特殊的 HTML 实体转换回字符,请使用 htmlspecialchars_decode() 函数。
由官方文档得知我们发现value='".htmlspecialchars($str)."'
它是单引号包住双引号。
而由于没有添加第二个参数那么函数默认:仅编码双引号
单引号并没有生效编码,只有添加了第二个参数引号类型单引号才进行编码了。
在这即闭合了单引号,才会使用内部的双引号。即‘“内容”’,当我们输入内容为:内容’ 就如同 ‘“内容” ’ ,最后一个的 ’则是我们输入的’
例如:
即当我们输入1" aaa
时,没有跳出单引号无法执行第二个参数。
’ " 1"aaa " ’
为此先将单引号闭合使其第一个参数生效在,输入第二个。输入aaa'aaa
’ " aaa ’ aaa " ’ 这第二个aaa因为没有闭合’所以"没有生效
上图可见已经跳出了,第一个参数已经执行了。aaa第二个参数也能继续了
如此输入1' onclick='alert(1)
’ " 1’ οnclick= 'alert(1) " ’
另想更细致一点可以
1" ’ οnclick='alert(1)
但是这两个不行
1 ’ οnclick=’ "alert(1)
1" ’ οnclick=’ "alert(1)
代码
条件上来看它把< 与 > 都过滤为了空,因此我们无法使用标签。但是可以直接使用属性。即οnclick=“alert(1)”
首先闭合引号,再使用onclick
点击对话框
代码
上图显示它将<script替换为<scr_ipt 同时on替换为o_n。
通过分析我们无法使用on开头的属性,即事假被禁止使用了。
对应<script出现就过滤,为此我们可以考虑JavaScript。
输入1" > <a href="javascript:alert(1)">1</a>
点击1
代码
上述显示<script;on;src;data;href被过滤添加了_,即script ,on开头的事件,a标间的href和过滤数组。
在这串代码用的html,但是
alert=function()使它输入为js的标准
对于JavaScript,js区分大小写。为此我们可以考虑大小写来绕过规则
对话框输入:1" ONCLICK="alert(1)"
点击对话框
PHP代码
该过滤规则对象与第六关一样,
不同的是替代结果是空。其中strtolower()函数使输入内容转了小写为此我们不可以考虑同第六关的大小写解决问题。
另外我们也发现因为是替代为空,我们可以考虑重写来解决问题。
对话框输入:1" oonnclick="alert(1)
点击对话框
代码
过滤对象同上,值得注意的是它依旧转小写了,对象替代为非空。如此无法重写。
查看传递的值最后是给了href,我们就可以考虑JavaScript:alert(1)。但是会被转小写并且script会被过滤。另外发现href是输入在url中Unicode支持实体编码。所有我们将其转码。
JavaScript:alert(1)
添加到对话框并且添加成功后点击友情链接
代码
上图可见,输入内容必须包含http://才能识别链接。为此我们才有上题方法,但是添加了http://但是 不能加在头部因。因为浏览器真的认为他是个网站,我们目的是弹窗为此使用JavaScript:alert(1),而后可以注释掉http://
对话框输入:
JavaScript:alert(1)//http://
点击友情链接
代码
由代码可以看出过滤了<与>,禁止了标签。另外输入内容在value的双引号中,要闭口引号。标签要弹窗不用标签,也就属性onclick可以。为此还要修改数据类型。
url网址输入:?keyword=aa&t_link=1&t_history=1&t_sort=1" type="text" onclick="alert(1)
点击对话框
代码
代码中有$_SERVER[‘HTTP_REFERER’]的referer的http返回要求。为此使用HackBar。其他内容一样。
首先导入页面的url:load url
点击referer并在referer框中输入:t_ref=a" type="text" onclick="alert(1)
点击execute
查看网页代码【ctrl+u快捷键或者右击鼠标点击查看页面源代码】
如此表示内容提交成功。
点击对话框
代码
内容同上一题,只是发生一点改变。$_SERVER[‘HTTP_USER_AGENT’];
同样导入url标签选手use agent
同样在use agent里输入:t_ref=a" type="text" onclick="alert(1)
完成后点击对话框
代码
内容同上一题,只改为use agent改为$_COOKIE[“user”];取回名为user的 cookie 的值
导入网址的url,并且cookie输入t_cook=a" type="text" onclick="alert(1)
输入提交后发现没有文本框出现,于是查看源码
值也没有传入。于是发现cookie括号的user,并且这个user是有规范的。它设置user的输入格式为:call me开始
于是将规范加入,于是输入:user=call me &t_cook=a" type="text" onclick="alert(1)
页面弹出了文本框
同时后台的值也传入了
点击文本框
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。