用户输入的数据--->通过服务器系统--->到达web应用,执行相关的逻辑--->最后到数据库执行程序命令--->输出到页面又或者回到web应用,再执行相关逻辑,最后决定是否输出到页面
总之,有数据查询嫌疑的地方,就有可能存在注入!
登录页面常见的注入:
在密码处进行闭合,用or衔接,这样只要用户名在数据库中存在,就可以返回该用户的信息
例如:
' or '1'='1
完整版就是:
select * from users where user='username' and password='' or '1'='1'
举一反三:
只要是能表示逻辑结果的都可以,比如,1<2,2!=3,2+5=7,3*5=15,a=a等加减乘除,字符串相等。(mysql中a=A是真)
在用户名处进行闭合,用or衔接,这样只要密码在数据库中存在,就会返回该密码主人的信息
URL栏的get请求注入:
www.xxx.com/index.php?id=1
类似这样的,如果存在注入点,那么后台代码很可能没有引号。正常情况下,sql注入的对象分成三类:第一,数字型注入;第二字符型注入;第三,搜索型注入。
所以,可以变成:
id=1 order by 20
然后查看返回结果是否报错,同时利用二分法,可以知道目标的数据表中具体有有多少个字段。
接着,可以再手动输入:
id=1 union select 1,2,3,4,5,6,7
利用这种联合查询的方法,可以查出目标数据表中的字段数,甚至猜测出具体的字段名。
select 1,2,3,4,5 的意思就是在原有数据表的基础上,做临时字段查询,并且值都是这个值。比如现有字段name,age,那么select 1,2表示的就是name的值都变成1,age的值都变成2 。同理,如果此刻是select 1,2,3那么就会报错。因此,若是不用order by,利用select 1,2,3,4这样的方法,也是可以推断出字段的数量,并且猜测字段名。
网友评论