其实php为了可以上传一个数组,会把结尾带一对中括号的变量,例如 xxx[]的name(就是$_POST中的key),当作一个名字为xxx的数组构造类似如下的requestPOST /login HTTP/1.1 Host: xxx.com Content-Length: 41 Accept: application/json, text/javascript User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit...
绕过原理利用的是HTTP参数污染、$_SERVER['REQUEST_URI']以及$_REQUEST会对特殊字符(空格、.、[)转换成为下划线_。详细可参考文章request导致的安全性问题分析。 利用POC: http://172.19.77.44/hongri/index.php?submit&i_d=1/**/union/**/select/**/1,name,3,4/**/from/**/ctf.users&i.d=113 结果...
以上十个漏洞是php中较为常见的,另外的漏洞比如import_request_variables()变量覆盖,register_globals全局变量覆盖,这些都在php5以后就废除了,ctf和实战中都很难再遇到,故不在此列出。 PHP特性漏洞 一.intval()函数---获取变量的整数值 函数说明 绕过思路总结 二.is_numeric()函数---获取变检测变量是否为数字或数...
$_POST // 获取 post 数据,是一个字典 $_GET // 获取 get 数据,是一个字典 $_COOKIE // 获取 cookie $_SESSION // 获取 session $_FILE // 获取上传的文件 $_REQUEST // 获取 $_GET,$_POST,$_COOKIE 中的数据 错误控制运算符 PHP 支持一个错误控制运算符:@。当将其放置在一个PHP 表达式之前,...
ctf中php的一些trick 获取http请求的变量值过程 对于php获取http请求的值的变量$_GET,$_POST,$_COOKIE,$_SERVER,$_ENV,$_REQUEST,$_FILES,在初始化请求时就注册了这么多的超全局变量 ,这里从php的源代码就可以看出: 在看看php的官方文档怎么说 这里重点关照一下$_REQUEST,明明写的默认是包含$_GET,$_POST ...
import_request_variables register_globals parse_str get_defined_vars get_defined_functions ReflectionClass $_SERVER[QUERY_STRING]、$_SERVER[REQUEST_URI] $_REQUEST 文件读取函数 PHP Tutorial (w3schools.com) 这部分需要掌握大量的漏洞函数,不想记忆可以直接用我写的插件 CTFWeb - Visual Studio Marketplace...
<?php if(isset($_REQUEST[ 'ip' ])) { $target = trim($_REQUEST[ 'ip' ]); $substitutions = array( '&' => '', ';' => '', '|' => '', '-' => '', '$' => '', '(' => '', ')' => '', '`' => '', '||' => '', ); $target = str_replace( array_...
PHP在反序列化时,会严格按照序列化规则才能成功实现反序列化。 字符串逃逸的实质是闭合,分为两种:字符变多、字符变少,导致字符变多、变少的原因是利用了不正确的过滤或者其他操作。 正常情形 先看一个正常序列化与反序列化的例子: <?php$username='xixi';$password='test1';$user=array($username,$password)...
<?php include "flag.php"; $_403 = "Access Denied"; $_200 = "Welcome Admin"; if ($_SERVER["REQUEST_METHOD"] != "POST") die("BugsBunnyCTF is here :p..."); if ( !isset($_POST["flag"]) ) die($_403); foreach ($_GET as $key => $value) $$key = $$value; foreach...
<?php $a = false; extract($_GET); if($flag) { echo "flag{}" } ?> 1. 2. 3. 4. 5. 6. 7. 8. 此时变量 a 已经被定义了,但是在 extract() 函数转换 GET 方法传入的数据时,传入的 a 在转换时就会把原来的变量覆盖掉。 NULL截断 ...