本文主要是介绍[DefCamp CTF]para-code,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
1NDEX
- 0x00 前言
- 0x01 brain.md
- 知识扩展
- linux m4
- 宏处理器
- 直观地实操一下
0x00 前言
本来想今天写的,结果比赛环境关了
幸好手里还有源码
<?php
require __DIR__ . '/flag.php';
if (!isset($_GET['start'])){show_source(__FILE__);exit;
} $blackList = array('ss','sc','aa','od','pr','pw','pf','ps','pa','pd','pp','po','pc','pz','pq','pt','pu','pv','pw','px','py','pq','pk','pj','pl','pm','pn','pq','pf','pz','pv','pw','px','py','pq','pk','pj','pl','pm','pn','pq','pf','pz','pv','pw','px','py','pq','pk','pj','pl','pm','pn','pq','pf','pz','pv','pw','px','py','pq','pk','pj','pl','pm','pn','pq','pf','pz','pv','pw','px','py','pq','pk','pj','pl','pm','pn','pq','pf','pz','pv','pw','px','py','pq','pk','pj','pl','pm','pn','pq','pf','pz','pv','pw','px','py','pq','pk','pj','pl','pm','pn','pq','pf','pz','pv','pw','px','py','pq','pk','pj','pl','pm','pn','pq','pf','pz','pv','pw','px','py','pq','pk','pj','pl','pm','pn','pq','pf','pz','pv','pw','px','py','pq','pk','pj','pl','pm','pn','pq','pf','pz','pv','pw','px','py','pq','pk','pj','pl','pm','pn','pq','pf','pz','pv','pw','px','py','pq','pk','pj','pl','pm','pn','pq','pf','pz','pv','pw','px','py','pq','pk','pj','pl','pm','pn','pq','pf','pz','pv','pw','px','py','pq','pk','pj','pl','pm','pn','pq','ls','dd','nl','nk','df','wc', 'du'
);$valid = true;
foreach($blackList as $blackItem)
{if(strpos($_GET['start'], $blackItem) !== false){$valid = false;break;}
}if(!$valid)
{show_source(__FILE__);exit;
}// This will return output only for id and ps.
if (strlen($_GET['start']) < 5){echo shell_exec($_GET['start']);
} else {echo "Please enter a valid command";
}if (False) {echo $flag;
}?>
原环境中无写权限
若有写权限可参考
CTF中字符长度限制下的命令执行 rce(7字符5字符4字符)汇总
0x01 brain.md
可知flag.php在同目录下
只给四字符长度rce
最后一个echo $flag条件判定永远为false
只能通过得到flag
shell_exec($_GET['start']);
知识扩展
linux m4
GNU M4 是传统 Unix 宏处理器的实现
那么什么又是宏处理器呢
宏处理器
参考宏处理器与预处理器的区别
许多汇编语言支持“宏”功能,在此宏语句在被翻译成机器程序之前将被翻译成一系列汇编语言语句和可能的其他宏语句。因此,宏工具是一种文本替换能力。
它可以说明宏的效用,考虑这样一种情况,其中一台机器没有单个机器或汇编语言语句将一个内存地址的内容添加到另一个内存地址作为假设的汇编指令 ADD X, Y。相反,假设机器有一条指令 LOAD,将数据从内存移动到寄存器,一条指令 ADD,将内存地址的内容添加到寄存器的内容,以及一条指令 STORE,将数据从寄存器移动到内存。
通过使用这些指令,它可以使用宏定义创建“双地址添加”指令,如下所示 -
MACRO
ADD2 X, YLOAD YADD XSTORE Y
ENDMACRO
第一条语句将宏命名为 ADD2 并定义其伪参数,即形式参数 X 和 Y。
接下来的三个语句定义了宏,即它们给出了它的翻译。可以假设机器只有一个寄存器,所以没有问题 LOAD 和 STORE 指的是什么寄存器。它可以将 ADD2 用作普通的汇编语言操作代码。
用作文本替换工具
实例演示
https://blog.csdn.net/vc66vcc/article/details/77961964
直观地实操一下
一般的靶机中都不会安装该指令
所以只做基础示范
增加一下读取文件的姿势
so payload
/?start=m4 *
这篇关于[DefCamp CTF]para-code的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!