值得思考的奇技淫巧

目录

EVAL长度限制突破技巧

Linux命令长度限制突破方法

无字母数字的Webshell构造技巧


EVAL长度限制突破技巧

PHP Eval函数参数限制在16个字符的情况下 ,如何拿到Webshell?

<?php
$param = $_REQUEST['param']; If (
strlen($param) < 17 && stripos($param, 'eval') === false && stripos($param, 'assert') === false
) {
eval($param);
}

方法一:

解释:``在liunx下是可以执行代码,就是执行get获取1的参数给param,并输出,但是这里1等于id,其实就是获取id的参数,这里的数字可以是1也可以其他数字

方法二:

注释:获取一个file_put_contents, N:要写的文件名,P:一句话木马的base64编码

8:表示追加 ,在PHP的底层c语言写的file_put_contents函数时,发现c语言追加是8

根据官方文档:如果是 file_put_contents(N,D,APPEND)将超出17个字符,无法满足小于17的条件

方法三

回调后门的本质就是有两个参数,其中一个一定要是函数,而另一个是函数运行的参数,就是一个命令执行的函数

Linux命令长度限制突破方法

这个函数相当于可以执行shell的命令,

方法一:我直接使用shell命令就可以输出

方法二:

W是一个登录的命令,可以看到用户登录的情况

但是这里可以使用w,也可以不使用

在里面一点一点写

最后生成一个c.php

无字母数字的Webshell构造技巧

php7之后可以使用($a)();来执行php代码

('phpinfo')();

很明显是支持的

但是如果直接这样输:('phpinfo')();是肯定不行,英文识别不了,是不可见字符,需要转换为用url编码表示

(~%8F%97%8F%96%91%99%90)();     //~是取反的意思

这里需要改成php5的版本

相关命令

apt-get install -y php5.6     下载php5.6版本
update-alternatives --config php   切换php版本

apt-get install -y php5.6-fpm       下载php5.6-fpm 

find / -name www.conf     查看是否有php5.6-fpm

现在是要生成一个临时文件名,然后去获取这个临时文件名,但是要怎么获取呢?

在liunx下,临时文件是随机的,不过通过观察发现,文件的最后一个字母是大写字母,区别liunx文件

设置睡眠时间过长可以方便后续获取临时文件

上传一个txt文件,在liunx下会生成一个临时文件

我上传了两次,会发现有两个不同名字的临时文件,内容是一样的

不过上传改成了就会被删除

现在需要考虑如何不要用数字字母获取临时文件呢?

第一个:通过发现临时文件,可以发现最后一个字母是大写,虽然第二次提交是小写,但是通过最后字母是大写,总是能匹配上,而在liunx文件最后一个字母没有大写,

第二个:临时文件产生随机数是9位

根据liunx glob通配符规则,可以过滤查找到临时文件

ls -al /???/????????[@-[]

解释: 查找/tmp/phpV2ssPI, 

?匹配任意单个字符,[@-[]:匹配大写字母

分析到这里,已经有一个很明确的思路了,通过这种方法去获取临时文件

接下来,我们将写的上传文件的HTML文件路径改为上传到bb.php,然后使用buresuit抓包,填写参数,去匹配到我liunx的临时文件,让临时文件内容去当作liunx的命令执行

最终执行成功

解释

POST /bb.php?code=?><?=`.+/%3f%3f%3f/%3f%3f%3f%3f%3f%3f%3f%3f[%40-[]`%3b?>

通过post方式传递到bb.php,?表示输出code=  ?>是为了闭合我bb.php的<?符合,反斜号在liunx是一个执行命令,执行反斜号包含的内容,+这里是空格,如果就空格会截断后面的内容,在urlcode编码里,?是%3f,@是%40,;是%3b,如果不转换是识别不了的

注意:我开始是一直匹配不到临时文件,后面发现是临时文件的名字随机产生,长度不一定固定,有时候最后一个字母也不一定是大写,要多上传几次,总会匹配成功,同时,可以把之前的临时文件或者没有文件的临时文件删除,避免影响匹配。

  • 17
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值