第一题
[极客大挑战 2019]EasySQL
打开靶机后可以看到这是一个登陆的页面 我们可以尝试两种方式登录
- 弱口令爆破(bu'r'psuite)
- 通过SQL注入里的万能密码来跳过账户和密码验证的过程这里就需要万能密码a'or true #在这里单引号的作用是结束用户名或者密码的输入然后通过or和true并列起来 这样就相当于0 or 1 的结果还是1通过万能密码我们就可以登录进去查看到flag{db6800df-fe69-41cf-97e5-9d1c37585108}
第二题
[极客大挑战 2019]Havefun
打开靶机以后弹出这样一个页面 我们可以ctrl+u或者F12来查看一下网页源代码
这里有一段php代码 不难发现首先定义了一个$cat的变量 然后通过$_GET['cat']来输入一个数值并且赋值给cat echo(输出变量的意思) 后面做了一个判断 如果$cat=dog的话 就输出'syc{cat_cat_cat_cat}' 然后我们通过URL给$cat传一个dog的参数 然后我们就能得到flag了
flag{c9664684-1aea-4dda-8b8d-61147d1ceb6f}
<u>**$_GET**</u>
是 PHP 中的一个超全局变量,用于收集表单数据或者 URL 中的查询字符串。查询字符串是 URL 中
?
后面的部分,由一系列的参数组成,参数之间用
&
符号分隔。每个参数由键和值组成,键和值之间用
=
连接。
$_GET
:通过 URL 的查询字符串传递数据,数据在 URL 中可见。例如:http://example.com/page.php?name=John&age=30
。$_POST
:通过 HTTP 请求的请求体(body)传递数据,数据不会显示在 URL 中。
php语言里定义变量前需要加入$号
第三题
**URL后面的问号
?
用于分隔基本的文件路径和查询字符串**
checkFile函数是通过传入的参数 $page 来进行的文件检查,而不是直接从 URL 中获取参数。所以我们需要以参数形式传递文件名【?file=source.php】,将参数传给file,而不是直接访问文件路径【/source.php】。
isset()
函数用来检查一个变量是否已设置并且非
NULL
。如果变量存在且不为
NULL
,
isset()
会返回
true
;否则返回
false
is_string()
函数用于检查一个变量是否是字符串类型。如果变量
$page
是字符串类型,
is_string($page)
将返回
true
;如果不是字符串类型,将返回
false
in_array()
函数用于检查一个值是否存在于数组中。如果指定的值存在于数组中,
in_array()
返回
true
;否则,返回
false
mb_substr
是 PHP 中的一个多字节字符串函数,它允许你从更长的字符串中截取特定长度的子字符串。这个函数考虑了字符的多字节编码,因此特别适合处理 UTF-8 等多字节字符编码的字符串。
mb_substr
函数的基本语法如下:
string mb_substr(string $string, int $start, int $length = null, string $encoding = mb_internal_encoding())
string
:要截取的原始字符串。start
:开始截取的位置(从 0 开始计数)。length
:要截取的长度。如果不指定或为负数,则截取到字符串的末尾。encoding
:字符串的编码。如果不指定,则使用mb_internal_encoding()
的设置。mb_strpos函数用于查找一个字符串在另一个字符串中的首次出现的位置,这个函数支持多字节字符串。如果没有找到指定的字符串,则返回
false`。urldecode()
函数用于对经过 URL 编码的字符串进行解码。URL 编码是一种将特殊字符转换为百分号(%
)后跟两位十六进制数的过程,用于在 URL 中安全传输数据
打开靶机看到只有一个表情包 所以看一下网页源码
这里body标签给出了一个source.php的文件名 我们可以在URL中发送代开这个文件的请求
通过上面的代码审计 这里有三次对是否在白名单里的检查 还有两次对参数的处理
文件查询的第一个应该在白名单里 所以就只能写source.php或者在hint.php里
这里告诉我们flag在ffffllllaaaagggg里 在src里jpg的查询跳过了三层 所以 我们用../跳过
这样我们就得到了flag
版权归原作者 JUN12JUN12 所有, 如有侵权,请联系我们删除。