[CTF夺旗赛] CTFshow Web13-14 详细过程保姆级教程~

前言

​ CTFShow通常是指网络安全领域中的"Capture The Flag"(夺旗赛)展示工具或平台。这是一种用于分享、学习和展示信息安全竞赛中获取的信息、漏洞利用技巧以及解题思路的在线社区或软件。参与者会在比赛中收集"flag",通常是隐藏在网络环境中的数据或密码形式,然后通过分析、破解等手段找到并提交。CTFShow可以帮助人们了解最新的安全技术和挑战,同时也促进了安全知识和技术的交流。

Web13

1.首先,我们启动靶机,打开首页,发现这是一个文件上传页面。

2.根据我们的经验,我们下载一下备份文件进行一下代码审计upload.php.bak,在url中加入即可。

3.我们来对源码进行一下代码审计,我们发现$size > 24规定文件大小要大于24;strlen($filename)>9文件名长度要大于9;strlen($ext_suffix)>3后缀名的长度要大于3;preg_match("/php/i",$ext_suffix)后缀名要包含php;preg_match("/php/i",$filename)文件名包含php。

php 复制代码
<?php 
	header("content-type:text/html;charset=utf-8");
	$filename = $_FILES['file']['name'];
	$temp_name = $_FILES['file']['tmp_name'];
	$size = $_FILES['file']['size'];
	$error = $_FILES['file']['error'];
	$arr = pathinfo($filename);
	$ext_suffix = $arr['extension'];
	if ($size > 24){
		die("error file zise");
	}
	if (strlen($filename)>9){
		die("error file name");
	}
	if(strlen($ext_suffix)>3){
		die("error suffix");
	}
	if(preg_match("/php/i",$ext_suffix)){
		die("error suffix");
    }
    if(preg_match("/php/i"),$filename)){
        die("error file name");
    }
	if (move_uploaded_file($temp_name, './'.$filename)){
		echo "文件上传成功!";
	}else{
		echo "文件上传失败!";
	}

 ?>

4.那么知道了这些条件我们就要来构造文件了。首先我们来写一个配置文件.user.ini

​ 将其上传。

5.接着我们来写一个1.png

​ 将其上传。

6.上传之后我们来看一下有哪些文件/index.php?1=system("ls");

7.我们来查看一下可能会藏有flag的文件/index.php?1=highlight_file('903c00105c0141fd37ff47697e916e53616e33a72fb3774ab213b3e2a732f56f.php');发现果然在里面。

Web14

1.首先我们启动靶机,我们发现首页是一个php代码,我们可以来进行一下代码审计,会发现提示是在url中加参数c,并且对参数进行了一些限制。

php 复制代码
 <?php
include("secret.php");

if(isset($_GET['c'])){
    $c = intval($_GET['c']);
    sleep($c);
    switch ($c) {
        case 1:
            echo '$url';
            break;
        case 2:
            echo '@A@';
            break;
        case 555555:
            echo $url;
        case 44444:
            echo "@A@";
            break;
        case 3333:
            echo $url;
            break;
        case 222:
            echo '@A@';
            break;
        case 222:
            echo '@A@';
            break;
        case 3333:
            echo $url;
            break;
        case 44444:
            echo '@A@';
        case 555555:
            echo $url;
            break;
        case 3:
            echo '@A@';
        case 6000000:
            echo "$url";
        case 1:
            echo '@A@';
            break;
    }
}

highlight_file(__FILE__); 

2.这个时候我们就来测试一下,?c=3,发现爆出了一个php,访问一下看看。

3.我们访问一下here_1s_your_f1ag.php发现这是一个查询框并且带有弹窗回显,那么很明显说明这里是一个sql注入漏洞。

4.既然是sql注入漏洞,那么思路就很简单了,首先我们来测试列数,当我们输入1 order by 1时我们发现没有弹窗,这里有可能是某些字符被过滤掉了,我们将空格换为/**/,输入1/**/order/**/by/**/1发现有弹窗有回显,但是当我们输入1/**/order/**/by/**/1的时候我们发现就有弹窗但无回显了,说明列数为1。

5.知道了列数为1之后,我们就来去数据库中找了,首先我们先来找到数据库名。-1/**/union/**/select/**/database(),发现数据库名为web。

6.知道了数据库名我们就要找表名和列名了,这里就不多赘述了,但是当我们找到列名的时候我们发现flag不在这里!?query=0/**/union/**/select/**/group_concat(1,2,3)/**/from/**/(select/**/1,2,3/**/union/**/select/**/*/**/from/**/content)x同时它给了我们一个提示就是在secret中。

7.我们来到secret.php中,发现并看不了,我们想到是否能用load_file()来查看呢,url中输入?query=-1/**/union/**/select/**/load_file('/var/www/html/secret.php'),果然我们Ctrl+U一下发现了端倪。

8.所以real_flag_is_here。我们再次输入?query=-1/**/union/**/select/**/load_file('/real_flag_is_here'),然后再看一下,成功找到了flag。

相关推荐
2401_857636395 分钟前
宠物咖啡馆在线体验:SpringBoot技术的应用
spring boot·php·宠物
三掌柜6661 小时前
2024三掌柜赠书活动第三十二期:渗透测试理论与实践
网络·安全·web安全
Xerale1 小时前
Laravel Admin 中的 “Array to String Conversion“ 问题及其解决方法
前端·数据库·笔记·php·laravel
不是二师兄的八戒2 小时前
解析文件(支持 TXT、PDF、JPG、PNG、DOCX),并提取体检数据中的数值
java·php
小小锐学网安2 小时前
pikachu靶场总结(三)
计算机网络·安全·web安全·系统安全
dot.Net安全矩阵4 小时前
.NET内网实战:不安全的系统令牌特权
前端·windows·安全·web安全·microsoft·.net·交互
夜色呦5 小时前
Spring Boot实现新闻个性化推荐
服务器·spring boot·php