当前位置:首页 > 问答 > 正文

想知道网站后台数据库啥玩意儿?教你几招轻松识别和破解方法

(引用来源:部分思路参考自网络安全爱好者社区讨论及部分公开的渗透测试教程)

想知道网站后台数据库啥玩意儿?教你几招轻松识别和破解方法

你是不是有时候会好奇,一个网站到底是怎么运作的?那些用户信息、商品数据、文章内容都存放在哪里?没错,绝大多数都躺在网站的后台数据库里,这个数据库就像是网站的大脑和记忆库,非常重要,我们这里说的“识别”和“破解”,主要是出于学习和技术好奇的目的,帮助你理解网站的安全机制,可千万别拿去干坏事,那是违法的哦。

我们得先“识别”出网站用的是哪种数据库,不同类型的数据库,探查和交互的方式会有点不一样,这就像你要开锁,总得先看看是哪种锁芯吧。

想知道网站后台数据库啥玩意儿?教你几招轻松识别和破解方法

第一招,看错误信息,这是最简单粗暴但也常常有效的方法,你可以故意在网站上做一些错误的操作,比如在登录框里输入一些奇怪的符号,或者访问一个根本不存在的页面(www.xxx.com/xxx.php?id=1000000),如果网站比较“耿直”,没有对错误信息进行友好处理,它可能会直接返回一串报错信息,这串信息里可能就包含了数据库的类型和版本。

举个例子,如果你看到错误信息里有“MySQL”字样,MySQL Error: ...”,那不用说,肯定是MySQL数据库,如果看到“ORA-”开头的错误代码,那很可能是Oracle数据库,要是看到“SQLite”、“PostgreSQL”这些关键词,那也就对上号了,这种方法成功率不是百分百,因为现在稍微正规点的网站都会把错误信息隐藏起来,给你一个“404 Not Found”或者“系统繁忙”的友好提示,让你啥也看不到。

第二招,看网站的URL参数,有些网站,特别是比较老的网站,它的网址(URL)里会带着参数,看起来像这样:news.php?id=123,这个“id”就是一个参数,你可以试着在这个参数后面动点手脚,在数字123后面加个单引号,变成 news.php?id=123',如果页面报错了,并且错误信息里提到了“SQL”,那基本可以断定这个网站存在一个叫做“SQL注入”的漏洞,而且通过错误信息有时也能判断数据库类型,如果是MySQL,对单引号比较敏感;如果是Access数据库,报错方式可能又不一样。

想知道网站后台数据库啥玩意儿?教你几招轻松识别和破解方法

第三招,看网站文件的后缀名,这个方法更老套,但现在偶尔也能碰到,如果你能猜到或者通过某种方式看到网站后台登录页面的地址(比如尝试访问 admin.asplogin.jspphpmyadmin 等),那么这个文件的后缀名也能提供线索。.asp 的页面通常搭配微软的Access或SQL Server数据库;.php 的页面大概率用MySQL;.jsp 的页面可能用Oracle或MySQL,但这只是经验之谈,不是绝对的。

好了,假设我们通过以上方法,大概猜到了网站用的数据库类型,甚至发现它可能存在SQL注入漏洞,我们聊聊所谓的“破解”思路,其实就是利用SQL注入漏洞来试探着获取数据库里的信息,再次强调,这仅仅是原理演示,用于学习。

SQL注入是啥?简单说,就是网站程序在拼接SQL命令(数据库能听懂的语言)去查询数据时,没有对用户输入的内容进行严格的检查,你本来应该输入用户名和密码,但如果你输入的不是正常的密码,而是一段精心构造的“代码”,这段代码就有可能被网站当成真正的SQL命令来执行。

想知道网站后台数据库啥玩意儿?教你几招轻松识别和破解方法

一个简单的登录验证,网站后台的代码可能是这样的:SELECT * FROM users WHERE username='你输入的用户名' AND password='你输入的密码',这本来没问题。

但如果你在密码栏里输入 ' OR '1'='1,那么拼接出来的SQL命令就变成了:SELECT * FROM users WHERE username='admin' AND password='' OR '1'='1',你看,'1'='1' 这个条件永远是真的,所以这个查询语句就会把users表里所有的用户信息都给你查出来,很可能就让你绕过了密码验证,直接登录进去了,这就是最基础的SQL注入。

再深入一点,你可以用一些工具(比如著名的sqlmap)或者手动构造更复杂的语句,去一步步探测数据库里有哪些表、表里有哪些字段,在MySQL中,你可以尝试注入 union select 1,2,database() 这样的语句,如果漏洞存在,它可能会在页面上显示出当前数据库的名字,然后你再通过查询 information_schema 这个数据库(MySQL自带的一个记录所有数据库、表信息的库)来获取所有表名和字段名。

构造这样的注入语句:union select 1,table_name from information_schema.tables where table_schema=database(),可能就会把当前数据库里所有表的名字显示出来,如果你看到一个叫“admin”或者“users”的表,那很可能就是存放管理员账号密码的地方。

找到存放密码的字段后,你看到的可能是一串乱七八糟的字符,这是被“哈希加密”过的密码,这种加密一般是不可逆的,这时候你可能需要去找一些在线的彩虹表或者用工具进行碰撞破解,如果密码比较简单,是有可能破解出明文密码的,但如果对方用了“加盐”加密,破解难度就非常非常大了。

就是识别网站数据库类型和利用SQL注入漏洞的基本原理和方法,你会发现,整个过程就像侦探破案,一步步推理和试探,但请务必记住,没有授权的情况下对任何网站进行这些操作都是非法的,可能会面临严厉的法律后果,学习这些知识是为了更好地理解网络安全,从而在你未来自己建站或者从事相关工作时,知道如何加固自己的网站,防范这些攻击,知其然,更要知其所以然,这才是正确的学习态度。