代码审计小技巧

漏洞挖掘与防范

SQL注入漏洞

1.搜索关键字如select from、update、insert、deletemysql_connectmysql_querymysql_fetch_now等关键字可定向挖掘SQL注入漏洞。

宽字节注入

2.urlencode、urldecode、rawurlencode、rawurldecode区别。使用不当可导致宽字节注入。
除了 -_. 之外的所有非字母数字字符都将被替换成百分号(%)后跟两位十六进制数。
urlencoderawurlencode的区别:
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

intval(将变量转换为int类型)–主要是利用参数白名单

PDO prepare预编译

评论

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

这个站点使用 Akismet 来减少垃圾评论。了解你的评论数据如何被处理