花了一个多小时列了一下自己后面的清晰规划
想实现所谓理想就要有干劲,一字卷,打打鸡血,压榨一下自己
php太多了,至少CTF里几乎都是,有点消化不了
一、知识点
PHP特性
CMS代码审计
过滤函数 缺陷绕过
二、php部分内置函数(检测过滤对比)
1、==和===
= 赋值
== 弱类型比较(仅值相等)
=== 强类型比较(先判断类型再判断值)
2、MD5比较漏洞
MD5生成哈希值,用于验证
弱比较:0e开头看做科学计数法
强比较:数组输入返回NULL
num[]=1 passwd[]=2 NULL
0e开头的md5和原值:
QNKCDZO
0e830400451993494058024219903391
240610708
0e462097431906509019562988736854
s878926199a
0e545993274517709034328855841020
s155964671a
0e342768416822451524974117254469
s214587387a
0e848240448830537924465865611904
s214587387a
0e848240448830537924465865611904
s878926199a
0e545993274517709034328855841020
s1091221200a
0e940624217856561557816327384675
s1885207154a
0e509367213418206700842008763514
s1502113478a
0e861580163291561247404381396064
https://blog.csdn.net/qq_38603541/article/details/97108663
3、intval()
提取变量整数值 intval(a,b) 获取a的整数值
默认十进制 如果加上了b=0 则检测a的格式 十六进制就是0x开头 八进制就是0开头
CTF中防御把注入语句转换为整数
https://www.runoob.com/php/php-intval-function.html
绕过:abc123=0 就是进制转换 注意进制就可以
4、strpos()
从0开始,返回子串首次出现位置,未找到返回false,大小写敏感
strpos(a,b)是b在a中第一次出现的位置 空格也算一个字符
https://www.runoob.com/php/func-string-strpos.html
绕过:换行(%0a,\n) 空格(%20)绕过
5、in_array()
数组中搜索,转换为数字,in_array(a,b,c)在数组a中搜索b值,并输出一些文本 ,b可以是一个变量
关键在于c是否被设置?true就难绕
c未设置就是==
c设置为true 则是===
https://www.runoob.com/php/func-array-in-array.html
弱类型绕过:a写为1 and 2=2 和1shell都会被转化为1
或者a=true和1e0
6、preg_match()
正则,最烦人的来了,我要疯了
preg_match(a,b,c):根据a这个正则表达式的规则,从b中搜索,存入c这个数组中,一般b都是传入的参数
参数:
i 不区分大小写
\d{3} 匹配3位数
^ 匹配开头
\$ 匹配结尾
m 多行模式,改变^和\$,使其匹配每行的行首行尾 /^line/m
s 单行模式,使.号匹配所有字符,包括换行符\n
x 忽略正则中的空白和注释

绕过:
(1)数组绕过返回false,b=select[] * from users
(2)换行符绕过,preg_match("/^admin/", $_GET['user']
适用场景:正则包含起始锚点 ^,锚点^匹配行首为%0a,随后匹配第二行admin
(3)大小写绕过,输入大小写混合就行
(4)多行模式绕过,preg_match("/exit/", "ex\ni\nt");
(5)空字符绕过,preg_match("/\.php$/", "shell.php%00.jpg");
过滤所有数字字母
preg_match("/[A-Za-z0-9]+/",$code)
/
非字母数字及长度
if(!preg_match('/[^a-zA-Z0-9_]/', $_POST['nickname']) || strlen($_POST['nickname']) > 10)
/
大概率是jsfuck代码,直接复制该代码,然后再控制台执行,可能会有所收获。
[][(![]+[])[+[]]+([![]]+[][[]]))
实在太多了,绕过也都很难,异或什么的,我记得要跑脚本,考到再专门研究吧。
7、str_replace()
str_replace(a,b,c) 在c中把a替换成b
缺陷是无法迭代 双写绕过即可
本来今天还想看一个JAVA,结果写计划和急着去gym放弃了(其实主要原因是这些函数好绕。。。)
Comments NOTHING