PHP代码审计学习(7)——XSS漏洞

XSS介绍 

  跨站脚本攻击(Cross Site Scripting),为了不和层叠样式表(Cascading Style Sheets, CSS)的缩写混淆,故将跨站脚本攻击缩写为XSS。恶意攻击者往Web页面里插入恶意Web脚本代码(htmljavascriptcss等),当用户浏览该页面时,嵌入其中的Web脚本代码会被执行,从而达到恶意攻击用户的特殊目的。

  攻击者利用漏洞,可以获取其他合法用户的Cookie身份信息、访问地址等通过获取到的Cookie信息,即可以被攻击者的身份访问Web应用,如获取到管理员的Cookie,就可以以管理员的身份访问应用系统。

挖掘思路

  XSS漏洞的关键在于寻找没有被过滤的参数,且这些参数传入到输出函数

 

  经常存在于富文本、图片引用、文字格式设置、论坛留言、用户信息等

 

XSS类型分类

  案例参照https://www.jianshu.com/p/4fcb4b411a66

反射型XSS

  又称非持久型XSS,之所以称为反射型XSS,则是因为这种攻击方式的注入代码是从目标服务器通过错误信息、搜索结果等等方式“反射”回来的。而称为非持久型XSS,则是因为这种攻击方式具有一次性。攻击者通过电子邮件等方式将包含恶意代码的链接发送给受害者,当受害者点击该链接时,恶意代码被传输到目标服务器上,然后服务器将恶意代码“反射”到受害者的浏览器上,从而在该浏览器上执行了恶意攻击脚本。目前大多数浏览器都具有反射型XSS保护功能,所以相对来说反射型的危害相对较低。

  案例


 
"Content-Type" content="text/html; charset=utf-8" /> 
XSS 
 
 
"" method="get"> "text" name="input"> "submit">

php echo 'output:
'.$_GET['input']; ?>

  上述案例是当将以GET方式提交的字符串输出,因为没有任何过滤所以当提交JS代码时候会触发提交的语句

PHP代码审计学习(7)——XSS漏洞_第1张图片 

  这个弹窗并没有什么实际的意义,但通过它我们知道输入javascript代码是可以被执行的,当我们输入一些其他函数,比如 document.cookie就可以成功盗取用户的cookie信息,或者读取用户浏览器信息等,为我们进一步深入攻击做铺垫。

储存型XSS

  又称持久型XSS,它和反射型XSS最大的不同就是,攻击脚本将被永久地存放在目标服务器的数据库或文件中。这种攻击多见于论坛、SNS社交网站、微博等系统,攻击者在发帖、发表文章、发微博的过程中,将恶意脚本连同正常信息一起注入到内容之中,发送到网站服务器储存下来,恶意脚本也永久地被存放在论坛服务器的后端储存器中,当其他用户浏览这个被注入了恶意脚本的内容时,恶意脚本则会在他们的浏览器中得到执行,从而实现攻击目的。

PHP代码审计学习(7)——XSS漏洞_第2张图片

 

   案例

      
      
      
    XssStorage  
      
      
    

Message Board


Message:

Subuser:

php if(isset($_POST['user'])&&isset($_POST['desc'])){ $log=fopen("sqlStorage.txt","a"); fwrite($log,htmlspecialchars($_POST['user'])."\r\n"); # 在此对用户输入数据$_POST['user']进行过滤 fwrite($log,$_POST['desc']."\r\n"); fclose($log); } if(file_exists("sqlStorage.txt")) { $read= fopen("sqlStorage.txt",'r'); while(!feof($read)) { echo fgets($read)."
"; } fclose($read); } ?>

  当输入字符串时候,先将输入的数据保存在一个地方,可以是文件也可以是数据库,这里是保存在sqlStorage.txt,然后再返回到页面

PHP代码审计学习(7)——XSS漏洞_第3张图片

 

 

PHP代码审计学习(7)——XSS漏洞_第4张图片

 

   我们这边发现只有XSS2弹出,因为htmlspecialchars()函数对用户输入的<>做了转义处理。

 

   再看一下文件

PHP代码审计学习(7)——XSS漏洞_第5张图片

 

   可以看到这些都是刚刚输入的保存在文本里的字符,可以明显发现<>被转义了

DOM型XSS

  基于文档对象模型Document Objeet Model,DOM)的一种漏洞。DOM是一个与平台、编程语言无关的接口,它允许程序或脚本动态地访问和更新文档内容、结构和样式,处理后的结果能够成为显示页面的一部分。DOM中有很多对象,其中一些是用户可以操纵的,如uRI ,location,refelTer等。客户端的脚本程序可以通过DOM动态地检查和修改页面内容,它不依赖于提交数据到服务器端,而从客户端获得DOM中的数据在本地执行,如果DOM中的数据没有经过严格确认,就会产生DOM XSS漏洞

  特征:整个过程都是在前端完成的,没有后端的参与(纯前端的操作!)

PHP代码审计学习(7)——XSS漏洞_第6张图片

  案例参考:https://www.cnblogs.com/wangtanzhi/p/12239918.html

 

 php
$xss = $_GET['xss'];
?>
$xss;?>">
  playload: ?xss=<img src=x onerror=alert(/xss/)>

PHP代码审计学习(7)——XSS漏洞_第7张图片

 

杂言

  XSS其实原理很简单,就是闭合标签,不过正因为这个,所以有很多骚姿势,后续还会出XSS系列的闯关游戏,最近被考试和实习问题缠的没时间,系统学习代码审计进度慢下来了,还要去看一下以前一些零碎的东西,害

 

你可能感兴趣的:(PHP代码审计学习(7)——XSS漏洞)