XSS概念:
由于web应用程序对用户的输入过滤不严,通过html注入篡改网页,插入恶意脚本,从而在用户浏览网页时,控制用户浏览器的一种攻击。
XSS类型:
反射型XSS:
只是简单地把用户输入的数据反射给浏览器,简单来说,黑客往往需要去诱使用户点击一个恶意链接,才能攻击成功。
存储型XSS:
将用户输入的数据存储在服务器端,每次用户访问都会被执行js脚本。
DOM型XSS:
文本对象模式xss,通过修改页面的DOM节点形成的XSS,可存储型,可反射型,只取决于输出地点。
XSS的应用场景:
1.利用xss获得cookie.
2.重定向.
3.钓鱼网站.
4.DDOS
反射型:
简单版:
1.查看源代码:
可以看出没有任何过滤,直接将用户提交的GET参数name输出到页面,我们可以输入payload。
先利用alert测试是否存在XSS,如果有弹窗弹出,说明有XSS漏洞:
http://127.0.0.1/DVWA-master/vulnerabilities/xss_r/?name=<script>alert(1)</script>
中等版:
1.查看源代码:
2.双写绕过:
http://127.0.0.1/DVWA-master/vulnerabilities/xss_r/?name=<sc<script>ript>alert(1)</script>
3.大小写混合绕过
http://127.0.0.1/DVWA-master/vulnerabilities/xss_r/?name=<ScriPT>alert(1)</script>
高等版:
1.查看源代码:
虽然无法使用s标签注入XSS代码,但是可以通过img、body等标签的事件或者iframe等标签的src注入恶意的js代码。
Img标签:
http://127.0.0.1/DVWA-master/vulnerabilities/xss_r/?name=<img src=1 one rror=alert(1)>
不可能:
Impossible级别的代码使用htmlspecialchars函数把预定义的字符&、”、 ’、<、>转换为 HTML 实体,防止浏览器将其作为HTML元素。
存储型:
简化版:
存储型xss与反射型xss的区别在于存储型会将用户输入的数据存入服务器,在用户下一次点击时便会触发,由于其隐蔽性较高,所以危害也普遍大于反射型xss。
1.查看源代码:
相关函数介绍:
trim(string,charlist)
函数移除字符串两侧的空白字符或其他预定义字符,预定义字符包括、\t、\n、\x0B、\r以及空格,可选参数charlist支持添加额外需要删除的字符。
mysql_real_escape_string(string,connection)
函数会对字符串中的特殊符号(\x00,\n,\r,\,‘,“,\x1a)进行转义。
stripslashes(string)
函数删除字符串中的反斜杠。
没有进行xss方面的过滤直接储存在数据库中
在Message一栏中输入 <script>alert(1)</script> Name随意
在name一栏中输入,message随意
发现:
name设置了最大字符数,因此用burp抓包,修改数据。
注意:
我们得把数据都清空,点击Clear Guestbook 。这是一个存储型XSS,不清空的话我们无法判断执行的是原来是数据还是新的语句。
在Name和Message里面都输入任意内容,这时在Message里面我们也不能输入<script>标签,然后设置代理,开始抓包。
方便查看,发送至reapter
此时,说明文本框也有漏洞;
中等版:
1.查看源代码:
strip_tags() 函数:
剥去字符串中的HTML、XML以及PHP的标签,但允许使用<b>标签。
addslashes() 函数:
返回在预定义字符(单引号、双引号、反斜杠、NULL)之前添加反斜杠的字符串。
massage使用了htmlspecialchr函数编码无法注入xss代码,但name框可以;
仍是利用bq抓包,进行双写绕过
高等版:
1.查看源代码:
name只是简单过滤掉了s标签可以用其他标签(img)尝试,继续抓包;
img标签:
<img src=1 one rror=alert(1)>
Dom型:
简单型:
1.查看源代码:
2.利用bp直接修改
中等版:
1.查看源代码
过滤掉了s标签
字符#绕过
该字符后的数据不会发送到服务器端,从而绕过服务端过滤
高等版:
1.查看源代码:
限制了输入内容