实验步骤:
一、反射型XSS(get)
多次输入,发现输入什么内容,提示都会出现输入内容
输入 <script>alert(1) ,提示whois,说名语句被执行了,没有显示,但是长度受限制,那我们就改一下长度
按F12打开控制台,选择HTML-编辑,右侧搜索length,搜到把长度值改为100
输入 <script>alert(1) </script> ,成功执行JS代码
二、反射型XSS(post)
正常输入,和输入JS代码都不行
于是pikachu:000000常规登录
发现还有一个输入框,输入<script>alert(1) </script>,成功弹窗
三、存储型XSS
直接输入<script>alert(1) </script>,成功弹窗,以后每次访问本页面,都会弹窗
四、DOM型xss
直接输入<script>alert(1) </script>,发现没有弹窗
审查源码
从上面可以看出来,通过value方式将text的值赋值为str,也就是框里面的
值,然后通过innerHTML将标签内的值取出来,比如<labelid="lb1">thisis
alabel</label>,取出来的值就是thisisalabel。所以结合前面的'做一个闭
合,像<script>这种有前后标签闭合的就不太方便用了,用提示里面的
onclick来构造,'οnclick=alert(1)>就可以了
输入 'οnclick=alert(1)> ,出现链接
点击链接,即可成功弹窗
四、DOM型xss-x
输入 'οnclick=alert(1)> ,出现链接
点下面的链接,又出现一个新连接
再点击新链接,成功弹窗
五、xss之盲打
这个并不是一种攻击类型吧,只是一种场景,因为输入的值在前端都显示不出来,所以我们也不知道哪里会有XSS,所以见框就插,这称之为盲打。
所以接下来,我在框里都输入了恶意代码<script>alert(1) </script>
点最右侧提示,找到后台路径admin_login.php
使用hackbar,点load URL,加载链接后把蓝色框的内容删掉,然后把后台路径复制到后面拼接成新的url http://172.16.12.10:83/vul/xss/xssblind//admin_login.php
点execute, 访问后台url
点Login,成功弹窗
五、xss之过滤
从标题就知道了会有过滤,这里先输入<script>alert(1) </script>探测"'<>/,结果发现符号似乎都没有被过滤掉
方法很多,双写、大小写等,这里试一下大小写
输入 <sCRipt>alert(1) </scriPT> ,成功弹窗
源码查看
$html = '';if(isset($_GET['submit']) && $_GET['message'] != null){ //这里会使用正则对<script 进行替换为空,也就是过滤掉 $message=preg_replace('/<(.*)s(.*)c(.*)r(.*)i(.*)p(.*)t/', '', $_GET['message']); if($message == 'yes'){ $html.="<p>那就去人民广场一个人坐一会儿吧!</p>"; }else{ $html.="<p>别说这些'{$message}'的话,不要怕,就是 干!</p>"; }}
这里只是把 <script 进行了过滤,双写就绕不过了,但是没有区分大小写。
六、xss之htmlspecialchars
输入了常用的符号进行查看是否被过滤,,发现输入内容都会被转变为HTML实体
这里要注意,默认情况的编码是不会将 ' 进行编码的,尝试着利用这一点去试试构造οnclick=alert(1) ,失败
发现和想象中有点不一样,研究了好一会,这里应该是后端php在处理时会将 ' 当作一个分割符来看待,所以在前面加上一个'οnclick=alert(1)再来看。
发现前面的已经闭合上了,后面还多出了一个',那干脆在alert前面再加一个'形成 'οnclick='alert(1),出现链接,点击链接成功弹窗
七、 xss之href输出
这个试了老半天没有成功绕过,感觉应该是都被转义了,于是找了个没有这些符号的XSS攻击代码 javascript:alert(1) 成功弹窗。
八、xss之js输出
那这里使用的时候应该是先把之前的<script>给闭合,然后就可以执行咋们自己的JS了。 </script><script>alert(1)</script>, 直接成功弹框。