网站源码泄露,代码审计,SQL注入的万能密码使用,mt_rand
函数的伪随机数漏洞搭配php_mt_seed
工具使用,随机数特征序列的生成
www.zip
还真就下载了,里面只有一个index.php
文件login.html
,需要输入密码账户和私钥,验证通过会通过SQL语句将flag
回显出来。最后给出来了公私钥生成的代码,看见了老朋友mt_rand
函数 ([GWCTF 2019]枯燥的抽奖
),该函数存在伪随机数漏洞,只需要得到特征值,就能使用相应工具得到随机数种子,私钥也就很容易得到了
header('Content-type:text/html; charset=utf-8');
error_reporting(0);
if(isset($_POST['login'])){
$username = $_POST['username'];
$password = $_POST['password'];
$Private_key = $_POST['Private_key'];
if (($username == '') || ($password == '') ||($Private_key == '')) {
// 若为空,视为未填写,提示错误,并3秒后返回登录界面
header('refresh:2; url=login.html');
echo "用户名、密码、密钥不能为空啦,crispr会让你在2秒后跳转到登录界面的!";
exit;
}
else if($Private_key != '*************' )
{
header('refresh:2; url=login.html');
echo "假密钥,咋会让你登录?crispr会让你在2秒后跳转到登录界面的!";
exit;
}
else{
if($Private_key === '************'){
$getuser = "SELECT flag FROM user WHERE username= 'crispr' AND password = '$password'".';';
$link=mysql_connect("localhost","root","root");
mysql_select_db("test",$link);
$result = mysql_query($getuser);
while($row=mysql_fetch_assoc($result)){
echo "".$row["username"]." ".$row["flag"]." ";
}
}
}
}
// genarate public_key
function public_key($length = 16) {
$strings1 = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789';
$public_key = '';
for ( $i = 0; $i < $length; $i++ )
$public_key .= substr($strings1, mt_rand(0, strlen($strings1) - 1), 1);
return $public_key;
}
//genarate private_key
function private_key($length = 12) {
$strings2 = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789';
$private_key = '';
for ( $i = 0; $i < $length; $i++ )
$private_key .= substr($strings2, mt_rand(0, strlen($strings2) - 1), 1);
return $private_key;
}
$Public_key = public_key();
//$Public_key = KVQP0LdJKRaV3n9D how to get crispr's private_key???
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
分析代码
- 私钥的思路已经很清晰了,去寻找一下账户和密码是什么了,根据SQL语句的提示,账户为
crispr
,该SQL语句不存在任何过滤,是最基础的字符型SQL查询语句,密码直接使用万能密码就可以1' or 1=1 #
。账密已经分析得到,就下来就去拿下私钥了
- 通过查看公私钥生成代码,两个代码都没有设置随机数种子,那公钥使用
mt_rand
函数之后,随机数种子也就会固定下来,所以公私钥的随机数种子是一样的,代码还给出了公钥,所以只需要将公钥字符串转化成特征序列,使用php_mt_seed
工具进行爆破即可得到具体的随机数种子
- 后面的步骤和之前写的枯燥的抽奖步骤就很相似了,同一个代码同一个工具。使用下面的
python
代码即可得到特征序列。str2
就是生成的随机字符串 ,str1
是随机字符串生成的模板,将源代码的模板复制即可
str1='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789'
str2='KVQP0LdJKRaV3n9D'
str3 = str1[::-1]
length = len(str2)
res=''
for i in range(len(str2)):
for j in range(len(str1)):
if str2[i] == str1[j]:
res+=str(j)+' '+str(j)+' '+'0'+' '+str(len(str1)-1)+' '
break
print(res)
36 36 0 61 47 47 0 61 42 42 0 61 41 41 0 61 52 52 0 61 37 37 0 61 3 3 0 61 35 35 0 61 36 36 0 61 43 43 0 61 0 0 0 61 47 47 0 61 55 55 0 61 13 13 0 61 61 61 0 61 29 29 0 61
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 直接使用
php_mt_seed
工具对特征序列进行爆破,得到随机数种子,该随机数种子需要在php
版本5.2.1 -- 7.0.x
直接使用才行
- 找一个
php
在线运行的网站,可以修改php
版本在上面范围的,使用源代码的公私钥生成代码,只需要在最开始添加随机数字符串即可得到私钥。因为随机字符串相邻的输出结果不一样,所以还需要按照代码中的先生成公钥才能正确得到私钥
- 使用分析得到的账密和生成的私钥直接登录,登录成功之后页面回显
flag
,直接拿下
关键paylaod
随机数种子 = mt_srand(1775196155);
nuserame = crispr
password = 1' or 1=1#
私钥 = XuNhoueCDCGc
- 1
- 2
- 3
- 4
-
相关阅读:
DPU网络开发SDK——DPDK(十五)
并发bug之源(二)-有序性
JS 之 事件Event对象详解(属性、方法、自定义事件)
POC&EXP编写—EXP编写实战(1)
Kylin Desktop V10部署达梦数据库(DM8)
系统安装技能测试
开源大数据 Studio 应用开发: Apache Dolphinscheduler + Notebook
Allegro器件添加 no prob区域操作指导
竞赛 深度学习实现行人重识别 - python opencv yolo Reid
ubuntu安装和启动redis命令步骤及其配置文件redis.conf
-
原文地址:https://blog.csdn.net/m0_66225311/article/details/134018125
-
最新文章
-
C++11 线程同步接口std::condition_variable和std::future的简单使用
Go runtime 调度器精讲(十一):总览全局
Spring框架漏洞总结
Angular 18+ 高级教程 – 国际化 Internationalization i18n
基于Tauri2+Vue3搭建桌面端程序|tauri2+vite5多窗口|消息提醒|托盘闪烁
ComfyUI 基础教程(五) —— 应用 IP-Adapter 实现图像风格迁移
网络空间的“边水往事”?针对华语黑产及用户进行攻击的 APT-K-UN3 活动分析
伪装“黑神话悟空修改器”传播木马的活动分析
全球蓝屏后,微软决定将安全踢出Windows内核
Java读取寄存器数据的方法