初めてのシェルコード…。

全く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 って書き換えることですな。』

 

終わり。