存储型与dom型原理

0x01.存储型xss


1. 什么是存储型xss?

攻击者事先将恶意代码上传或储存到漏洞服务器中,只要受害者浏览包含此恶意代码的页面就会执行恶意代码。只要访问了这个页面的访客,都有可能会执行这段恶意脚本
(因此储存型XSS的危害会更大。因为存储型XSS的代码存在于网页的代码中,可以说是永久型的)

2. 源码剖析
这里直接贴出php源码

<html>
<head lang="en">
    <meta charset="gbk">
    <title>存储型XSS</title>
</head>
<body>
    <form action="" method="post">
        输入你的ID<input type="text" name="id" /> <br/>
        输入你的Name:<input type="text" name="name" /> <br/>
        <input type="submit" value="提交">
    </form>
<hr>
<?php
	$id=$_POST["id"];
	$name=$_POST["name"];
	mysql_connect("localhost","root","root");
	mysql_select_db("test");
	$sql="insert into xss value ($id,'$name')";
	$result=mysql_query($sql);
	
?>
<?php	
	echo "回显内容:";
	echo "<br />";
	$sql="select * from xss where id=1";
	$result=mysql_query($sql);
	while($row=mysql_fetch_array($result)){
		echo $row['name'];
	}
?>
</body>
</html>

可以看到的是,先在第一段部分,接受用户的内容,第二段是将内容插入
数据库,第三个回显内容就是从数据库查询。
(其实那2个php可以合成一个php,但是我不想,懒得)
具体内容我在反射型xss已经讲过了,可以狭义的概述

存储型xss用户输入内容插入了数据库,内存,文件等其他地方。然后再次访问的时候没有输入payload,就会自动弹窗
(例如留言板,或者个人资料修改。第一次插入后,连续访问还自动弹窗,说明这就是存储型xss)

反射型xss用户想要利用,就得输入一次payload (例如在搜索处发现xss,想要让他弹窗,就得重新输入一遍)

3. 靶场演示
通过源码,我们知道这是这是输出xss表中的内容
我们先看下xss表有没有内容

发现没有内容,这时候我们进入靶场先插入id和name
在这里插入图片描述
然后会输出我们的名字

这时候就成功的输出了,我们查看下xss这个表中有没有内容
在这里插入图片描述
这时候发现有条内容了。说明我们插入,或者我们平时注册的时候
会插入数据库等等,一般在网站后台可以看到

我应该把上面的第三个php输出内容的代码单独拿出来,模拟管理员访问的页面 QAQ 但是写到这里了,我也不想弄,大概理解个意思就好了

然后我把xss表内容删除掉,插入我们恶意语句的代码
在这里插入图片描述
payload:<script>alert(\'Young\')</script>
这是提交,发现弹窗了
在这里插入图片描述
注意这里为啥没有回显内容,因为他把我们输入的内容当做代码执行了,所以没有显示
(你见过执行的代码会显示给用户嘛 QAQ)
在这里插入图片描述
这时候发现数据库有了一条数据,那就是我们插入的数据
恶意的js语句
这种存储型xss漏洞存在于,留言板,个人资料等等
因为会保存进数据库,然后在后台显示,所以后台管理员只要看到这条信息
他就中招了

至于会不会被发现,这个就不用担心,内容会被当做代码执行,所以不会显示的

我们可以查看一下掌控安全的靶场
在这里插入图片描述
这时候点击一下查看留言,因为好多人都会在这里插
(你也可以在留言反馈那边弹一条)
在这里插入图片描述
然而也不知道是谁在这插,插这么多,我点不完。所以就不演示了

0x02.Dom型xss

什么是 dom—based xss?
狭义的总结
原本不应该出现xss的地方,但是经过javascript的操作之后产生了xss

这里涉及到了document对象的一些操作,看过前面偏移注入的话应该知道
document.cookie 这样的话就是查看自己的cookie

这里的话也可以使用下面这条命令,判断是否伪静态
如果使用这条的话,时间再不断的变化,就是动态

document.lastModifiled

还有其他的一些方法
在这里插入图片描述
这里具体讲document.write()
这个有啥用?
其实就是在页面上面输出
在这里插入图片描述
先判断下是不是动态页面,然后再写
document.write("young")
要write什么可以自己定义
在这里插入图片描述
然而上面提到了,其实这个write() 也是个js语句
接受编码,那我们试着将下面这个编码,看会不会弹窗
<script>alert(1)</script>

编码后再使用document.write()写入

发现这里弹窗了~~~~
我们通过js编码后,它成功的弹窗了
(但是这个不是漏洞,这里想说的是,像document.write() 会自动对编码进行解码~~)

似乎扯的有点远了,但是如果被拦截了
这里可以通过Js代码的解码,去进行绕过 QAQ
然而xss的时候,也可以使用burp
因为有可能前端有限制,但是数据包没有

例如还有比较偏的,在上传头像的地方打xss QAQ

靶场实战

这里的话借用靶场,因为我觉得这个靶场很容易讲的话很容易理解

通过审查源码,我们可以发现,这里是document.write()进行输出到页面上的
这时候我们可以尝试的,也在这个页面弹窗,通过修改发现,这个输入点是在url那边
<script>alert(1)</script>
这时候发现,似乎没有弹窗
在这里插入图片描述
但是注意看,我们输入的内容,已经被<script>给包围了
这时候我们用其他的语句测试
<img src=a onerror=alert(1) />
在这里插入图片描述
这时候成功的弹窗了,说明了我们输入的内容被执行了
可以简单理解成,标签内不可以使用<script>

其他常用的弹窗语句
1.<img src=a onerror=alert(1) >
2.<svg onload=alert(1)>
这几个是我经常用的

小总结

dom型xss其实本质上还是反射型xss,他没有与数据库交互,每次想要弹窗,都需要输入一次payload
对dom型xss没有深入了解

啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊
尴尬

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值