渗透测试之XSS(三)

admin 2023年5月15日23:32:49评论32 views字数 1162阅读3分52秒阅读模式

存储型XSS

存储型XSS又被称之为持久性XSS,攻击的脚本可以持久保存在服务器的文件或数据库中,如在个人信息或发表文章等地方,加入代码,如果没有过滤或过滤不严,那么这些代码将储存到服务器中,用户访问该页面的时候触发代码执行这种XSS比较危险,容易造成蠕虫,盗窃 cookie等等。


存储型XSS实例

这里我们借助DVWA靶场来看看存储型XSS是怎么形成的。

首先我们先来看看最简单的low级别


渗透测试之XSS(三)

首先我想在Name这一栏构造我们的XSS攻击代码,但是发现输入长度有做限制,一般这种都是在前端限制input标签里面的max-length属性来达到控制用户输入长度限制,所以我们可以对max-length进行修改。

初始值为10


渗透测试之XSS(三)

我修改为10000,发现就可以进行输入了。但是输入发现下方消息不能为空


渗透测试之XSS(三)

其实师傅们完全可以用户名随意填,然后在下方Message构造我们的XSS攻击代码,当然修改max-length也是一个思路,在Message不存在XSS攻击,但是Name处存在XSS却又存在输入限制,这个时候修改max-length就是一个思路了。


渗透测试之XSS(三)

这样就触发了我们的XSS


渗透测试之XSS(三)

而且该XSS为存储型XSS,在其他用户登陆这个网站的时候,该用户也会触发该XSS攻击,倘若我这里不是触发一个随风的弹框,而是盗取cookie,那么是不是每个登陆这个网站的用户的cookie都会被盗取,可想而知存储型XSS的危害有多大。

那么知道该XSS的危害了,那么我们在从源代码的角度来分析分析此存储型XSS是怎么形成的。

我们来看看它的源代码


渗透测试之XSS(三)

这里接收了两个参数,一个message、一个name,且接收的参数都用了一个trim()函数进行过滤。trim()函数的作用是移除字符串两侧的空白字符或其他预定义字符。


渗透测试之XSS(三)

这里接收了两个参数,一个message、一个name,且接收的参数都用了一个trim()函数进行过滤。trim()函数的作用是移除字符串两侧的空白字符或其他预定义字符。

渗透测试之XSS(三)


渗透测试之XSS(三)

然后下方代码还做了一些常见的代码过滤。之前的渗透文章里面有写过,这里就不一一细说了,这里就把这些函数的作用给师傅们看看。

stripslashes(string):删除字符串中的反斜杠。mysql_real_escape_string(string,connection):对字符串中的特殊符号(x00,n,r,,‘,“,x1a)进行转义。


渗透测试之XSS(三)

然后最重要的一步,用户输入的代码会被存储到数据库中,这里也是形成存储型XSS的关键。还记得我们文章开始时写的存储型XSS的形成原因就是攻击的脚本可以持久保存在服务器的文件或数据库中,也正是这样导致了我们的存储型XSS。

更多技术文章请关注公众号:猪猪谈安全

渗透测试之XSS(三)

师傅们点赞、转发、在看就是最大的支持


原文始发于微信公众号(猪猪谈安全):渗透测试之XSS(三)

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2023年5月15日23:32:49
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   渗透测试之XSS(三)http://cn-sec.com/archives/786466.html

发表评论

匿名网友 填写信息