存储型与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>

	$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);
	
?>
	
	echo "回显内容:";
	echo "
"
; $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表有没有内容
存储型与dom型原理_第1张图片
发现没有内容,这时候我们进入靶场先插入id和name
存储型与dom型原理_第2张图片
然后会输出我们的名字
存储型与dom型原理_第3张图片
这时候就成功的输出了,我们查看下xss这个表中有没有内容
存储型与dom型原理_第4张图片
这时候发现有条内容了。说明我们插入,或者我们平时注册的时候
会插入数据库等等,一般在网站后台可以看到

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

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

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

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

0x02.Dom型xss

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

这里涉及到了document对象的一些操作,看过前面偏移注入的话应该知道
document.cookie 这样的话就是查看自己的cookie
存储型与dom型原理_第10张图片
这里的话也可以使用下面这条命令,判断是否伪静态
如果使用这条的话,时间再不断的变化,就是动态

document.lastModifiled

还有其他的一些方法
存储型与dom型原理_第11张图片
这里具体讲document.write()
这个有啥用?
其实就是在页面上面输出

先判断下是不是动态页面,然后再写
document.write("young")
要write什么可以自己定义
存储型与dom型原理_第12张图片
然而上面提到了,其实这个write() 也是个js语句
接受编码,那我们试着将下面这个编码,看会不会弹窗

存储型与dom型原理_第13张图片
编码后再使用document.write()写入
存储型与dom型原理_第14张图片
发现这里弹窗了~~~~
我们通过js编码后,它成功的弹窗了
(但是这个不是漏洞,这里想说的是,像document.write() 会自动对编码进行解码~~)

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

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

靶场实战

这里的话借用靶场,因为我觉得这个靶场很容易讲的话很容易理解
存储型与dom型原理_第15张图片
通过审查源码,我们可以发现,这里是document.write()进行输出到页面上的
这时候我们可以尝试的,也在这个页面弹窗,通过修改发现,这个输入点是在url那边

这时候发现,似乎没有弹窗
存储型与dom型原理_第16张图片
但是注意看,我们输入的内容,已经被

你可能感兴趣的:(web安全)