首页
社区
课程
招聘
[原创]Babyfirst的分析和解答
发表于: 2017-12-24 15:12 4022

[原创]Babyfirst的分析和解答

2017-12-24 15:12
4022

之前写的一篇文章,现在发到看雪上面,希望和师傅们一起交流学习。

最近一直在研究和总结php中的序列化问题,发现php序列化的问题由来已久,除了在真实的php开源代码中会出现之外,如典型的Joomla远程代码代码执行,这种问题在ctf比赛中的也是备受青睐。本篇文章要讲的就是在hitcon上面的一道题目,其中也有对php 序列化的考察。

题目下载地址:github地址

首先是需要对HITCON类进行序列化

首先分析,提取到orange的密码。
payload为:

其中的%00并不是表示三个字符,表示得chr(0)一个字符,所以需要进行转换。转换的结果如图1。
转换的方式也非常的简单,直接将其中的%00使用hackbar进行urldecode即可。

最后进行提交的数据如下:

最终我们得到orange的密码是babytrick1234

在执行了show()方法之后,按照同样的方法来执行login()方法。
payload为:

转换之后的结果是:

转换之后进行URL编码然后提交,
但是结果显示的是:

仔细看代码,发现在login()方法中还存在如下的代码

之前猪猪侠在微博上面说过的话,就可以绕过这个检测。原话如下:

MYSQL 中 utf8_unicode_ci和utf8_general_ci两种编码格式,utf8_general_ci不区分大小写,Ä = A, Ö = O, Ü = U这三种条件都成立,对于utf8_general_ci下面的等式成立:ß=s,但是,对于utf8_unicode_ci下面等式才成立:ß = ss

所以在将mysql的编码设置为utf-8的时候,Ä = A, Ö = O, Ü = U,,左右两边的字符是可以相互替换的。这样就可以将0替换为Ö这样就可以绕过上面代码的检测,同时还可以能够正确地执行SQL语句。
我们通过如下的代码得到最终的payload:

所以最终的payload为:

然后进行提交,最后就可以得到flag了。
最终的结果为:

虽然这道题目是做出来了,但是其中还是存在一些问题没有搞清楚。

在做这道题目的过程中,遇到了一些奇奇怪怪的问题,也请教了很多人,自己也进行了很多的尝试,但是毕竟情况太过于少见,大神们也无法当面解决,所以问题还是没有得到解决。
看来有些问题也只有靠自己才能够解决了,也期待和师傅们一起交流学习。

博客的原文地址


[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)

收藏
免费 0
支持
分享
最新回复 (2)
雪    币: 203
活跃值: (53)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
2
你的第一篇文章,给优秀鼓励下。
2017-12-24 23:38
0
雪    币: 6818
活跃值: (153)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
不错!
2017-12-25 18:33
0
游客
登录 | 注册 方可回帖
返回
//