漏洞挖掘及SQL注入漏洞防范1、搜索selectfrom、update、insert、delete、mysql_connect、mysql_query、mysql_fetch_now等关键字,有针对性地挖掘SQL注入漏洞。宽字节注入2.urlencode、urldecode、rawurlencode、rawurldecode的区别。使用不当会导致宽字节注入。除-_之外的所有非字母数字字符。替换为百分号(%)后跟两个十六进制数字。urlencode和rawurlencode的区别:1)urlencode把空格编码成加号(+)2)rawurlencode把空格编码成加号(%20)payload:.../1.php?id=1df%'unionselect1,database()#'单引号自动转义,前面加/'---经过urlencode洗礼,为5c%php连接数据库时如果设置了setcharacter_set_client=gbk,就是告诉mysql服务器客户端数据source如果是GBK格式,那么df%5c%会被解码成汉字。宽字节注入搜索关键字SETNAMES,character_set_client=gbk,mysql_set_charset('gbk')二次urldecode注入payload:%2527%25解码为%,再次解码%27结果为'(单引号)原理是也就是说当这里使用了urldecode()或者rawurldecode()函数的时候,当我们向WebServer提交参数的时候。WebServer会自动解码一次。然后在函数的第二次解码之后。生成单引号触发注入。这两个功能的关键字可以搜索定位。防范措施——functiongpcandaddslashes如果magic_quotes_gpc=On(php6以上没有这个选项),PHP解析器会自动为post、get、cookie的数据加上转义字符,类似于functionaddslashesfunctionmysql_[real_]escape_stringfunction(php4.0.3版本后才有)功能是对特殊字符进行转义,包括:\x00\n\r\'"\x1aintval(变量转int类型)--主要使用参数whitelistPDO准备预编译函数文件上传move_uploaded_file($temp_file,$img_path)trim($file_name)#去除字符串两边的空白字符或其他预定义字符strrchr($file_name,'.')#return'.'出现在$file_name末尾的位置到$file_name字符串的末尾strtolower($name)#转换为小写str_ireplace('a','',$name)#$name中的'a'/'A'(不区分大小写)替换为''(即删除)in_array($name,$array)#查询$name是否在$array中substr($string,$start,$length)#$start(0,-1),都是从左到右strrpos($name,'.')#返回最后一次出现的'.'在$name字符串中(从0开始)fopen($filename,"rb")#以二进制只读方式打开$filenamefread($filbit,2)#只读两个字节unpack("C2chars",$bin)#将bytes转为byte二进制数组intval($strInfo['chars1'].$strInfo['chars2'])#intval函数是提取整数(参数包括字符串和整数)getimagesize($filename)#检测图片类型,返回一个大批。不是绝对安全,可以绕过image_type_to_extension('int')#返回后缀名,参数范围可以参考getimagesize函数返回结果索引3stripos($name,'.')#返回第一次出现的'。'在$name字符串中的位置(从0开始)#获取文件名后缀:第一种方法:strtolower(substr($_FILES[$n]["name"],strrpos($_FILES[$n]["name"],'.')+1))方法二:$uptype=explode(".",$_FILES["file"]["name"]);//获取扩展名$kuozm=strtolower(end($上型));
