天网系统服务器码,天网管理系统

d8622b20b9838a7c5873d6704fc8efff.png

打开链接后,嗯,光明正大的放出账号密码,肯定是登不进的,查看源代码

c51378dfdc0529cbf89be64c01d0a65c.png

看来是和md5碰撞有关的了,

PHP在处理哈希字符串时,会利用”!=”或”==”来对哈希值进行比较,

它把每一个以”0E”开头的哈希值都解释为0,所以如果两个不同的密码经过哈希以后,

其哈希值都是以”0E”开头的,那么PHP将会认为他们相同,都是0。

攻击者可以利用这一漏洞,

通过输入一个经过哈希后以”0E”开头的字符串,即会被PHP解释为0,

如果数据库中存在这种哈希值以”0E”开头的密码的话,他就可以以这个用户的身份登录进去,

尽管并没有真正的密码。

0e开头的md5和原值:

(加密后值为0)

s878926199a

0e545993274517709034328855841020

s155964671a

0e342768416822451524974117254469

我们随便选一个,将用户名改为s878926199a

39b50664c02a7ea51e8d0cea6072da94.png

将url改为该地址,进入后审计代码

$unserialize_str = $_POST['password'];

$data_unserialize = unserialize($unserialize_str);        #unserialize() 对单一的已序列化的变量进行操作,将其转换回 PHP 的值。

if($data_unserialize['user'] == '???' && $data_unserialize['pass']=='???') { print_r($flag); }

伟大的科学家php方言道:成也布尔,败也布尔。 回去吧骚年

1.需要构造序列化的password填入,代码意思是把post提交的password值经过"反序列化"得到一个数组,

要求数组里的user和pass都等于某个值时就打印flag。

2.bool类型的true跟任意字符串可以弱类型相等。因此我们可以构造bool类型的序列化数据 ,无论比较的值是什么,结果都为true。

序列化与反序列化:

把复杂的数据类型压缩到一个字符串中

serialize() 把变量和它们的值编码成文本形式

unserialize() 恢复原先变量

自己实践序列化函数

896108230d97999aba9ad7193a777b5e.png

68521b3cf41fdf8a6daae4223063bd07.png

从结果可以看出,要构造bool类型的序列化数据经过反序列化后为true,user和password的值应写成  "a:2:{s:4:"user";b:1;s:4:"pass";b:1;}",

最后我们将该值提交得到flag

3816bd39217eb0c4b713ac51d0274992.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值