存储型XSS和DOM型XSS的解析
? 存储型XSS演示和与原理分析
? Dom型XSS演示和原理分析
存储型XSS漏洞
存储型XSS漏洞跟反射型形成的原因一样,不同的是存储型XSS下攻击者可以将脚本注入到后台存储起来,构成更加持久的危害,因此存储型XSS也称“永久型”XSS。
存储型XSS漏洞演示
我们切换到pikachu存储型xss栏目
我们看到他这个地方有留言板,我们试着留个言,点提交
我们发现这个留言会被存储到页面上面,我们刷新这个页面,留言一直在这里,也就是说,我们提交的这个留言,被后台给存下来了,存到数据库里面,或者配置文件里面
我们按照之前的思路测试一下,输入特殊字符
"'<>?&7777
然后点提交
我们看到我们从表面上,我们输入的这一串东西,被直接当作留言显示出来了
我们在来看一下页面源码,然后ctrl+f,去搜一下
我们发现我们输入的特殊字符,被输出到了p标签里面,跟反射型的xss输出点其实是一样的,看了一些,是没有做任何的过滤和转义处理的
接下来,我们输入一个对应的payload来做对应的测试,我们在这里输入一个简单的弹窗
<script>alert('xss')</script>
我们点提交,流程是前端把这串字符,提交给后台,后台把他存下来之后,重新在页面上刷新,显示出来,这串代码会被前端浏览器执行,弹个窗,这是我们的一个预期,我们点提交
也就意味着,我们刚刚输入的js被存到数据库里面了
我们每次去刷新的时候,他还是会弹,因为我们刚刚的留言被存到数据库里面了,每次你去访问页面的时候,都会从数据库里面,把这个留言给加载出来,然后触发这个脚本的运行,这个就是存储型的xss
显而易见,存储型的xss他的危害会更大,因为他可以造成持久性的伤害,所有访问这个页面的用户,都会中招
存储型XSS-代码分析
他会判断我们的输入有没有对应的message,并且这个message不是为空,对它进行转义,这个主要是防sql注入的
虽然它前面插数据库的时候,做了数据库的转义,防止sql注入,接着它就通过insert,把这个message插入到了表里面
页面上,它还做了一个操作,在p标签里面,去做一个select,把表里面所有的留言,都给查出来,然后去echo一下,把它读出来,显示到这个页面上
也就是说,虽然在输入的时候,做了数据库的转义,它考虑到sql注入的问题,但是从数据库里面读取出来之后,输出的时候,它是直接把数据库里面的content,也就是对应内容的字段,给原封不动的输出到了前端的浏览器里面,这样就形成了一个存储型的xss漏洞
它是直接把数据库里面的content,内容的字段,给原封不动的输出到了前端的浏览器里面,那这样就形成了存储型的xss漏洞
存储型的xss跟反射型的xss的区别在于一个有存,另一个没有存
|