XSS
反射型XSS(get)
来看一下pikachu平台上的反射型XSS漏洞.
1.根据测试流程先输入一组字符。返回提示并不知道。
2.来查看一下网络的源代码Ctrl+U。按住Ctrl+F找到刚才输入的字符。
3.尝试在输入框中输入一段script的代码,首先我们使用火狐浏览器的插件将输入框中可输入的字符串长度改长。然后在其中输入一个script的代码添加一个警告框alert。
<script>alert("xss")</script>
反射型XSS(post)
1.在目标站点上找到输入点,比如查询接口,留言板等。
2.输入一组“特殊字符+唯一识别字符”,点击提交后,查看返回的源码,是否有做对应的处理。
3.通过搜索定位到唯一字符,结合唯一字符前后语法确认是否可以构造执行js的条件(构造闭合)。
可见我们输入的字符串直接嵌入到了p标签中,已知我们是可以在p标签里写js代码的,所以我们可以尝试写入一段特制的js代码。
4.提交构造的脚本代码(以及各种绕过姿势),看是否可以成功执行,如果成功执行则说明存在XSS漏洞。
<script>alert("xss")</script>
存储型XSS
1.打开pikachu平台我们可以看到有一个留言板页面,我们试着留一个言看一下,发现会被存储起来。根据测试流程首先实验一些特殊符号的输入,比如单引号双引号尖括号等。发现可以正常输出,说明后台并没有进行相关的过滤。
2. 注入一个的标签写一个警告框进去。点击提交之后出现相应的警告框。与反射型XSS不同的是,存储型XSS已经被存储进后台相应的代码当中了,所以当我们每次刷新页面的时候都会弹出我们之前写的那个警告框。
<script>alert("XSS")</script>
3.查看一下网页源码文件可以看到我们写的警告框已经被保存到了后台的网页源码中,每次都会被从数据库中加载出来从而触发脚本的运行。所以存储型的XSS危害更大,会长久危害用户。
DOM型XSS
1.首先在输入框中随便输入一串字符,可以看到弹出一个what do you see?的提示。查看一下源码看到底做了一个什么样的操作,Ctrl+F搜索一下what定位到源码的相关位置。
可以看到这里有一段js的代码,可以简单分析一下这段代码。可以从源代码中看到输入点就是源码中的input标签,DOM型的XSS漏洞通过了解我们可以知道是纯前端的漏洞,分析源码可移知道我们输入后得到一个字符串,然后通过字符串拼接的方式拼接到a href中。输出点我们可以从标签构造一个闭包函数。
“+str+”:就是输入的变量,要做的就是通过构造闭合,来执行我们预期的代码。 ’ >what do you see?,这就是构造的payload:
#' onclick="alert(555)">
构造一个闭包函数输入到文本框中去,这里实际上是使前面的a标签进行闭合操作,然后在完整的a标签中加入了一个警告框。其实这种DOM注入没有什么太大的用处,因为既没有发送到后台进行操作,也没有输入到URL中去。
点击下面的what do you see ? 就会出现一个弹窗。说明这里存在一个DOM型的XSS。
DOM型XSS-X
1.在目标站点上找到输入点,比如查询接口,留言板等。
2.输入一组“特殊字符+唯一识别字符”,点击提交后,查看返回的源码,是否有做对应的处理。
3.通过搜索定位到唯一字符,结合唯一字符前后语法确认是否可以构造执行js的条件(构造闭合)。
发现了一个js函数,利用了DOM将字符串进行了拼接并把值给a标签的href。
4.提交构造的脚本代码(以及各种绕过姿势),看是否可以成功执行,如果成功执行则说明存在XSS漏洞;
利用已知条件构建payload效果为弹窗,弹窗内容为111
#' onclick="alert(555)">
XSS之盲打
1.打开pikachu里的XSS的盲打,输入一个字符来测一下看它有什么样的作用,点击提交后显示如图这句话。
<script>alert(“XSS”)</script>
2.点击右上角的“点一下提示”里的后台登录地址,复制这个地址在url登陆一下,这个时候就会切换成管理员,然后他要查一下用户给他发的一些消息,这时会出现弹窗。
这种XSS漏洞的本质还是XSS的存储型,你前端的内容输出,你前端的内容输入,被后台存下来了又在后台的页面上输出了,这时危害的攻击就比较大的,因为攻击者可以直接通过在前段注入一段cookie的脚本,然后管理员登录后台之后,他就直接就把管理员的cookie获取到,然后接管管理员登录后台。
xss之过滤
1.在输入框中输入
< script >alert(‘xss’)< /script >
2.查看源码,发现有一部分内容被过滤掉了。
3.于是,再次输入< script>alert(‘xss’)< /script>,但有所不同的是修改大小写,例如:
<SCRIPT>alert(/xss/)</sCRIpt>
xss之htmlspecialchars
htmlspecialchars() 函数把预定义的字符转换为 HTML 实体。
具体的预定义的字符是:
" & "成为&
" “ " 成为"
" ‘ " 成为'
" < "成为<
" > "成为>
可用的引号类型:
ENT_COMPAT - 默认。仅编码双引号
ENT_QUOTES - 编码双引号和单引号
ENT_NOQUOTES -不编码任何引号
1.输入’"<>script后提交.
2.查看网页源代码。
由图可以看出"和<以及>,这三个符号虽然能在页面显示,但在代码中却不是,不过可以看出,单引号符号仍可使用,尝试输入:
javascript:alert(/xs/)
xss之href输出
查看源码:
href的定义: < a > 标签的 href 属性用于指定超链接目标的 URL。
href 属性的值可以是任何有效文档的相对或绝对URL,包括片段标识符和JavaScript 代码段。如果用户选择了 < a > 标签中的内容,那么浏览器会尝试检索并显示href属性指定的 URL 所表示的文档,或者执行 JavaScript 表达式、方法和函数的列表。
结合源码和href定义,可以知道:虽然有htmlspecialchars()函数,但由于输入的url拼接在 < a href=‘输入的内容’>属性中,所以可以使用javascript语法来构造payload:
javascript:alert(/xss/)
xss之js输出
- 先随便输入一串字符串,查看源码发现,输入被动态的生成到了javascript中。
它会把我们的输入放到js中,然后对这个变量进行判断,然后再输出, 可以构造一个闭合,先用一个单引号和闭合掉页面中的
'</script><script>alert('xss')</script>
提交,弹窗出现。