1.根据敏感关键字回溯参数通报过程(逆向追踪)
检讨敏感函数的参数,进行回溯变量,判断变量是否可控并且没有经由严格的过滤,这是一个逆向追踪的过程。
2.探求可控参数,正向追踪变量通报过程(正向追踪)

跟踪通报的参数,判断是否存入到敏感函数内或者通报的过程中具有代码逻辑漏洞。
3.探求敏感功能点,通读功能点代码(直接挖掘功能点漏洞)
根据自身履历判断在该运用中的哪些功能可能涌现漏洞。
4.直接通读全文代码
敏感函数回溯审计:
通读全文代码
例子:
php弱类型
1.比较符号
== 前辈行类型转化,再进行比较(弱比较)
=== 先比较类型,若类型不同直接返回不等(强比较)
Tips
Bool类型的true和任意字符串的弱类型相等
数字与字符串比较较,会将字符串转化为数字
若字符串以数字开头,则取开头数字作为转化结果,
若无则转化为0,若符合科学记数法的形式,则按照科学记数法来取
2.hash比较毛病
如果采取
== 运算符比较哈希值,会面临上面讲的弱类型比较的问题,
即任何以’0e’ 开头的字符串都相等!
常见的md5
运算后以’0e’开头的字符串有:
QNKCDZO
s878926199a
s155964671a
s1885207154a
s1836677006a
s1184209335a
3.md5 sha1函数毛病
当md5()函数与sha1()函数对参数进行加密处理时,
如果碰到一个数组,md5()函数会返回null
sha1()函数也是一样。
利用这个特性布局两个数组即可。
a[]=1即表示传入了一个数组
变量覆盖
1.parse_str导致的变量覆盖
parse_str( string KaTeX parse error: Expected 'EOF', got '&' at position 23: …_string[.array &̲result] )
parse_str() 函数用于把查询字符串解析到变量中,
如果没有result参数,则由该函数设置的变量将覆盖已存在的同名变量,
如果设置了第二个变量result
变量将会以数组元素的形式存入到这个数组,作为替代。
2.X-Forwarded-For绕过指定地址
HTTP头添加X-Forwarded-For:
3.strops数组绕过NULL与ereg正则%00截断
知识点补充:
PHP strops()函数
定义和用法:
strops()函数查找字符串在另一字符串第一次涌现的位置
注释:strops()函数对大小写敏感
该函数是二进制安全的
strpos(string,find,start)
1
数 描述
string 必需。规定要搜索的字符串。
find 必需。规定要查找的字符串。
start 可选。规定在何处开始搜索。
返回值: 返回字符串在另一字符串中第一次涌现的位置,如果没有找到字符串则返回 FALSE。注释:字符串位置从 0 开始,不是从 1 开始。
PHP 版本: 4+
ereg正则函数
字符串比对解析
int ereg(string pattern, string string, array [regs]);
1
本函数以 pattern 的规则来解析比对字符串 string。
比对结果返回的值放在数组参数 regs 之中,regs[0] 内容便是原字符串 string、regs[1] 为第一个合乎规则的字符串、regs[2] 便是第二个合乎规则的字符串,余类推。若省略参数 regs,则只是纯挚地比对,找到则返回值为 true。
方法一:
既假如纯数字
又要有’ #biubiubiu’
strpos()找的是字符串,那么传一个数组给它
strpos()出错返回null,null!==false,
以是符合哀求
以是输入nctf[]=
那为什么ereg()也能符合呢?
由于ereg()
在出错时返回的也是null,null!==false,
以是符合哀求
方法二:
字符串截断
利用ereg()的NULL截断漏洞,绕过正则过滤
?nctf=1%00%23biubiubiu
仿照演习训练:
1.
?password=1337a
1
2.
?name[]=1&passsword[]=2
1
解析:sha1()函数默认的传入参数类型是字符串,当传入数组时均会返回false,通过判断。
3.
?a=240610708或?a=s878926199a
————————————————
版权声明:本文为CSDN博主「4v1d」的原创文章,遵照CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/weixin_51213906/article/details/120042763