问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

[红日安全]代码审计Day2 - filter_var函数缺陷

发布网友 发布时间:2024-09-29 07:08

我来回答

1个回答

热心网友 时间:2024-10-10 20:16

本文由红日安全成员:七月火 编写,如有不当,还望斧正。

前言

大家好,我们是红日安全-代码审计小组。最近我们小组正在做一个PHP代码审计的项目,供大家学习交流,我们给这个项目起了一个名字叫PHP-Audit-Labs。现在大家所看到的系列文章,属于项目第一阶段的内容,本阶段的内容题目均来自PHP SECURITY CALENDAR 2017。对于每一道题目,我们均给出对应的分析,并结合实际CMS进行解说。在文章的最后,我们还会留一道CTF题目,供大家练习,希望大家喜欢。下面是第二篇代码审计文章:

Day 2 - Twig

题目叫做Twig,代码如下:

漏洞解析

这一关题目实际上用的是PHP的一个模板引擎Twig,本题考察XSS(跨站脚本攻击)漏洞。虽然题目代码分别用了escape和filter_var两个过滤方法,但是还是可以被攻击者绕过。在上图第8行中,程序使用Twig模板引擎定义的escape过滤器来过滤link,而实际上这里的escape过滤器,是用PHP内置函数htmlspecialchars来实现的,具体可以点击这里了解escape过滤器,htmlspecialchars函数定义如下:

