首页
社区
课程
招聘
[原创]跟着crownless学Web之(2)calc2
发表于: 2019-1-22 16:27 7520

[原创]跟着crownless学Web之(2)calc2

2019-1-22 16:27
7520

本文备份于我的博客
大家好,我是Web安全板块的新版主crownless。最近我将以CTF赛题讲解的形式介绍一系列的Web基础知识,讲解的顺序将是循序渐进,因此不需要读者有任何基础知识。希望能吸引更多人关注看雪的Web安全板块,为板块增加人气和活力。
如果你还没有阅读第一篇教程,建议你先阅读第一篇教程再阅读本文。
在这篇文章中,你将学到:

话不多说,让我们开始吧。首先打开这次的CTF赛题网站:http://139.224.220.67:30008/
你会看到如下php代码:

可以看到,这次的源代码和上一个教程中的源代码基本一致,不过多出了如下部分:

这里strpos的作用是“查找字符串首次出现的位置”。die的作用是立即停止该php后端的运行。那么很明显,这是一种过滤。当str中包含#时,php后端将立即停止运行。所以上一篇教程中提到的用#来注释掉| bc的方法不再可用。
首先,我们不知道flag在哪里,所以一定要用ls来列出目录。所以,我们的payload必须包含; ls;。既然无法注释掉| bc,那么我们可以传一个空字符串给管道,所以我们的payload可以是; ls; echo。提交后,我们发现有一个名叫flag的文件。所以接下来我们要打印这个文件的内容。但是问题来了,如果我们发送; cat flag; echo这个payload,那么过滤代码就会立即检测到有flag字符串,从而触发die。有没有办法绕过这个限制呢?
这里又要涉及到shell的一些技巧。当你使用通配符*时,就可以绕过这个限制。具体原理可以参考这里。所以我们可以发送; cat f*; echo这个payload,因为目录下只有一个以f开头的文件flag,所以就相当于执行了; cat flag; echo,至此,我们学会了一些基本的绕过过滤的技巧。

<center>
<h2>calc</h2>

<?php 
$str="";
if(!empty($_GET)){
    $str=$_GET["calc"];
    if(strpos($str,"#")!==false)
        die;
    if(strpos($str,"`")!==false)
        die;
    if(strpos($str,"flag")!==false)
        die;
}
?>
<form action="./index.php">
input: <input type="text" name="calc" value="<?php echo $str;?>">
  <input type="submit" value="Submit">
</form>

<?php
    echo "result:".shell_exec("echo $str | bc");
?>
</center>



<?php
show_source(__FILE__);

[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

最后于 2019-1-22 16:27 被crownless编辑 ,原因:
收藏
免费 2
支持
分享
最新回复 (11)
雪    币: 73
活跃值: (923)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
每天都会有更新吗?觉得不错,感觉一下子领悟了不少东西
2019-1-22 17:12
1
雪    币: 5
活跃值: (168)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
感谢版主~
2019-1-22 18:12
1
雪    币: 14490
活跃值: (17421)
能力值: ( LV12,RANK:290 )
在线值:
发帖
回帖
粉丝
4
版主,题目链接会一直开着么??
2019-1-22 18:16
1
雪    币: 5
活跃值: (168)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
无法使用 "#"注释|bc的话,只要给bc一个表达式让他成功执行就可以了 比如数字1。
2019-1-22 18:22
1
雪    币: 2282
活跃值: (426)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
6
kongfubull 每天都会有更新吗?觉得不错,感觉一下子领悟了不少东西
会时不时更新的!
2019-1-23 09:40
0
雪    币: 2282
活跃值: (426)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
7
pureGavin 版主,题目链接会一直开着么??
会的,如果down了,我会去修
2019-1-23 09:40
0
雪    币: 2282
活跃值: (426)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
8
AndyHolmes 无法使用 "#"注释|bc的话,只要给bc一个表达式让他成功执行就可以了 比如数字1。

事实上给shell输入一个不存在的指令就可中断shell的执行,从而不执行到| bc

2019-1-23 10:06
0
雪    币: 169
活跃值: (75)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
不错,就喜欢这种没有门槛的
2019-1-23 14:40
0
雪    币: 351
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
谢谢楼主
2019-1-24 14:30
0
雪    币: 403
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
11
赞赞赞
2019-1-25 17:28
0
雪    币: 26971
活跃值: (63142)
能力值: (RANK:135 )
在线值:
发帖
回帖
粉丝
12
顶一下
2019-1-28 16:16
0
游客
登录 | 注册 方可回帖
返回
//