无字母数字_$ webshell之命令执行

题解分析:

代码案例

当然,这道题的限制:

  1. webshell长度不超过35位

  2. 不包含字母数字,还不能包含$_

所以,如何解决这个问题?

  1. shell下可以利用.来执行任意脚本

  2. Linux文件名支持用glob通配符代替

第一点.或者叫period,它的作用和source一样,就是用当前的shell执行一个文件中的命令。比如,当前运行的shell是bash,则. file的意思就是用bash执行file文件中的命令。

. file执行文件,是不需要file有x权限的。那么,如果目标服务器上有一个我们可控的文件,那不就可以利用.来执行它了吗?

这个文件也很好得到,我们可以发送一个上传文件的POST包,此时PHP会将我们上传的文件保存在临时文件夹下,默认的文件名是/tmp/phpXXXXXX,文件名最后6个字符是随机的大小写字母。

  • *可以代替0个及以上任意字符

  • ?可以代表1个任意字符

那么,/tmp/phpXXXXXX就可以表示为/*/?????????/???/?????????

但我们尝试执行. /???/?????????,却得到如下错误:

这是因为,能够匹配上/???/?????????这个通配符的文件有很多

在执行第一个匹配上的文件的时候就已经出现了错误,导致整个流程停止,根本不会执行到我们上传的文件。

但是,我们发现文件都是小写

翻开ascii码表,可见大写字母位于@[之间

那么,我们可以利用[@-[]来表示大写字母

构造POC,执行任意命令

当然,php生成临时文件名是随机的,最后一个字符不一定是大写字母,不过多尝试几次也就行了。

最后,我传入的code为?><?=`. +/???/????????[@-[]`;?>

漏洞复现:

1.创建文件,一个php文件,一个存放shell命令的文件,一个html表单用于提交文件

2.Burpsuit抓包

3.将表单结构复制过去,并修改提交方式

因为我们需要提交这个文件,来获取临时文件,然后进行匹配执行

注意:这里需要将提交方式改成POST,GET没得临时文件

查看临时文件:

可以设置一个睡眠时间,然后在这期间可以取tmp下面看临时文件

如果在tmp下没有临时文件,可能是因为tmp目录下有其他目录,可以将其他目录删掉在试试。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值