web——备份是个好习惯(80)——Bugku

0×00 靶场链接

http://123.206.87.240:8002/web16/

 
0×01 题目描述

web——备份是个好习惯(80)——Bugku_第1张图片

web——备份是个好习惯(80)——Bugku_第2张图片

点进去就是一串字符串

 

0×02 解题过程

仔细看一下是一串字符串重复了两次,题目提示要看备份文件,用御剑扫一扫。

web——备份是个好习惯(80)——Bugku_第3张图片

点进去看看,没有变化

web——备份是个好习惯(80)——Bugku_第4张图片

然后搜索资料知道一般备份文件是以bak结尾的,就在后面加上.bak

web——备份是个好习惯(80)——Bugku_第5张图片

得到文件如下

代码的意思是,将get的两个参数中的key替换为空(这里可以用kekeyy绕过),需要key1和key2经过md5加密之后的值相等,但是他们本身又不能相等。

Md5中有一些开头时0e的字符串,0e在比较的时候会被看作科学计数法,无论后面是多少,因此比较的时候MD5转码都为0,即相等

大概有这些都是的

QNKCDZO

240610708

s878926199a

s155964671a

s214587387a

s214587387a

然后构造的时候随便取两个就完了

kkeyey1= 240610708&kkeyey2= QNKCDZO,等等,不能随便取!开头全部为s的好像就不行,这个注意下就好了,然后key关键字绕过其他样式都行,比如kekeyy

还有一个绕过方法是利用数组

md5()函数无法处理数组,如果传入的为数组,会返回NULL,所以两个数组经过加密后得到的都是NULL,也就是相等的。

于是构造payload:?kkeyey1[]=1&kkeyey2[]=2

出来的更加简洁了

web——备份是个好习惯(80)——Bugku_第6张图片

0×03 知识点

php弱类型

一共八种

标量类型:布尔boolean,整形integer,浮点float,字符string

复杂类型:数组array,对象object

特殊类型:资源resource,空null

因为是弱类型的语言,所以比较的时候无需看类型,只看值是否相等就可以了

其中

Php的一个数字和一个字符进行比较或者运算时,PHP会把字符串转换成数字再进行比较,PHP转换规则是,如果字符串以数字开头,那么就取开头的数字作为转换结果,如果无效就输出0.

Md5中有一些开头时0e的字符串,0e在比较的时候会被看作科学计数法,无论后面是多少,因此比较的时候MD5转码都为0,即相等

大概有这些都是的

QNKCDZO

240610708

s878926199a

s155964671a

s214587387a

s214587387a


 

你可能感兴趣的:(Bugku,web学习,php)