1.走进Windows中的提权提权行为
2.主机安全技术剖析-关于Windows RPC挖掘的那些事
3.Nftables CVE-2023-0179提权利用
4.Go提权并打包exe带图标和文件信息2024版(超详细)
5.渗透测试应该怎么做呢?
走进Windows中的提权行为
深入探讨Windows提权行为,本文聚焦于GetSystem过程及其在ATT&CK框架中的辅助对应项,T - Access Token Manipulation,工具不涉及UAC bypass。网页文中选择命名管道提权和访问令牌窃取作为演示实例。版源
以经典的码提彩票网络源码meterpreter中getsystem命令为例,其源代码揭示了工作原理和前置条件,权辅核心在于利用ImpersonateNamedPipeClient API,助工通过命名管道的具网服务端进程模仿客户端进程的访问令牌,获取SYSTEM权限。页版源码
理解该API的提权具体说明及调用前提(SeImpersonatePrivilege权限)有助于深入分析。源代码拆解了实现步骤,辅助从创建命名管道、工具创建服务、网页启动服务并连接管道,版源到调用API完成提权,直至删除服务,整个过程均有详细描述。
命名管道提权的复现和日志验证过程展示了系统监控工具在检测和理解攻击行为中的关键作用。通过sysmon等工具,可以跟踪从创建命名管道到服务创建、启动、连接管道、完成提权直至服务删除的每一个环节。
访问令牌窃取技术同样依赖于Windows API,如ImpersonateLoggedOnUser、DuplicateTokenEx等,实现途径包含获取目标进程的句柄、访问令牌,复制令牌并创建新进程。本文提供代码示例及测试时的注意事项,强调实际操作的重要性。
结合日志分析,利用sysmon的ProcessAccess类日志,可以定位到OpenProcess、OpenProcessToken、DuplicateTokenEx等关键操作。通过关联分析,即使API调用不在sysmon能力范围内,也能追踪到攻击行为的全貌。
做好威胁检测需对攻击和防御知识有深入理解,sysmon日志记录和Windows API调用分析是关键。缺乏这些知识会限制检测能力。从原理出发,结合自上而下的分析和自下而上的分析,是理解攻击行为的正确方法。
主机安全技术剖析-关于Windows RPC挖掘的那些事
本文深入探讨了如何利用Windows中的远程过程调用(RPC)机制,挖掘出系统中存在的未修复和改进的潜在漏洞,以实现本地提权。文章首先介绍了Windows提权系列的c 源码扫ip背景,指出了除了传统的绕过用户账户控制(UAC)和利用内核漏洞外,还有许多其他实现本地提权的手段。接着,文章详细阐述了如何通过模糊测试(Fuzzing)技术,利用RPC服务器中的漏洞来挖掘出这些潜在的安全隐患。
文章提供了两个利用RPC提权漏洞的实例,并分享了实现这些实例的工具和方法。首先,介绍了如何选择和使用模糊测试工具,如Impacket库,来探索和尝试未记录的RPC接口。接着,文章深入讲解了如何使用RpcView工具枚举RPC服务器,并通过下载Windows SDK中的symchk.exe工具,来配置RpcView以解析函数名称。这一步骤对于理解RPC通信过程至关重要。
文章进一步解释了如何利用PetitPotam工具,通过构建RPC接口和利用特定的RPC服务接口(如EFSRPC和LSARPC),实现本地提权。通过反编译接口为IDL文件,生成头文件和源代码,实现自定义RPC客户端。文章还展示了通过构造特定的UNC路径来欺骗特权进程访问恶意管道,进而实现提权的过程。
最后,文章分享了两个具体的本地提权实例,一个是通过诊断跟踪服务(DiagTrack)中的RPC接口(UtcApi_StartCustomTrace)实现的提权,另一个是利用AzureAttestService服务中的RPC接口。文章强调了如何通过利用这些服务的RPC接口,构造特定的输入来触发提权过程,并最终实现本地用户权限的提升。
本文通过实例和工具介绍,提供了深入的理论和技术细节,旨在帮助安全研究者和系统管理员了解如何利用Windows RPC机制进行本地提权,同时强调了及时修复和更新系统的重要性,以防止此类安全风险的利用。
Nftables CVE--提权利用
在分析了CVE---Nftables整型溢出漏洞的成因之后,本文接下来将深入探讨如何利用这一漏洞。首先,了解到payload_eval_copy_vlan函数中存在整型溢出问题,这使得我们可以将vlan头部结构拷贝至寄存器(NFT_REG_-NFT_REG_)中,而该变量位于栈上,因此可以覆盖到栈上的其他变量。
然而,观察源码后发现regs变量无法直接覆盖到返回地址。进一步分析后发现,jumpstack变量位于regs变量下方,因此可以利用整型溢出覆盖到jumpstack变量。接下来,太空射击源码我们关注nft_jumpstack结构体,该结构体在nft_do_chain函数中起作用,当状态寄存器被设置为JUMP条件时,程序将跳转至其他chain进行处理。保存完当前chain状态后,程序将跳转至目的chain,即存储在regs.verdict.chain中。
还原chain的过程涉及通过递减stackptr来取出存储在jumpstack变量中的chain、rule、lastrule,然后进行rule的解析。需要注意的是,在遍历rule时,循环条件为rule < lastrule。因此,在伪造lastrule时,需要确保其值大于rule,否则无法进入循环内部。
接着,观察nft_rule_dp结构体,发现其中包含用于存储nft_expr结构体指针的八个字节。通过篡改该指针,可以劫持程序流程。为了解决这一问题,作者从ctfiot.com/.html中学习了一个技巧:使用ptype /o struct xxx显示结构体信息与偏移。
构建流程如下:通过漏洞溢出至nft_jumpstack结构体,并修改rule变量指向可控内容的地址。同时,将lastrule值篡改为大于rule的值。接下来,在可控内容中伪造一个nft_rule_dp结构体,篡改第一个八个字节(填充位)和第二个八个字节(函数表指针)的值,使其分别指向可控内容的地址。之后,在该地址处伪造nft_expr,将ops变量指向所需执行的函数。
分析后得知,通过上述手段可以实现程序流程的劫持。接下来,需要考虑如何伪造上述结构体。在nft_payload_copy_vlan函数中,漏洞点在于将vlan头数据复制到寄存器中,由于vlan头地址低于寄存器地址,导致在复制完vlan头后会覆盖寄存器值。这里,我们可以通过控制NFT_REG_的值来实现对jumpstack结构体的篡改。
由于可以控制regs变量,首先泄露regs地址,然后在此基础上伪造rule并重新指向jumpstack。cmsV8源码这里采用将last_rule设置为函数地址的技巧,以节省八个字节的空间。然而,仅控制八个字节的函数指针不足以构造完整的ROP链,因此需要使用栈迁移。栈迁移的目标是控制一段内存,选择regs作为目标。
在寻找合适的栈迁移gadget时,作者使用了vmlinux-to-elf工具提取符号表,然后利用ropper工具搜索gadget。但尝试后发现大部分gadget不可用。作者最后尝试使用objdump工具提取gadget,并通过搜索add rsp.*等指令找到栈迁移的gadget。进一步计算栈顶与regs函数地址的差值,找到相应的栈迁移gadget。
在提权方面,作者通过覆盖modprobe_path实现提权。选择合适的gadget将rdi设置为modprobe_path,rax设置为覆盖后的路径。然而,在返回到nf_hook_slow函数时,由于设置了rax值导致状态码无法正确设置,程序跳转至NF_DROP分支,导致内核异常。最终,作者在rbp中找到了一个do_softirq函数,并尝试将其作为返回地址。运行后发现程序能够正常返回到用户态。
最后,验证新用户是否已写入至/etc/passwd文件中,完成提权过程。完整exploit代码可参考github.com/h0pe-ay/Vuln.../poc.c。相关资料参考链接包括github.com/TurtleARM/CV...
Go提权并打包exe带图标和文件信息版(超详细)
为了完成Go提权并打包exe带图标和文件信息的过程,我们需要遵循一系列的步骤来实现目标。本教程将详细指导您完成整个流程,以确保您能够顺利地完成这一任务。
首先,我们从工具下载开始。请确保您的GOPATH环境配置正确,执行完毕后,您应该会在bin目录中找到goversioninfo.exe文件,这标志着第一步成功完成。
接下来,我们将创建一个名为nac.manifest的文件。请确保此文件与main.go同级,内容应按照提权需求编写。
为了添加详细的文件信息,我们需要在main.go同级目录创建versioninfo.json文件,并根据所需信息填充内容。c web api源码
然后,为了让exe带有图标,您需要将图标文件复制到与main.go相同的目录下。确保图标格式为.ico,以便在main.go的首行中添加相应的代码,以引用该图标。
在完成上述步骤后,我们可以通过输入特定命令来编译程序。成功后,您将得到一个名为resource.syso的资源文件,这是编译过程中生成的。
最后,我们来打包程序。在C盘创建个空文件夹作为源码存储空间,这一步可根据实际情况调整。
本教程适用于个人娱乐用途,与博主无关。完成上述步骤后,您将能够得到一个具有特定图标和详细信息的exe文件。如果您在执行过程中遇到任何问题,欢迎在评论区或私信博主寻求帮助和解答,我们将为您提供支持。
感谢您对本教程的关注和支持,您的参与就是对我们最大的鼓励。期待您成功完成提权并打包exe的任务,如有任何疑问,欢迎随时与我们联系。
渗透测试应该怎么做呢?
、信息收集
1、域名、IP、端口
域名信息查询:信息可用于后续渗透
IP信息查询:确认域名对应IP,确认IP是否真实,确认通信是否正常
端口信息查询:NMap扫描,确认开放端口
发现:一共开放两个端口,为web访问端口,为windows远程登陆端口,嘿嘿嘿,试一下
发现:是Windows Server 系统,OK,到此为止。
2、指纹识别
其实就是网站的信息。比如通过可以访问的资源,如网站首页,查看源代码:
看看是否存在文件遍历的漏洞(如路径,再通过…/遍历文件)
是否使用了存在漏洞的框架(如果没有现成的就自己挖)
、漏洞扫描
1、主机扫描
Nessus
经典主机漏扫工具,看看有没有CVE漏洞:
2、Web扫描
AWVS(Acunetix | Website Security Scanner)扫描器
PS:扫描器可能会对网站构成伤害,小心谨慎使用。
、渗透测试
1、弱口令漏洞
漏洞描述
目标网站管理入口(或数据库等组件的外部连接)使用了容易被猜测的简单字符口令、或者是默认系统账号口令。
渗透测试
① 如果不存在验证码,则直接使用相对应的弱口令字典使用burpsuite 进行爆破
② 如果存在验证码,则看验证码是否存在绕过、以及看验证码是否容易识别
风险评级:高风险
安全建议
① 默认口令以及修改口令都应保证复杂度,比如:大小写字母与数字或特殊字符的组合,口令长度不小于8位等
② 定期检查和更换网站管理口令
2、文件下载(目录浏览)漏洞
漏洞描述
一些网站由于业务需求,可能提供文件查看或下载的功能,如果对用户查看或下载的文件不做限制,则恶意用户就能够查看或下载任意的文件,可以是源代码文件、敏感文件等。
渗透测试
① 查找可能存在文件包含的漏洞点,比如js,css等页面代码路径
② 看看有没有文件上传访问的功能
③ 采用…/来测试能否夸目录访问文件
风险评级:高风险
安全建议
① 采用白名单机制限制服务器目录的访问,以及可以访问的文件类型(小心被绕过)
② 过滤./等特殊字符
③ 采用文件流的访问返回上传文件(如用户头像),不要通过真实的网站路径。
示例:tomcat,默认关闭路径浏览的功能:
<param-name>listings</param-name>
<param-value>false</param-value>
3、任意文件上传漏洞
漏洞描述
目标网站允许用户向网站直接上传文件,但未对所上传文件的类型和内容进行严格的过滤。
渗透测试
① 收集网站信息,判断使用的语言(PHP,ASP,JSP)
② 过滤规则绕过方法:文件上传绕过技巧
风险评级:高风险
安全建议
① 对上传文件做有效文件类型判断,采用白名单控制的方法,开放只允许上传的文件型式;
② 文件类型判断,应对上传文件的后缀、文件头、类的预览图等做检测来判断文件类型,同时注意重命名(Md5加密)上传文件的文件名避免攻击者利用WEB服务的缺陷构造畸形文件名实现攻击目的;
③ 禁止上传目录有执行权限;
④ 使用随机数改写文件名和文件路径,使得用户不能轻易访问自己上传的文件。
4、命令注入漏洞
漏洞描述
目标网站未对用户输入的字符进行特殊字符过滤或合法性校验,允许用户输入特殊语句,导致各种调用系统命令的web应用,会被攻击者通过命令拼接、绕过黑名单等方式,在服务端运行恶意的系统命令。
渗透测试
风险评级:高风险
安全建议
① 拒绝使用拼接语句的方式进行参数传递;
② 尽量使用白名单的方式(首选方式);
③ 过滤危险方法、特殊字符,如:|&;’"等
5、SQL注入漏洞
漏洞描述
目标网站未对用户输入的字符进行特殊字符过滤或合法性校验,允许用户输入特殊语句查询后台数据库相关信息
渗透测试
① 手动测试:判断是否存在SQL注入,判断是字符型还是数字型,是否需要盲注
② 工具测试:使用sqlmap等工具进行辅助测试
风险评级:高风险
安全建议
① 防范SQL注入攻击的最佳方式就是将查询的逻辑与其数据分隔,如Java的预处理,PHP的PDO
② 拒绝使用拼接SQL的方式
6、跨站脚本漏洞
漏洞描述
当应用程序的网页中包含不受信任的、未经恰当验证或转义的数据时,或者使用可以创建 HTML或JavaScript 的浏览器 API 更新现有的网页时,就会出现 XSS 缺陷。XSS 让攻击者能够在受害者的浏览器中执行脚本,并劫持用户会话、破坏网站或将用户重定向到恶意站点。
三种XSS漏洞:
① 存储型:用户输入的信息被持久化,并能够在页面显示的功能,都可能存在存储型XSS,例如用户留言、个人信息修改等。
② 反射型:URL参数需要在页面显示的功能都可能存在反射型跨站脚本攻击,例如站内搜索、查询功能。
③ DOM型:涉及DOM对象的页面程序,包括:document.URL、document.location、document.referrer、window.location等
渗透测试
存储型,反射型,DOM型
风险评级:高风险
安全建议
① 不信任用户提交的任何内容,对用户输入的内容,在后台都需要进行长度检查,并且对<>"’&等字符做过滤
② 任何内容返回到页面显示之前都必须加以html编码,即将<>"’&进行转义。
7、跨站请求伪造漏洞
漏洞描述
CSRF,全称为Cross-Site Request Forgery,跨站请求伪造,是一种网络攻击方式,它可以在用户毫不知情的情况下,以用户的名义伪造请求发送给被攻击站点,从而在未授权的情况下进行权限保护内的操作,如修改密码,转账等。
渗透测试
风险评级:中风险(如果相关业务极其重要,则为高风险)
安全建议
① 使用一次性令牌:用户登录后产生随机token并赋值给页面中的某个Hidden标签,提交表单时候,同时提交这个Hidden标签并验证,验证后重新产生新的token,并赋值给hidden标签;
② 适当场景添加验证码输入:每次的用户提交都需要用户在表单中填写一个上的随机字符串;
③ 请求头Referer效验,url请求是否前部匹配Http(s)😕/ServerHost
④ 关键信息输入确认提交信息的用户身份是否合法,比如修改密码一定要提供原密码输入
⑤ 用户自身可以通过在浏览其它站点前登出站点或者在浏览器会话结束后清理浏览器的cookie;
8、内部后台地址暴露
漏洞描述
一些仅被内部访问的地址,对外部暴露了,如:管理员登陆页面;系统监控页面;API接口描述页面等,这些会导致信息泄露,后台登陆等地址还可能被爆破。
渗透测试
① 通过常用的地址进行探测,如login.html,manager.html,api.html等;
② 可以借用burpsuite和常规页面地址字典,进行扫描探测
风险评级:中风险
安全建议
① 禁止外网访问后台地址
② 使用非常规路径(如对md5加密)
9、信息泄露漏洞
漏洞描述
① 备份信息泄露:目标网站未及时删除编辑器或者人员在编辑文件时,产生的临时文件,或者相关备份信息未及时删除导致信息泄露。
② 测试页面信息泄露:测试界面未及时删除,导致测试界面暴露,被他人访问。
③ 源码信息泄露:目标网站文件访问控制设置不当,WEB服务器开启源码下载功能,允许用户访问网站源码。
④ 错误信息泄露:目标网站WEB程序和服务器未屏蔽错误信息回显,页面含有CGI处理错误的代码级别的详细信息,例如SQL语句执行错误原因,PHP的错误行数等。
⑤ 接口信息泄露:目标网站接口访问控制不严,导致网站内部敏感信息泄露。
渗透测试
① 备份信息泄露、测试页面信息泄露、源码信息泄露,测试方法:使用字典,爆破相关目录,看是否存在相关敏感文件
② 错误信息泄露,测试方法:发送畸形的数据报文、非正常的报文进行探测,看是否对错误参数处理妥当。
③ 接口信息泄露漏洞,测试方法:使用爬虫或者扫描器爬取获取接口相关信息,看目标网站对接口权限是否合理
风险评级:一般为中风险,如果源码大量泄漏或大量客户敏感信息泄露。
安全建议
① 备份信息泄露漏洞:删除相关备份信息,做好权限控制
② 测试页面信息泄露漏洞:删除相关测试界面,做好权限控制
③ 源码信息泄露漏洞:做好权限控制
④ 错误信息泄露漏洞:将错误信息对用户透明化,在CGI处理错误后可以返回友好的提示语以及返回码。但是不可以提示用户出错的代码级别的详细原因
⑤ 接口信息泄露漏洞:对接口访问权限严格控制
、失效的身份认证
漏洞描述
通常,通过错误使用应用程序的身份认证和会话管理功能,攻击者能够破译密码、密钥或会话令牌, 或者利用其它开发缺陷来暂时性或永久性冒充其他用户的身份。
渗透测试
① 在登陆前后观察,前端提交信息中,随机变化的数据,总有与当前已登陆用户进行绑定的会话唯一标识,常见如cookie
② 一般现在网站没有那种简单可破解的标识,但是如果是跨站认证,单点登录场景中,可能为了开发方便而简化了身份认证
风险评级:高风险
安全建议
① 使用强身份识别,不使用简单弱加密方式进行身份识别;
② 服务器端使用安全的会话管理器,在登录后生成高度复杂的新随机会话ID。会话ID不能在URL中,可以安全地存储,在登出、闲置超时后使其失效。
、失效的访问控制
漏洞描述
未对通过身份验证的用户实施恰当的访问控制。攻击者可以利用这些缺陷访问未经授权的功能或数据,例如:访问其他用户的帐户、查看敏感文件、修改其他用户的数据、更改访问权限等。
渗透测试
① 登入后,通过burpsuite 抓取相关url 链接,获取到url 链接之后,在另一个浏览器打开相关链接,看能够通过另一个未登入的浏览器直接访问该功能点。
② 使用A用户登陆,然后在另一个浏览器使用B用户登陆,使用B访问A独有的功能,看能否访问。
风险评级:高风险
安全建议
① 除公有资源外,默认情况下拒绝访问非本人所有的私有资源;
② 对API和控制器的访问进行速率限制,以最大限度地降低自动化攻击工具的危害;
③ 当用户注销后,服务器上的Cookie,JWT等令牌应失效;
④ 对每一个业务请求,都进行权限校验。
、安全配置错误
漏洞描述
应用程序缺少适当的安全加固,或者云服务的权限配置错误。
① 应用程序启用或安装了不必要的功能(例如:不必要的端口、服务、网页、帐户或权限)。
② 默认帐户的密码仍然可用且没有更改。
③ 错误处理机制向用户披露堆栈跟踪或其他大量错误信息。
④ 对于更新的系统,禁用或不安全地配置最新的安全功能。
⑤ 应用程序服务器、应用程序框架(如:Struts、Spring、ASP.NET)、库文件、数据库等没有进行相关安全配置。
渗透测试
先对应用指纹等进行信息搜集,然后针对搜集的信息,看相关应用默认配置是否有更改,是否有加固过;端口开放情况,是否开放了多余的端口;
风险评级:中风险
安全建议
搭建最小化平台,该平台不包含任何不必要的功能、组件、文档和示例。移除或不安装不适用的功能和框架。在所有环境中按照标准的加固流程进行正确安全配置。
、使用含有已知漏洞的组件
漏洞描述
使用了不再支持或者过时的组件。这包括:OS、Web服务器、应用程序服务器、数据库管理系统(DBMS)、应用程序、API和所有的组件、运行环境和库。
渗透测试
① 根据前期信息搜集的信息,查看相关组件的版本,看是否使用了不在支持或者过时的组件。一般来说,信息搜集,可通过http返回头、相关错误信息、应用指纹、端口探测(Nmap)等手段搜集。
② Nmap等工具也可以用于获取操作系统版本信息
③ 通过CVE,CNVD等平台可以获取当前组件版本是否存在漏洞
风险评级:按照存在漏洞的组件的安全风险值判定当前风险。
安全建议
① 移除不使用的依赖、不需要的功能、组件、文件和文档;
② 仅从官方渠道安全的获取组件(尽量保证是最新版本),并使用签名机制来降低组件被篡改或加入恶意漏洞的风险;
③ 监控那些不再维护或者不发布安全补丁的库和组件。如果不能打补丁,可以考虑部署虚拟补丁来监控、检测或保护。
详细学习可参考: