初めてのシェルコード…。
全くshellcodeって何なのか、分からなかったが、昨日勉強したことで
shellcodeがどういうもので、どう作られているのか分かった。
昨日本に書いてあったshellcodeは
Linuxに入っている unistd.h というヘッダに入っている execve関数を使って、
/bin/shを呼び出すものだった。
考え方は本当に単純で、
/usr/include/asm/unistd.h
⬆ぼくは unistd_32.hに入ってた。
unistd.h に execve 11
⬆この 11 は システムコールと呼ばれる物らしい。
知らなかったけど、これで呼べるらしい。
はい。
execve関数の使い方:
とりあえず、これを C言語でかくと
( ๑・ิټ・ิ๑)『説明しよう。』
( ๑・ิټ・ิ๑)『data[0]に /bin/shという文字列のポインタを格納し、
data[1]に NULL を入れる。 /bin/shは引数を必要としないので
data配列は2つだけ。』
( ๑・ิټ・ิ๑)『まぁ、こういうプログラムになるんやわぁ』
( ๑・ิټ・ิ๑)『これ以上は説明はいらないだろう。あとはアセンブリに書き換え』
( ๑・ิټ・ิ๑)『しかし、此所でむずかしいのは、 『NULL』を使っている所』
( ๑・ิټ・ิ๑)『 NULLはセキュリティホールにあってはならないものなので、
xor %eax, %eax
を xorl %eax,%eax って書き換えることですな。』
終わり。