htmlspecialchars:(PHP 4, PHP 5, PHP 7) 功能:将特殊字符转换为HTML实体 定义:string htmlspecialchars(string$string,[int$flags = ENT_COMPAT | ENT_HTML401,[string$encoding = ini_get("default_charset"),[bool$double_encode = TRUE]])

第二处过滤在第17行,这里用了filter_var函数来过滤nextSlide变量,且用了FILTER_VALIDATE_URL过滤器来判断是否是一个合法的url,具体的filter_var定义如下:

filter_var:(PHP 5 >= 5.2.0, PHP 7) 功能:使用特定的过滤器过滤一个变量定义:mixed filter_var(mixed$variable,[int$filter = FILTER_DEFAULT,[mixed$options]])

针对这两处的过滤,我们可以考虑使用javascript伪协议来绕过。为了让大家更好理解,请看下面的demo代码:
我们使用payload:?url=javascript://comment%0aalert(1),可以执行alert函数:
实际上,这里的//在JavaScript中表示单行注释,所以后面的内容均为注释,那为什么会执行alert函数呢?那是因为我们这里用了字符%0a,该字符为换行符,所以alert语句与注释符//就不在同一行,就能执行。当然,这里我们要对%百分号编码成%25,因为程序将浏览器发来的payload:javascript://comment%250aalert(1)先解码成:javascript://comment%0aalert(1)存储在变量$url中(上图第二行代码),然后用户点击a标签链接就会触发alert函数。
实例分析

本次实例分析,我们选取的是Anchor 0.9.2版本,在该版本中,当用户访问一个不存在的URL链接时,程序会调用404模板,而这个模板则存在XSS漏洞,具体代码如下:

该代码在themes\default\404.php中,看第4行code标签中的current_url函数,我们可在anchor\functions\helpers.php文件中,看到current_url函数是由Uri类的current方法实现的,具体代码如下:
我们跟进到Uri类,在system\uri.php文件中,我们发现这里调用了static::detect方法(statci::是在PHP5.3版本之后引入的延迟静态绑定写法)。
在current方法下面,我们就可以找到detect方法,该方法会获取$_SERVER数组中的'REQUEST_URI'、'PATH_INFO'、'ORIG_PATH_INFO'三个键的值(下图第3-4行代码),如果存在其中的某一个键,并且符合filter_var($uri, FILTER_SANITIZE_URL)和parse_url($uri, PHP_URL_PATH),则直接将$uri传入static::format方法(下图第10-14行代码),具体代码如下:
我们跟进static::format方法,可以发现程序过滤了三次(下图第3-7行),但是都没有针对XSS攻击进行过滤,只是为了获取用户访问的文件名,具体代码如下:
由于没有针对XSS攻击进行过滤,导致攻击十分容易,我们来看看XSS攻击具体是如何进行的。
漏洞利用

我们构造payload如下:http://localhost/anchor/index.php/。根据上面的分析,当我们访问这个并不存在的链接时,程序会调用404模板页面,然后调用current_url函数来获取当前用户访问的文件名,也就是最后一个/符号后面的内容,所以最终payload里的部分会嵌入到 标签中,造成XSS攻击,效果图如下:

修复建议

这对XSS漏洞,我们最好就是过滤关键词,将特殊字符进行HTML实体编码替换,这里给出的修复代码为Dedecms中防御XSS的方法,大家可以在uploads/include/helpers/filter.helper.php路径下找到对应代码,具体防护代码如下:

结语

看完了上述分析,不知道大家是否对filter_var函数绕过有了更加深入的理解,文中用到的CMS可以从这里下载,当然文中若有不当之处,还望各位斧正。如果你对我们的项目感兴趣,欢迎发送邮件到hongrisec@gmail.com联系我们。Day2的分析文章就到这里,我们最后留了一道CTF题目给大家练手,题目如下:

题解我们会阶段性放出,如果大家有什么好的解法,可以在文章底下留言,祝大家玩的愉快!

相关文章

Anchor CMS 0.9.2: XSS
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
家里有壁虎对小孩有影响吗? 八字合婚:男女一个字也没合上 什么是八字合婚? 我讨厌女人,我恨女人 我痛恨这个世界上所有的女人,原因如下? 我不想来这世上,趟这一趟浑水,我恨这肮脏的社会!我恨我无奈的活着!如果... 大雅家是什么品牌 1971年阴历8月初一上午8点出生的女的 钗钏金 ,今年打算买房几楼好 请... 请问高人我是一九八八年农历七月初一 子时 命运如何??女的。 我是1979年阴历十月初一,中午11点15分生的女生,请问明年财运如何,请高 ... 我是1987年七月初一中午12点出生,女生,请高人算命 别让我真爱上你 歌词 学不会更爱你专辑 上海2035规划里的地铁部分 酒吧营销运营难吗?不难 酒吧里如何玩微信霸屏游戏_微信霸屏游戏有什么好处呢? ...经常看《今日说法》,《社会与法》之类的,是一个什么性格的人?_百 ... 想长高、但又不想长胖,听说晚上睡觉前喝纯牛奶可以有助于长高个子? 五六年前做了次镶牙,是左下第二颗拔掉,相邻的两颗磨小然后用牙套镶起来... 身高174体重69kg的男生穿“胸围105衣长52肩宽不限”的长袖上衣会小吗... 17岁男青年 身高173CM 体重69KG 父亲身高176CM 母亲身高164CM 还能长... 我18岁了还能长高吗?有什么长高的办法? 我现在174,69kg.感觉身高不够啊... 手机怎么调白平衡 荣耀手机白平衡怎么调 手机自动白平衡怎么设置 空心菜的种植时间和温度是多少 空心菜的种植温度是多少 空心菜种植方法和时间 生气奶水不足怎么办 生气奶水不足的原因是什么 被气的奶水少了怎么办 生气导致奶水不足怎么办 宝妈生气没奶怎么办 跨站攻击XST与XSS的比较 我长的丑我女朋友看不起我怎么办? 我的IBM电脑(thinkpad R52)重装系统以后网卡驱动装不上啊? ...R52 1847 49C显示卡驱动啊?我在IBM官方网站下了一个可是装不上,这... 我的是IBM R52重装系统以后 触摸板上方的滚轮键不好使了 求帮忙 在... IBMR521858在官网下的驱动怎么装上之后不管用? 我的IBM的R52型号的笔记本 不能用移动华为牌的网卡?为什么 谁能告诉我笔记本电脑IBM 型号 R52 1846CC6 ,的触摸板到底要不要自己... 黎城县3 日游,该如何规划旅行路线? 唉,不知最近为什么有一大堆男生叫我的英文名,其中有一个有事没事就叫... ...一双灰色的及踝靴,又买了黑色和灰色的打底裤,想穿裙装,请问应如何搭 ... 及踝靴秋冬怎么搭配裤子 ...用一点都不习惯。我还想用回以前那个系统。要怎么办呢? 电脑里的"记事本"被Java(TM) 2 Platform Standard Edition binary这个... ...JAVA(TM) 2 Platform Standard Edition binary 已停止工作,怎么解决... 关于秋天的七言绝句(描写秋天的经典诗句) 菜百钻戒,forevermark,0.51克拉,G色,VVS,EXE切工,19676元合适么_百 ... 深圳专升本报名流程及报考时间 摩尔庄园精英任务的问题 谁能告诉我摩尔庄园精英任务...