1月11日

ops/2025/1/15 22:40:31/

[WUSTCTF2020]CV Maker

可以看到有个注册页面,尝试注册一个用户登进去看看

进来后第一眼就看到文件上传,尝试上传,上传php后返回了

文件上传后端检测exif_imagetype()函数 

他提示不是image,也就是需要我们构造一个文件头为图像类型的php一句话木马。

加个文件头   GIF89  就可以了

然后源代码找到了文件上传后的路径

 使用蚁剑连接即可。

 [红明谷CTF 2021]write_shell

上来就代码审计

check函数,用于检测输入字符串是否包含危险字符或关键字。如果检测到 ', _, php, ;, ~, ^, +, eval, {, } 等字符或关键词,则输出 hacker!!! 并停止执行,否则返回输入。

waf函数,用于对输入进行 Web 应用防火墙(WAF)检测。如果输入是数组,则递归调用自身对每个元素进行检测,否则调用 check 函数进行检测。

根据用户的 IP 地址生成一个唯一的目录路径,路径格式为 sandbox/ 目录下的 IP 地址的 MD5 哈希值。如果 action 参数是 pwd,则输出生成的目录路径。如果 action 参数是 upload,获取 GET 请求中的 data 参数,调用 waf 函数对 data 进行检查,然后将 data 写入到指定目录中的 index.php 文件。

那么这个题就是利用file_put_contents函数写入木马。

php标签的php被过滤,可以换用短标签<?= code?>,至于;被过滤并不用单行,因为?>对于一组PHP代码中最后一句起到替代;的作用,所以我们可以构造如下payload:

?action=upload&data=<?=`ls`?>

然后再?action=pwd查看目录

可以发现成功执行了,那么接下来就查看根目录

?action=upload&data=<?=`ls%09/`?> 

查看flllllll1112222222lag的内容

?action=upload&data=<?=`cat%09/flllllll1112222222lag`?> 

这题主要有两个知识点 1.php短标签 2.php可在``中执行系统命令.

PHP 支持一个执行运算符:反引号(``)。注意这不是单引号!PHP 将尝试将反引号中的内容作为 shell 命令来执行,并将其输出信息返回(即,可以赋给一个变量而不是简单地丢弃到标准输出)。使用反引号运算符"`"的效果与函数shell_exec() 相同。

[GWCTF 2019]枯燥的抽奖

 可以看到题目要求我们猜到20位数,才能够得到flag。

但是出题人是给了源代码的。从前端跟到check.php可以看到后台代码

代码审计,涉及到随机数,mt_rand函数,这牵扯到一个安全问题。

1. 伪随机数
伪随机数是用确定性的算法计算出来的随机数序列,它并不真正的随机,但具有类似于随机数的统计特征,如均匀性、独立性等。在计算伪随机数时,若使用的初值(种子)不变,那么伪随机数的数序也不变。伪随机数可以用计算机大量生成,在模拟研究中为了提高模拟效率,一般采用伪随机数代替真正的随机数。模拟中使用的一般是循环周期极长并能通过随机数检验的伪随机数,以保证计算结果的随机性。伪随机数的生成方法有线性同余法、单向散列函数法、密码法等。

mt_rand就是一个伪随机数生成函数,它由可确定的函数,通过一个种子产生的伪随机数。这意味着:如果知道了种子,或者已经产生的随机数,都可能获得接下来随机数序列的信息(可预测性)。

所以:大致过程就明了了,我们根据已经给出的部分随机数,利用工具找出seed(种子),然后得到完整的随机数。

2. 将已知的部分伪随机数转化为php_mt_seed工具可以看懂的数据

str1 ='SZiQYsNmNK'
str2 = "abcdefghijklmnopqrstuvwxyz0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"
result =''length = str(len(str2)-1)
for i in range(0,len(str1)):for j in range(0,len(str2)):if str1[i] ==  str2[j]:result += str(j) + ' ' +str(j) + ' ' + '0' + ' ' + length + ' 'breakprint(result)

 输出的结果

54 54 0 61 61 61 0 61 8 8 0 61 52 52 0 61 60 60 0 61 18 18 0 61 49 49 0 61 12 12 0 61 49 49 0 61 46 46 0 61
3. 下载php_mt_seed工具并且使用

根据生成算法逆向出满足php_mt_seed工具要求的参数

下载连接:

php_mt_seed - PHP mt_rand() seed cracker

得到种子,同时要注意php版本是php7.1以上的。

得到完整的字符串

