漏洞挖掘与防范
SQL 注入漏洞
1. 搜索关键字如 select from、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%'union select 1,database()#' 单引号自动转义在前面加了 /'--- 经过 urlencode 洗礼后也就是 5c%
如果 php 连接数据库的时候设置了 set character_set_client=gbk, 就是告诉 mysql 服务器 客户端 数据来源是 GBK 格式
这时 df%5c% 会被 decode 成一个汉字。
宽字节注入搜索关键字SET NAMES、character_set_client=gbk、mysql_set_charset('gbk')
二次 urldecode 注入
payload:%2527
%25 进行解码后为 % 再次解码 %27 结果为 '(单引号)
原理是当某处使用了 urldecode()
或者 rawurldecode()
函数,当我们提交参数到 WebServer 的时候。WebServer 会自动解码一次。然后在经过函数的二次解码。生成单引号引发注入。
可以搜索这两个函数的关键词进行定位。
防范措施 – 函数
gpc 和 addslashes
如果 magic_quotes_gpc=On(php6 以上没有此选项)
PHP 解析器就会自动为 post、get、cookie 过来的数据增加转义字符,和函数 addslashes 功能差不多
mysql_[real_]escape_string 函数
(php4.0.3 版本以上才存在)
作用是转义特殊字符,包括:
\x00
\n
\r
\
'
"
\x1a