SQL注入
1、简述
web程序中对于用户提交参数没有过滤直接放到SQL语句中执行,打破了SQL语句逻辑,获取信息,执行命令等。
2、预防手段
1. 减少网站显示SQL错误信息,像类型错误,字段不匹配等,可以防止黑客获取相关信息;
2. 限制用户对于数据库的操作权限;
3. 对进入数据库的特殊字符进行转义处理或者编码转换;
4. 网站数据层进行编码统一;
5. 查询语句使用参数化查询接口;
6. 限制用户输入长度;
7. 确定数据库中数据类型。
3、SQL注入原理
• 从前端传给后端的参数内容是用户可以控制的
• 传入的参数是可以拼接到SQL语句中执行
4、SQL注入常规思路
1. 找注入点,手工或者web扫描工具实现
2. 通过注入点,获取有关数据库信息,像数据库用户名、数据库名称、数据库版本等信息
3. 猜测数据库表重要字段和内容,像存放管理员账户表名等
4. 通过获取的用户信息,进行登录
5、手工注入思路
1. 判断是否存在注入,注入是字符型还是数字型
2. 猜解 SQL 查询语句中的字段数 order by N
3. 确定显示的字段顺序
4. 获取当前数据库
5. 获取数据库中的表
6. 获取表中的字段名
7. 查询到账户的数据
6、SQL花式注入手段
• 延迟注入:属于盲注入,一般是某个注入点无法通过布尔型注入后去数据而采取的一种突破注入的技术手段,判断注入可以使用“and sleep(10)”让数据库延时10秒返回,网页响应至少需要10秒,根据这个原理判断存在SQL时间注入。例:select if(length(database())>1,sleep(5),0) 这个就是查询当前库大于 1 就会延时 5 秒执行。
• 堆叠注入:堆叠查询可以执行多条 SQL 语句,语句之间以分号(;)隔开,而堆叠查询注入攻击就是利用此特点,在第二条语句中构造要执行攻击的语句。在 mysql 里 mysqli_multi_query 和 mysql_multi_query这两个函数执行一个或多个针对数据库的查询。多个查询用分号进行分隔。他可以任意使用增删改查的语句,例如删除数据库 修改数据库,添加数据库用户。
• 二次注入攻击:在第一次进行数据库插入数据的时候,仅仅只是使用了 addslashes 或者是借助get_magic_quotes_gpc 对其中的特殊字符进行了转义,但是 addslashes 有一个特点就是虽然参数在过滤后会添加 “\” 进行转义,但是“\”并不会插入到数据库中,在写入数据库的时候还是保留了原来的数据。在将数据存入到了数据库中之后,开发者就认为数据是可信的。在下一次进行需要进行查询的时候,直接从数据库中取出了脏数据,没有进行下一步的检验和处理,这样就会