nssctf web 入门(5)

本文通过NSSCTF题单讲解web安全,涉及利用PHP代码漏洞获取flag,包括利用url错误编码绕过文件名过滤,以及通过上传phtml和php一句话木马文件来执行恶意代码。文章介绍了如何通过Apache的.htaccess文件配置执行PHP代码。
摘要由CSDN通过智能技术生成

这里通过nssctf的题单web安全入门来写,会按照题单详细解释每题。题单在NSSCTF中。

想入门ctfweb的可以看这个系列,之后会一直出这个题单的解析,题目一共有28题,打算写10篇。

目录

[鹤城杯 2021]EasyP

[SWPUCTF 2021 新生赛]easyupload1.0

 [SWPUCTF 2021 新生赛]easyupload2.0

 [SWPUCTF 2021 新生赛]easyupload3.0


[鹤城杯 2021]EasyP

[鹤城杯 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>

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

许允er

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值