2020/1/29 PHP代码审计之XSS漏洞

0x00 XSS漏洞简介

人们经常将跨站脚本攻击(Cross Site Scripting)缩写为CSS,但这会与层叠样式表(Cascading Style Sheets,CSS)的缩写混淆。因此,有人将跨站脚本攻击缩写为XSS。

跨站脚本攻击是指恶意攻击者往Web页面里插入恶意Script代码,当用户浏览该页之时,嵌入其中Web里面的Script代码会被执行,从而达到恶意攻击用户的目的。
xss漏洞通常是通过php的输出函数将javascript代码输出到html页面中,通过用户本地浏览器执行的,所以xss漏洞关键就是寻找参数未过滤的输出函数。
常见的输出函数有: echo printf print print_r sprintf die var-dump var_export.

xss 分类:(三类)

反射型XSS:?攻击者事先制作好攻击链接, 需要欺骗用户自己去点击链接才能触发XSS代码(服务器中没有这样的页面和内容),一般容易出现在搜索页面。

存储型XSS: 代码是存储在服务器中的,如在个人信息或发表文章等地方,加入代码,如果没有过滤或过滤不严,那么这些代码将储存到服务器中,每当有用户访问该页面的时候都会触发代码执行,这种XSS非常危险,容易造成蠕虫,大量盗窃cookie(虽然还有种DOM型XSS,但是也还是包括在存储型XSS内)。

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

0x01 挖掘思路

没有过滤的参数,传入到输出函数中。
多关注以下一些地方:
搜索内容
发表文章
留言
评论回复
资料设置

0x02 反射型XSS

常见场景:
1:将前端获取的内容,直接输出到浏览器页面。

$content = $_GET['content'];
echo $content;

##2: 直接输出到HTML标签内

<?
$content = $_GET['content'];
?>
<input type="text" value="<?php echo $content?>">

这种是最常见的,我们需要闭合标签。

3:直接输出到先闭合前面 然后插入我们的payload

0x03 反射和存储的区别

反射型:
输入-输出
存储型:
输入-进入数据库-取出数据库-输出

0x04 DOM型XSS

代码:

<?php
$xss = $_GET['xss'];
?>
<input type="text" id="text" value="<?php echo $xss;?>">
<div id="print"></div>
<script type="text/javascript">
    var text = document.getElementById("text");
    var print = document.getElementById("print");
    print.innerHTML = text.value;

</script>

payload:

?xss=<img src=x onerror=alert(/xss/)>

DOM-XSS的数据流向是:URL-->浏览器

0x05 修复方案

1:在表单提交或者url参数传递前,对需要的参数进行过滤

例如:在项目的web.xml配置过滤器:

<filter>
        <filter-name>XssEscape</filter-name>
        <filter-class>XssFilter</filter-class>
    </filter>
    <filter-mapping>
        <filter-name>XssEscape</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>

2:客户端做数据的验证与过滤,关键的过滤步骤在客户端进行
3:过滤用户输入的 检查用户输入的内容中是否有非法内容。如<>(尖括号)、”(引号)、 ‘(单引号)、%(百分比符号)、;(分号)、()(括号)、&(& 符号)、+(加号)等。、严格控制输出

可以利用下面这些函数对出现xss漏洞的参数进行过滤
1、htmlspecialchars() 函数,用于转义处理在页面上显示的文本。
2、htmlentities() 函数,用于转义处理在页面上显示的文本。
3、strip_tags() 函数,过滤掉输入、输出里面的恶意标签。
4、header() 函数,使用header("Content-type:application/json"); 用于控制 json 数据的头部,不用于浏览。
5、urlencode() 函数,用于输出处理字符型参数带入页面链接中。
6、intval() 函数用于处理数值型参数输出页面中。
7、自定义函数,在大多情况下,要使用一些常用的 html 标签,以美化页面显示,如留言、小纸条。那么在这样的情况下,要采用白名单的方法使用合法的标签显示,过滤掉非法的字符。

各语言示例:
  PHP的htmlentities()或是htmlspecialchars()。
   Python的cgi.escape()。
   ASP的Server.HTMLEncode()。
   ASP.NET的Server.HtmlEncode()或功能更强的Microsoft Anti-Cross Site Scripting Library
   Java的xssprotect(Open Source Library)。
   Node.js的node-validator。

原文地址:https://www.cnblogs.com/wangtanzhi/p/12239918.html

时间: 2024-10-11 03:20:54

2020/1/29 PHP代码审计之XSS漏洞的相关文章

通过代码审计找出网站中的XSS漏洞实战(三)

一.背景 笔者此前录制了一套XSS的视频教程,在漏洞案例一节中讲解手工挖掘.工具挖掘.代码审计三部分内容,准备将内容用文章的形式再次写一此,前两篇已经写完,内容有一些关联性,其中手工XSS挖掘篇地址为快速找出网站中可能存在的XSS漏洞实践(一)https://segmentfault.com/a/1190000016095198 本文主要记录通过代码审计的方式进行XSS漏洞挖掘,分为了找出关键位置,正向审计,反向审计三个部分,审计的系统为permeate渗透测试系统,测试系统的搭建可以参考笔者的

