这里通过nssctf的题单web安全入门来写,会按照题单详细解释每题。题单在NSSCTF中。
想入门ctfweb的可以看这个系列,之后会一直出这个题单的解析,题目一共有28题,打算写10篇。
目录
[SWPUCTF 2021 新生赛]easyupload1.0
[SWPUCTF 2021 新生赛]easyupload2.0
[SWPUCTF 2021 新生赛]easyupload3.0
[鹤城杯 2021]EasyP
<?php
include 'utils.php'; #包含utils.php
if (isset($_POST['guess'])) { #判断通过post方法获取的guess是不是空
$guess = (string) $_POST['guess']; #把post获取guess赋值给guess强制以字符串形式
if ($guess === $secret) { #判断guess的值是不是secret
$message = 'Congratulations! The flag is: ' . $flag; #把Congratulations! The flag is: 赋值给message也就是得到flag
} else {
$message = 'Wrong. Try Again'; #把Wrong. Try Again把message
}
}
if (preg_match('/utils\.php\/*$/i', $_SERVER['PHP_SELF'])) { #preg_match匹配是不是以utils.php结尾$_SERVER['PHP_SELF']用于获取当前执行的php脚本的文件名和路径
exit("hacker :)");
}
if (preg_match('/show_source/', $_SERVER['REQUEST_URI'])){ #通过preg_match匹配url中有没有show_source$_SERVER['REQUEST_URI']代表url中的路径和url值
exit("hacker :)");
}
if (isset($_GET['show_source'])) { #判断get获取的show_source是不是空
highlight_file(basename($_SERVER['PHP_SELF'])); #highlight_life将当前脚本输出到页面,basename用于获取文件的基础名称 即在/etc/index.php中basename会获取index $_SERVER['PHP_SELF']用于获取文件所在的目录和文件名即 获取/etc/index.php整个这里的路径文件为举例
exit();
}else{
show_source(__FILE__); #将当前脚本输出到页面
}
?>
这里前面通过判断guess和secret的值输出flag,因为没有secret的任何信息,我们判断使假信息,但是可以调用$flag,我们猜测flag在包含文件utils.php中,下面我们的想法就是输出utils.pho的代码内容,我们发现highlight_file(basename($_SERVER['PHP_SELF']));是输出当前目录的文件,也就是当$_SERVER['PHP_SELF的内容使utils.php的时候就会输出utils.php的代码,因为basename的存在所以utils.php会被读取成utils,符合highlight_file的语法,所以第一我们要在页面目录中指定成utils.php
但是因为过滤了当前文件不能以utils.php结尾,这里我们绕过方法hi是通过url错误编码绕过
如%99 %95 这种不存在的url编码,url编码是通过%和两个16进制数来表示的
还可以通过中文来绕过
这里我们就成功绕过了第一个,第二个问题是我们要传入show_source让他不为空,让 highlight_file(basename($_SERVER['PHP_SELF']));执行,这里绕过了show_source
这里我们要明白_代表连接符我们可以通过[和+这两个连接符绕过
得到flag
[SWPUCTF 2021 新生赛]easyupload1.0
[SWPUCTF 2021 新生赛]easyupload1.0
这里先随便上传发现对传入的大小有过滤,我们创建一个1.txt里面写上<>上传文件bp抓包,我这边就不开bp了
发现我们的包修改内容 <?php phpinfo(); ?>在修改1.jpg的后缀为1.php
这里我们想看看phpinfo 查看php开放的权限,在正常中能先访问phpinfo就先访问phpinfo会暴露配置信息,从中可以发现有没有存在漏洞如allow_url_include为on这种
在phpinfo中可以收集信息也可以试试直接搜索flag这里我们直接搜索出来了flag
[SWPUCTF 2021 新生赛]easyupload2.0
[SWPUCTF 2021 新生赛]easyupload2.0
与上一题一样
phtml文件.phtml
文件通常被用作模板文件,即包含 HTML 和 PHP 代码
所以我们可以修改后缀为phtml将0.phtml作为模板文件执行
[SWPUCTF 2021 新生赛]easyupload3.0
[SWPUCTF 2021 新生赛]easyupload3.0
那根据这个提示知道这里要传php一句话木马
这里我们通过尝试发现都不行
我们在头发现是apache 我们知道apache可有个.htaccess
.htaccess是一种配置文件,用于在apache服务器中进行设置
在.htaccress中存在系统指令,其中filesmatch用于在服务器上匹配请求的文件名或者文件类型
SetHandler application/x-httpd-php 是一个apache命令,他用于将内容作为php代码执行而不是纯文本
所以我们可以先传入一个一句话木马,以jpg格式成功上传,然后通过apache的.htaccess文件中的filesmatch找到木马图片,通过SetHandler application/x-httpd-php执行使.jpg文件以php文件执行
<FilesMatch "1.jpg">
SetHandler application/x-httpd-php
</FilesMatch>