MSSQL 数据库注入的利用
内置函数
函数名 | 功能 |
---|---|
host_name() | 返回计算机名称 |
current_user | 返回当前数据库的用户名 |
db_name() | 返回当前数据库的名称 |
substring() | 字符串截取函数 |
char() | ASCII 转字符函数 |
isnull() | 判断查询是否为 null,有则替换 |
@@version() | 查看数据库版本 |
cast(text as type) | 字符类型转换,如果转换失败会 将 text 结果报错显示在页面上GOK |
object_id() | 根据表名返回数据库表ID |
object_name() | 根据 ID 返回数据库表名 |
col_name ( object_id , column_id ) | 返回指定表中指定字段(列)的名称 |
内置系统表
表名 | 功能 |
---|---|
Sysdatabases | 该表只保存在 master 数据库中,这个表中保存的是所有的库名。 主要字段有: name:数据库名。 |
Sysobjects | SQL Server 中的每个数据库内都有此系统表,存放着数据库所有的表名。 主要字段有: name,id,xtype分别是表名,表 ID,创建的对象。 当 xtype = ‘U’ 代表是用户建立的表 |
Syscolumns | 该表位于每个数据库中,存放着数据库所有的字段名。 主要字段有:name,id分别是字段名称,表 ID ,其中的 ID 是用sysobject得到的表的ID号 |
Oracle 数据库注入的利用
内置函数和常用函数
函数名 | 功能 |
---|---|
lenth() | 返回字符串的长度 |
count() | 返回在给定的选择中被选的行数 |
ascii() | 表示将字符转换为 ASCII 码 |
substr() | 返回值为源字符串中指定起始位置和长度的字符串 |
chr() | 表示将 ASCII 码转换为字符 |
sys.stragg() | 单行中获取所有行信息 eg:sys.stragg(username||'--') 用–作为分隔符 |
特殊表
表名 | 功能 |
---|---|
dual | 是一个虚拟的表,用来构成 select 的语法规则,oracle 保证 dual 里面永远只有一条记录。(万能表) |
user_tables | 该表的 table_name 列存放着当前数据库的所有表。 |
user_tab_columns | 该表的 column_name 存放着表的所有列 |
小结一下:
有时候,我们只能读取一行,我们需要用top进行过滤,那么举个例子:
http://192.168.200.128/artshow.aspx?id=7 and 1=(select top 1 name from sysobjects where xtype=0x75 and name not in(select top 24 name from sysobjects where xtype=0x75))
这里的top 24指的是前24行。事实上,我们读取的就是第25行的数据。
具体的注入方法查看前面两个博客。
sql注入之Get:
点击查看
sql注入之Bool盲注
点击查看