对字节限制的命令注入总结
今天刷到了对字节长度限制的命令执行题目,通过看一些视频和博客学习到一些小技巧,在这里总结一下: 这类题目会对命令执行的点进行字符数目限制,导致大多常见的命令都被过滤,这就需要深入了解一些linux的命令进行拼接,缩短字符的同时达到同样的效果
字符长度限制命令注入的技巧
trick1
先来了解一个命令 >xx 创建xx xx为执行命令,但是xx是一个能显示代码的命令,之后通过执行
*>x 将xx执行写到x文件。
举一个利用的例子:
>ls
*>a
这样访问a文件就能看到全部ls所得到的内容 或者:
>cat
flag
*
这种形式会直接得到cat flag的结果,如果在>cat和>flag之后再linux的命令行里输入echo *就会输出cat flag的字符,所以这里的 * 等于cat flag 利用这种拼接的方法可以把长命令分割达到缩短字符的作用
trick2
在上面命令组装的时候还有一个问题,就是 * 会按字母顺序来输出字符,这就导致一些命令执行顺序被打乱 比如:
>ls
-l
echo *
这里的回显是 -t ls,那这里就有了反序的需求
反序命令
首先还是用>创建两个文件l-和sl,这样顺序恰好满足需求,现在就考虑如何恢复正常的顺序来执行 把l -sl组合放入一个v文件,最后用一个命令将其反转即可 但是当前目录是存在三个文件的: l ,-sl,v 因为存在v如果直接使用*>v存入的命令就会使l -sl v,干扰了命令执行 这里的解决办法是使用dir命令 在创建完l- sl后执行>dir命令,此时文件夹下应该存在这三个文件: dir l- sl 但是dir渝澳dir a b>c只会将a b写到c中,所以此时再执行*>v,那么v文件里就只剩l- sl了,接下来只要将他反序就行了 反序用到的命令是rev,先>rev创建一个名为rev的文件,此时目录内的文件结构是: dir l- rev sl v 这5个文件,在>rev后执行*v就能将v里面的内容反序成 ls -l了
三位数限制
在比较极端的限制3位的命令执行时,可以使用nl命令 nl: 命令读取 File 参数(缺省情况下标准输入),计算输入中的行号,将计算过的行号写入标准输出。 在输出中,nl 命令根据您在命令行中指定的标志来计算左边的行。 payload:
>nl
*>a
之后再访问a也能得到目录下的文件 原理: 创建nl文件后,目录结构大致是这样: nl flag.txt robot.txt *>a就把nl flag.txt robot.txt的执行结果保存到a中
其他
从大佬的博客中还学到一种删除的思路
>rm
*>a
这个操作可以删除rm文件后面的文件,在一些特殊情况下可以使用