乐趣区

代码审计小技巧

漏洞挖掘与防范

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 预编译

退出移动版