<?php
mt_srand(348806110);
$str_long1 = "abcdefghijklmnopqrstuvwxyz0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";
$str='';
$len1=20;
for ( $i = 0; $i < $len1; $i++ ){$str.=substr($str_long1, mt_rand(0, strlen($str_long1) - 1), 1);       
}
echo "<p id='p1'>".$str."</p>";
?>

PHP的mt_rand函数作为一个随机数生成工具在程序中被广泛使用,该函数用了 Mersenne Twister 算法的特性作为随机数发生器,它产生随机数值的平均速度比 libc 提供的 rand() 快四倍。mt_rand函数有两个可选参数 min 和 max,如果没有提供可选参数,mt_rand函数将返回返回 0 到 mt_getrandmax() 之间的伪随机数。例如想要 5 到 15(包括 5 和 15)之间的随机数,用 mt_rand(5, 15)。

常用的使用方式如下:

<?phpecho mt_rand() . "\n";echo mt_rand() . "\n";echo mt_rand(5, 15);?>

输出

160471601414786132786

详解看PHP mt_rand安全杂谈及应用场景详解 - FreeBuf网络安全行业门户 

 

 

 


http://www.ppmy.cn/ops/150122.html

相关文章

nginx反向代理和负载均衡的区别

1、反向代理&#xff0c;不需要服务器池&#xff0c;直接代理某台服务器 location / {proxy_pass http://192.168.18.201;proxy_set_header Host $host;proxy_set_header X-Forwarded-For $remote_addr; }proxy_set_header Host $host; …

安全容器服务未启动什么原因?

安全容器服务未启动什么原因&#xff1f;安全容器服务未启动可能由多种原因引起&#xff0c;主要包括代码或配置错误、资源限制、网络问题、存储问题、镜像问题以及权限和安全设置等。以下是UU云小编对安全容器服务未启动的几个常见原因及其解析&#xff1a; 首先&#xff0c;代…

数据结构-查找

查找表的基本概念 查找&#xff1a;在数据集合中寻找满足某种条件的数据元素的过程叫查找。 查找表&#xff08;查找结构&#xff09;&#xff1a;用于查找的数据集合称为查找表&#xff0c;由同一类型的数据元素组成。 静态查找表&#xff1a;若查找表只涉及搜索和插入操作&…

中间件 | RocketMq - [broker 配置]

INDEX broker.conf broker.conf 干货见注释 ### 集群名 brokerClusterNameDefaultCluster### nameserver # nameserver 地址 namesrvAddr192.168.3.76:9876### broker # broker名&#xff0c;同名则主从 brokerNamea-m # broker id&#xff0c;唯一 brokerId0 # borker 端口 …

Python----Python基础(字符串,列表,元组,字典,集合的总结)

一、字符串 str&#xff0c;基本用法&#xff1a;拼接&#xff0c;复制&#xff0c;长度&#xff0c;索引&#xff0c;切片&#xff0c;查找&#xff0c;替换&#xff0c;大小写转化&#xff0c;去除空格&#xff0c;填充&#xff0c;分割&#xff0c;判断&#xff0c;可变字符…

【大数据】机器学习-----最开始的引路

以下是关于机器学习的一些基本信息&#xff0c;包括基本术语、假设空间、归纳偏好、发展历程、应用现状和代码示例&#xff1a; 一、基本术语 样本&#xff08;Sample&#xff09;&#xff1a; 也称为实例&#xff08;Instance&#xff09;或数据点&#xff08;Data Point&…

Ubuntu问题 - 服务器有两个网卡, 且都可以上互联网, 但是希望设置优先级,优先使用某个网卡, 没有网络再切换到另一个网卡 (已实操成功)

需求: 操作系统: Ubuntu22.04两个可以联网的网卡, 且都连接到互联网上了, 希望根据优先级实现自动切换网卡上网以 root登录 或者使用 sudo 命令 开始 步骤 1&#xff1a;查看当前的网络连接 nmcli connection showNAME 是连接的名称&#xff08;如 Wired connection 1 或 有…

【物流管理系统 - IDEAJavaSwingMySQL】基于Java实现的物流管理系统导入IDEA教程

有问题请留言或私信 步骤 下载项目源码&#xff1a;项目源码 解压项目源码到本地 打开IDEA 左上角&#xff1a;文件 → 新建 → 来自现有源代码的项目 找到解压在本地的项目源代码文件&#xff0c;点击确定&#xff0c;根据图示步骤继续导入项目 查看项目目录&#xff…