JSONP存在的JSON Hijacking漏洞以及与csrf/xss漏洞的关系

在实习过程中接触过所谓的JSON Hijacking 漏洞,但最近在写论文时发现理解得不深,好像跟xss与csrf又有点区别与联系,索性深入学习了下 JSONP. 下面一段话截取自:http://stackoverflow.com/questions/2067472/what-is-jsonp-all-about   仔细看看就比较清晰了. Say you're on domain abc.com, and you want to make a request to domain xyz.com

基于dom的xss漏洞原理

原文:http://www.anying.org/thread-36-1-1.html转载必须注明原文地址 最近看到网络上很多人都在说XSS我就借着暗影这个平台发表下自己对这一块的一些认识.其实对于XSS很多人都知道利用但是很多人都忽略了漏洞存在的原因,其实说白了基于dom中的XSS都是一些api代码审计不严所产生的,那么一下我就整理下可能存在基于dom的XSS攻击的api吧.document.locationdocument.URLdocument.URLUnencodeddocument.r

Atitit.&#160;Xss&#160;漏洞的原理and应用xss木马

Atitit. Xss 漏洞的原理and应用xss木马 1. XSS漏洞1 2. XSS的用途2 2.1. 盗取cookie2 2.2. 刷新流量 刷分3 2.3. DOS 窃取隐私”.“假冒身份”.“WEB蠕虫3 2.4. 广告植入 弹窗 .信息收集 .流量转发 甚至是路由劫持3 2.5. 钓鱼攻击,高级的钓鱼技巧.3 2.6. 删除目标文章.恶意篡改数据.嫁祸.3 2.7. 劫持用户Web行为,甚至进一步渗透内网.3 2.8. 爆发Web2.0蠕虫.3 2.9. 蠕虫式的DDoS攻击.3 2

Web应用进行XSS漏洞测试

转自:http://www.uml.org.cn/Test/201407161.asp 对 WEB 应用进行 XSS 漏洞测试,不能仅仅局限于在 WEB 页面输入 XSS 攻击字段,然后提交.绕过 JavaScript 的检测,输入 XSS 脚本,通常被测试人员忽略.下图为 XSS 恶意输入绕过 JavaScript 检测的攻击路径. 常见的 XSS 输入 XSS 输入通常包含 JavaScript 脚本,如弹出恶意警告框:<script>alert("XSS");<

兽哥出品----&gt;XSS漏洞的原理与剖析

Xss(跨站脚本攻击) 今天 兽哥又给大家带来一份干货,关于xss漏洞问题     Xss是一种基于html属性的攻击 这是一种比较简单的方法 然而现在存在xss漏洞已经很少了   但是..注意 这里我用到了但是          我在挂代理 去国外找网站时  我发现某个渣渣国的很多很多网站存xss漏洞       随便掏了一个给大家做一下尝试 讲解原理 嗷嗷叫!!!! 拉出来safe3   输入某网站 跑一下 可以看到  真的是很多啊 还有sql注入漏洞 我随便选中一行把 这个很短 很舒服 我

XSS漏洞攻击原理与解决办法

转自:http://www.frostsky.com/2011/10/xss-hack/ 对于的用户输入中出现XSS漏洞的问题,主要是由于开发人员对XSS了解不足,安全的意识不够造成的.现在让我们来普及一下XSS的一些常识,以后在开发的时候,每当有用户输入的内容时,都要加倍小心.请记住两条原则:过滤输入和转义输出. 一.什么是XSS XSS又叫CSS (Cross Site Script) ,跨站脚本攻击.它指的是恶意攻击者往Web页面里插入恶意html代码,当用户浏览该页之时,嵌入其中Web里

【漏洞复现】WordPress插件Quizlord 2.0 XSS漏洞复现与分析

年后趁着需要做安全测试系统不多的这个空档,学学python到处逛逛复现复现和分析一些简单的漏洞 0x00 复现环境 phpstudy wordpress 4.4版本 貌似WordPress爆出漏洞的通常基本大多都是它的插件存在安全问题. 0x01步骤 使用phpstudy搭建环境,搭建wordpress,然后登陆进后台去下载Quizlord插件,版本为2.0一切就绪后就开始看怎么触发的XSS了 3) At the title type: poc"><script>alert(1

解决反射型XSS漏洞攻击

对于程序员来说安全防御,无非从两个方面考虑,要么前端要么后台. 一.首先从前端考虑过滤一些非法字符. 前端的主控js中,在<textarea> 输入框标签中,找到点击发送按钮后,追加到聊天panel前 进行过滤Input输入内容 1 // 过滤XSS反射型漏洞 2 filterInputTxt: function (html) { 3 html = html.replace(/(.*<[^>]+>.*)/g,""); // HTML标记 4 html =