@addslashes()
在挖掘SQL注入漏洞时,只要参数在拼接到SQL语句前除非有宽字节注入或者其他特殊情况,否则使用了这个函数就不能注入了。
类似:mysql_[real_]escape_string()
@文件上传有可能含有sql注入漏洞,当文件名被保存到数据库时。
@PHP输出函数(xss)
print, print_r, ehco, printf, sprintf, die, var_dump, var_export
@截断问题
1.%00截断
由于php是C语言写的,在C语言中\0代表字符串结束,因此php中可用%00来截断。
在开启gpc的情况下不可使用
PHP 5.3 后修复了该问题
此外文件名中chr(128) - chr(255)都可以截断字符
2.利用多个句号(.)和反斜杠(\)截断
此方式不受gpc限制,但同样在PHP 5.3 后修复
Windows下240个连接的点(.)可以截断,同样点(.)加反斜杠(\)也是240个。
Linux下2038个\.组合才能截断
3.远程文件包含时可用'?'截断,不受gpc和php版本限制。
@php文件读取函数(文件读取漏洞)
file_get_contents(), highlight_file(), fopen(), readfile(), fread(), fgetss(), fgets(), parse_ini_file(), show_source(), file(),以及php://filter
@../跳过目录
?url=&q=../../1.php这样多加两个"../",把"&q="当成目录跳过
@代码执行函数
eval(), assert(), preg_replace(), call_user_func(), call_user_func_array(), array_map(),以及PHP动态函数($a($b))
@命令执行函数
system(), exec(), shell_exec(), passthru(), pcntl_exec(), popen(), proc_open()
@命令防注入函数
escapeshellcmd() 过滤字符,单双引号在不成对时被转义。
escapeshellarg() 将参数放在一对引号里,确保参数时字符串。
参数中的双引号会被删除,参数首尾的双引号变为空格,最后用一对双引号将参数包裹。
172.17.0.2" -v -d a=1"" => "172.17.0.2 -v -d a=1 "
注:两个函数同时使用容易出问题 传送门
@变量覆盖
1.extract()
2.parse_str()
3.import_request_variables() 在没有开启全局变量注册时,调用这个函数相当于开启了。
PHP4 - 4.1.0 和 PHP5 - 5.4.0可用
@问题函数
1.in_array() 会进行自动类型转换
2.is_nummeric() 当传入参数为hex时也可通过检测,而mysql中可以通过hex代替字符明文,可能存在整形sql注入。
3.== 和 ==== 落类型比较
4.strcmp()
int strcmp ( string $str1 , string $str2 )
参数 str1第一个字符串。str2第二个字符串。如果 str1 小于 str2 返回 < 0; 如果 str1 大于 str2 返回 > 0;如果两者相等,返回 0。
可知,传入的期望类型是字符串类型的数据,但是如果我们传入非字符串类型的数据的时候,这个函数将会有怎么样的行为呢?实际上,当这个函数接受到了不符合的类型,这个函数将发生错误,但是在5.3之前的php中,显示了报错的警告信息后,将return 0。
6.intval()
intval('2e4') = 2
'2e4'+1 = float(20001)
intval('2e4'+1) = 20001
you pass!
7.basename()
NO.3-10 [Zer0pts2020]Can you guess it?_nigo134的博客-CSDN博客
@sql报错注入函数
floor(), updatexml(), extractvalue(), GeometryCollection(), polygon(), GTID_SUBSET(), multipoint(),multilinestring(), multipolygon(), LINESTRING(), exp()
@windows FiindFirsFile
flag = f<<
@php可变变量
${@phpinfo()} '@'必须有,可替代字符:空格,TAB,/**/,回车,+,-,!,~,\ 等