SQL注入 ——sql数据库操作基础(一)
本章目的
普及MySQL( MariaDB)藪據庫的基礎與進階語法,加深對SQL命令語句的理解,為后續SQL注入攻擊與防護實驗打下堅實的基礎。
基本概念
數據庫分類
關系型數據庫
●關系型數據庫模型是把復雜的數據結構歸結為簡單的二元關系(即二維表格形式)。通過SQL結構化査詢語句存儲數據,保持數據一致性,遵循ACID理論。關系型數據庫的典型產品: MySQL、PostgreSQL、IBM DB2、 Accesss、 Microsoft SQL Server、 Oracle、
非關系型數據庫
●非關系型數據庫也被成為 NOSQL數據庫, NOSQLI的本意是“ Not Only SQL”指的是非關系型數據庫,而不是“ NO SQL的意思。因此, NOSQL的產生并不是要徹底地否定關系型數據庫,而是作為傳統關系型數據庫的一個有效補充,NoSQL數據庫在特定的場景下可以發揮出難以想象的高效率和高性能。非關系型數據庫的典型產品: Memcached、 Redis、 mongo DB等
數據庫是典型web應用的核心,通過各種web應用保持聯系,相互配合,構成web服務器與web客戶端以http,https等協議相互交流。
常見名詞
■數據庫( Data Base,DB):存儲在磁帶、磁盤、光盤或其他外存介質上、按一定結構組織在一起的相關數據的集合。
■數據庫管理系統( DataBase Management System,DBMs):一種操縱和管理數據庫的大型軟件,用于建立、使用和維護數據庫。
■數據庫系統( Data Base System,DBs):通常由軟件、數據庫(DB)和數據庫管理員組成。軟件主要包括操作系統、各種宿主語言、實用程序以及數據庫管理系統(DBMS)
■數據庫(DB)由數據庫管理系統(DBMS)統一管理,數據的插入、修改和檢索均要通過數據庫管理系統(DBMS)進行。數據庫管理員負責創建、監控和維護整個數據庫,使數據能被任何有權使用的人有效使用
■ACID理論
>原子性( Atomicity):事務是一個不可分割的單位,事務中的操作要么都發生,要么都不發生。
>一致性( Consistency):事務前后數據的完整性必須保持一致。
>隔離性( Isolation):多個用戶并發訪問數據庫時,數據庫為每一個用戶開啟的事務,不能被其他事務的操作數據所干擾,多個并發事務之間要相互隔離
>持久性( Durability):一個事務一旦被提交,它對數據庫中數據的改變就是永久性的,接下來即使數據庫發生故障也不應該對其有任何影響。
按排名簡單介紹下各大數據庫
Oracle
甲骨文公司的一款關系型數據庫管理系統。它是在數據庫領域一直處于領先地位的產品??梢哉fOracle是目前世界上功能最強大、最復雜、市場占比最高的商業數據庫產品,適用于各類大、中、小、微機環境。它是一種高效率、可靠性好的適應高吞吐量的數據庫解決方案。從架構到運維,可以說是最難的數據庫,學習和使用難度較高
?MySQL
MySQL是當今最受歡迎的開源SQL數據庫管理系統,它由瑞典MySQLAB開發發布和支持。MySQLAB是一家基于MySQL開發人員的商業公司,它是一家使用了一種成功的商業模式來結合開源價值和方法論的第二代開源公司。MySQL是現在非常流行的關系型數據庫管理系統,尤其在Web應用方面,是最好的關系型數據庫管理系統應用軟件之一。
Microsoft SaL Server (MSSQL)
SQLServer是Microsoft推出的關系型數據庫管理系統,具有使用方便可伸縮性好與相關軟件集成程度高等優點,從舊版本的個人電腦到運行MicrosoftWindowsserver的大型多處理器的服務器都可以使用。老版本只能在Windows上運行,從SQLServer2017版本起可以在Linux上運行。
PostgresQL
PostgresQL是加州大學伯克利分校計算機系開發的開源對象關系型數據庫管理系統(ORDBMS),穩定性極強,用于安全地存儲數據。
還有 Memcached(Memcached之反射拒絕服務攻擊技術)、Redis(Redis未授權訪問漏洞)、mongoDB(MongoDB遠程代碼注入漏洞)。。。
國內自主研發的關系型數據庫
>達夢(DM):由華中理工馮玉才教授創辦,完全自主研發,以Oracle為參照、追趕
對象。
>人大金倉(Kingbase):由人民大學王珊教授創辦,自主研發。普通的關系型數據
庫。
>神舟通用(OSCAR):神舟集團與南大通用合作開發的關系型數據庫,更多地用于
數據分析領域。
>南大通用(GBase):南開大學的背景,2010年左右自主研發的基于列式存儲、面
向數據分析、數據倉庫的數據庫系統。
■識別數據庫方法
>盲跟蹤
Web應用技術
不同數據庫SQL語句差異
>非盲跟蹤
報錯、直接查詢
■各大數據庫默認端口號
Oracle: 1521
MySQL:3306
SQL Server: 1433
PostgresQL:5432
mongoDB:27017
Redis: 6379
DM:5236
MemcacheDB: 11211
■常見數據庫的版本查詢方法區別
> MSSQL
select @@version
> MySQL
select version() / select @@version
> Oracle
select banner from v$version
> PostgreSQL
select version()
■注意:不同數據庫處理包括而不限于長度、各部位截取、以及字符串鏈接都是不同的
各數據庫與網頁編程語言的搭配
常見的搭配:
ASP和.NET: Microsoft SQL Server
PHP: MySQL、 PostgreSQL
Java: Oracle、 MySOL
■SQL語法基礎
用于與關系型數據庫交互的標準SQL命令有
CREATE、SELECT、INSERT、UPDATE、DELETE和DROP
分為三組
1.數據定義(Create、Drop)
2數據操縱(Select、Insert、Update、Delete)
3.數據控制(Grant、Revoke)
基礎命令(CUD)
CREATE
創建新的表、視圖或其他數據庫中的對象
ALTER
修改現存數據庫對象,比如一張表
DROP
刪除表、視圖或者數據庫中的其他對象
SELECT
從一張或者多張表中檢索特定的數據
INSERT
創建一條新記錄
UPDATE
修改記錄
DELETE
刪除記錄
GRANT
賦予用戶特權
REVOKE
收回賦予用戶的特權
操作環境
(1)操作系統: win10
(2)安裝的應用軟件: Apache、MySQL(MariaDB)、PHP;DVWA、SQLi-Labs、
Webug3.0漏洞網站環境
MySQL( MariaDB)數據庫帳號root,密碼為root
實驗原理
MySQL( MariaDB)數據庫基本命令的功能
實驗步驟
第一部分: MySQL( MariaDB)基礎操作
1.連接數據庫
(1)本地連接
輸入命令:
mysql -u root -p mysql -hlocalhost -u root -p mysql -h127.0.0.1 -u root -p mysql -h ip(本地)-u root -p若其因ip未授權而登不上mysql則報錯'FPPP'
只需添加上即可:
grant all privileges on *.* to root@"需登ip" identified by "666666";密碼666
flush privileges;立刻生效
select user,password,host from user;??查看:
(2)遠程鏈接
(第三方軟件鏈接)php遠程鏈接
mysql_connect(host,usemame,password,dbname,port,socket);kali鏈接
mysql -h ip(目標ip)-u root -p若報錯:
grant all privileges on *.* to root@"%" identified by "666666";同上即可。
或直接打開
之后出現“ Enter password:"的提示,,輸入密碼即可登錄一般和賬號一樣為root。若密碼為空,則直接按下回車鍵登錄。——cmd的字體顏色永久改變
成功登錄數據庫后,會出現“ MariaDB[(none)]"的提示符。
注意:絕大部分SQL命令都以分號作為結束符,請不要遺漏!
3.新建數據庫 studenta
命令
create database student;新建成功后,可再次使用下列命令查看結果:
show databases;?4.使用數據庫 studenta
命令:
use studenta;5.在數據庫 studenta中創建表 result
命令:
create table result(id int(8), name varchar(20), city varchar (20), score int(5));6.在表 result中增加數據
本步驟在 result中插入如下5行數據:
命令:
insert into result(id, name, city, score) values(1,"wang","beijing",75);insert into result(id, name, city, score)values(3, "11","shanghai",80);insert into result(id, name, city, score) values(5, "chen","fuzhou",70);insert into result(id, name, city, score) values(2,"zhou","xian",90);insert into result(id, name, city, score) values(7,"han","guangzhou",65);注意:如果數據是字符型( varchar),必須使用單引號或者雙引號包裹!
插入成功后,可用如下命令查詢 result表中的全部內容:
select from result;7.在表 result中刪除1條數據
例如,刪除id=7的數據,可使用以下命令:
delete from result where id=7;刪除成功后,仍然可以用以下命令查看結果:
select from result;8.修改表 result中的1條數據
例如,修改id=5的數據,將其 score設置為666,可使用以下命令:
update result set score=666 where id=5;?
修改成功后,仍然可以用以下命令查看結果:
select *from result;9.查詢表 result中的數據
例如
select *from result;查詢表中所有字段:
select name, score from result;查詢表中的name和 score字段
select score from result where name="11";//查詢name為1的學生的分數
第二部分: My SQL( MariaDB)進階操作
1. order by的用法
(1)將 result表中的數據按照分數( score)從高到低進行排序:
select *from result order by score desc;其中,desc表示降序(遞減);如果從低到高(升序)進行排列,則可以將desc
換成asc;如果不加此參數,默認情況下按升序方式排列。
?分別嘗試:
select id, name, score from result order by 1; select id, name, score from result order by 2;?
正常顯示以name升序排列的結果:
select id, name, score from result order by 3;正常顯示以 score升序排列的結果:
select id, name, score from result order by 4;報錯。
從以上結果可以總結出,對于以下命令:
select cl, c2,..., cn from result order by M;order by后面的數字(M)必須小于或等于n(數據庫查詢的字段數),才能正常顯示。如果M>n,數據庫就會報錯??梢岳眠@個特點判斷數據庫查詢的字段數。
2.imit的用法:
基本格式為
limit MN
//表示從第M1條數據開始,順序往下查詢N條數據
limit
//表示查詢前M條數據
嘗試執行以下兩條命令:
select *from result limit 0,2;//查詢表中的前2條數據
select *from result limit 1,3;//從第2條數據起,往下查詢3條數據的id、name和score字段
3.unionselect的用法
(1)分別嘗試:
此語句的查詢結果,即是select *from result和select 1.2,3.4查詢結果的拼接。
?(2)分別嘗試:
select id,name,score from result union select 1,2,3; select id,name,score from result union select 1,2; select id,name,score from result union select 1,2,3,4;從以上結果可以總結
對于以select c1,c2,...cn from result union select d1,d2,...dm;后半句union select查詢的字段數(m)必須與前半句select查詢的字段數(n)相等,數據庫才能正常顯示結果。與order by相似,可以利用這個特點判斷數據庫查詢的字段數。
(3)嘗試:
select id,city from result where id=1 and 1=2 union select name,score from result;前部否定,后部 則顯示
從以上結果可以總結,在已知字段名的情況下,攻擊者只要將該字段置于任何能夠顯示的位置,就可以暴露該字段的值。
4.union select結合information_schema數據庫
MySQL(MariaDB)5.5以上版本自帶information_schema數據庫,其中保存著關于MySQL服務器所維護的所有其他數據庫的信息,如數據庫名、數據庫的表、表欄的數據類型與訪問權限等??梢园裪nformation_schema數據庫看作MySQL
(MariaDB)的”目錄”!
(1)嘗試執行以下兩條語句:
?
select schema_name from information_schema.schemata;?結果相同
(2)嘗試執行以下兩組語句:
第一組:
第二組:
select table_name from information_schema.tables where table_schema='studenta';?依然相同
SQL高級操作:排序,分組,限定條數
排序order by
SELECT * FROM test_table ORDER BY userid;
分組group by
SELECT name,COUNT(+) FROM test_table GROUP BY name;
限定條數limit
SELECT*FROM test_tablelimit 0,10;
SELECT*FROM test_tablelimit1,5;
聯合查詢union select
SELECT*FROM test_table UNION SELECT1.2,3;
SOL注入-基干聯合查詢的POST注入
SQL注入-基于聯合查詢的字符型GET注入
SOL注入-基于聯合查詢的數字型GET注入_Gjqhs的博客-CSDN博客
MySQL中的“騷操作”
Notice: Undefined variable解決
...
關注我即刻查看其他包括而不限于SQL注入的文章[]~( ̄▽ ̄)~*
創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎總結
以上是生活随笔為你收集整理的SQL注入 ——sql数据库操作基础(一)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 坚果云盘下载使用
- 下一篇: SQL注入——基于联合查询的字符型GET