web基础题型
查看源码
1、Crtl+u
2、url前面加上 view-source:
3、打开开发者工具:F12(如果自带热键的话Fn+F12) 或 Ctrl+Shift+I
PHP.erge()函数%00截断漏洞
erge()用途
用指定的模式匹配一个字符串中指定的字符串,如果匹配成功则返回true,否则返回false。搜索字母的字符是大小写敏感的。可选的参数规则包含一个数组的所有匹配表达式,它们被正则表达式的括号分组。
ereg(“^[0-9]+$“,$_GET[‘password’])===true#保证参数全是数字
strpos($_GET[‘password’],’admin’) #查找admin第一次在参数中出现的位置
可以构造payload
?password=111%00admin #因为ereg函数%00截断
PHP.sha1()函数漏洞
PHP在处理哈希字符串时,会利用”!=”或”==”来对哈希值进行比较,它把每个以”0E”开头的哈希值都解释为0,所以如果两个不同的密码经过哈希以后,其哈希值都是以’0E’开头的,那么PHP会认为它们是相同的,都是0.
常见的sha1后以0E开头的值有aa3OFF9m、aaroZmOk、aaO8zKZF
弱类型问题
=== 在进行比较时,会先判断两种字符串类型是否相等,再比较
== 在进行比较时,会先将字符串类型转化为相同,再比较
如果比较一个数字和一个字符串或者比较涉及到数字内容的字符串,则字符串会被转换成数值并且按照数值来进行
1 |
|
字符串转换成数字规则(从几个例子中总结规则)
123admin -> 123
123a1233 -> 123
admin -> 0
来个例题试一下
POST传参messgae={“key”:0} ,因为$key是字符串,当它和数字比较会转换为数字,我们不妨猜测它不是数字开头的,拿到flag
再思考,如果这个$key以数字开头怎么办,那就抓包然后用burpsuit爆破它就可以了(或者用requess模块写脚本)
Md5绕过
1、
1 |
|
取a、b为任意两个md5值以0e开头的原值即可
常见的MD5碰撞:md5值为0e开头_烟雨天青色-CSDN博客_md5值0e开头
2、
1 |
|
让a、b为数组(数组的md5值为NULL)
null === null , md5(array) => null
a=[1,2]
b=array(0=> ‘abc’) //没有别的意思,只是生成数组的一个函数
$_GET[x]
?a[]=xyz //这样就传入一个数组了
?a[]=xyz & b[]=asd & c[]=wu //用&连接符
3、
1 |
|
现在用数组就不行了,md5碰撞,因为md5的值总数是有限的,所有会有不同的数md5值相同
视频链接,我是跟着这个视频学的