Web-CTF-入门

本文最后更新于:2024年4月20日 晚上

PHP弱类型

=== 在进行比较的时候,会先判断两种字符串的类型是否相等,再比较

== 在进行比较的时候,会先将字符串类型转化成相同,再比较

如果比较一个数字和字符串或者比较涉及到数字内容的字符串,则字符串会被转换成数值并且比较按照数值来进行

==是不严格的等号

1
2
3
4
5
6
7
8
123abc 会转成:
123(后面的就都舍弃了)

123a1231231321 会转成:
123

abc 会转成:
0
1
2
3
4
5
6
7
<?php
var_dump("admin" == 0);//true
var_dump("1admin" == 1);//true
var_dump("admin1" == 1)//false
var_dump("admin1" == 0)//true
var_dump("0e123456" == "0e4456789");//true,e理解为科学计数法,0*e的n次方=0
?>

哈希(md5)绕过问题

MD5 值就是一串 128 bit 的数据。

MD5 的核心是通过算法把任意长度的原始数据映射成128 bit 的数据

MD5 的特点:

不可逆性 --- 根据 MD5 值计算不出原始数据

唯一性 --- 不同原始数据会有不同的 MD5 值 (不完全可靠,后面说)

一般MD5值是32位由数字“0-9”和字母“a-f”所组成的字符串(字母大小写均可)

第一关 登录的哈希验证

1
2
3
$a != $b
Md5($a) == md5($b)
'0e545993274517709034328855841020' == '0e342768416822451524974117254469' //true
1
2
3
4
5
6
7
常用的 MD5 碰撞有:
原值 MD5
QNKCDZO 0e830400451993494058024219903391
s878926199a 0e545993274517709034328855841020
s155964671a 0e342768416822451524974117254469
s214587387a 0e848240448830537924465865611904
s878926199a 0e545993274517709034328855841020

第二关 登录的哈希验证 v2

1
2
3
4
5
6
7
8
9
$a != $b
Md5($a) === md5($b)

//不能用弱类型了,但是可以用类型的污染

null === null
md5(array) -> null

XXXXX.com/?a[]=1&b[]=2

第三关 登录的哈希验证 v3

1
2
3
4
(string)$a != (string)$b
md5($a) === md5($b)

md5碰撞 两个不同的东西拥有相同的md5:

MD5碰撞的一些例子 - 简书 (jianshu.com)

一些拓展:

1
2
$md5 == md5($md5)  可以看成$a == md5($a) 
需要一个md5md5(md5)都是θe开头
md5 == md5(md5)
1
2
$a == md5(md5($a))
a = 0e1138100474
1
2
$numPositive = intval($num) //intval() 函数用于获取变量的整数值。
$numReverse = intrval(strrev($num)) //strrev() 函数反转字符串。

如果我们要求一个数字满足

①numPositive 等于 num,要求是一个整数(但是这样的话就不能满足②

②numPositive 等于 numReverse 并且 num 不是回文序列:这里可以100.0010

所以我们可以用浮点精度来绕过,

1
2
3
4
5
<?php
var_dump(1.000000000000001 == 1); //false
var_dump(1.0000000000000001 == 1); //true
var_dump(1.0000000000000001 === 1); //false
?>

num = 10000000000000000000.000000000000000000010

变量覆盖

1
2
3
4
用传参的值替换掉原有变量的值
Extract()
Parse_str()
Import_requests_variables()//deprecated in php>=5.4.0

随机数问题

1
2
3
Mt_rand()种子
mt_rand()函数用于生成随机数
mt_srand(seed)给随机数发生器播种

爆破——死板,100题遇不到1题

[GWCTF 2019]枯燥的抽奖 | NSSCTF

无需爆破:

无需暴破还原mt_rand()种子-安全客 - 安全资讯平台 (anquanke.com)

遇到种子有时间限制的时候

参考:

CTF-WEB:PHP 弱类型 - 乌漆WhiteMoon - 博客园 (cnblogs.com)


Web-CTF-入门
http://viper2383.github.io/2024/04/19/Web-CTF-入门/
作者
w1per3
发布于
2024年4月19日
许可协议