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

1月11日

[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 + ' '
            break


print(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)。

常用的使用方式如下:

<?php

echo mt_rand() . "\n";

echo mt_rand() . "\n";

echo mt_rand(5, 15);

?>

输出

1604716014

1478613278

6

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

 

 

 


http://www.kler.cn/a/501350.html

相关文章:

  • 超简单,使用Kube-Vip实现K8s高可用VIP详细教程
  • 通信与网络安全之网络连接
  • 31_搭建Redis分片集群
  • 下载并安装MySQL
  • Python实现windows自动关机
  • 记录一次电脑被入侵用来挖矿的过程(Trojan、Miner、Hack、turminoob)
  • JuiceFS 2024:开源与商业并进,迈向 AI 原生时代
  • MVC执行流程
  • 如何将文件从 C 盘传输到 D 盘/移动硬盘
  • 【MySQL数据库】基础总结
  • TCP/IP 前传:破晓与传奇
  • 基于单片机的公交车报站系统设计
  • windows:下RabbitMQ安装后,无法进入web管理页面
  • 青少年编程与数学 02-006 前端开发框架VUE 22课题、状态管理
  • 基于大语言模型的组合优化
  • 【Java 学习】Java的生命之源:走进Object类的神秘花园,解密Object类的背后故事
  • go语言学习(数组,切片,字符串)
  • ES6的高阶语法特性
  • OpenCV相机标定与3D重建(51)对 3x3 矩阵进行 RQ 分解(RQ Decomposition)函数RQDecomp3x3()的使用
  • Oracle Dataguard(主库为双节点集群)配置详解(3):配置主库
  • 《零基础Go语言算法实战》【题目 2-16】接口的实现
  • PCL 连通域点云聚类
  • Web开发中页面出现乱码的解决(Java Web学习笔记:需在编译时用 -encoding utf-8)
  • 为AI聊天工具添加一个知识系统 之27 支持边缘计算设备的资源存储库及管理器
  • 【YashanDB知识库】崖山BIT类型对MYSQL兼容问题
  • 接口测试之测试原则、测试用例、测试流程