当前位置: 首页 > news >正文

BugKu Web渗透之 never_give_up

启动场景,打开网页,如下图所示。

步骤一:尝试测试请求参数。

尝试更改请求中的id参数值,也有添加 or 1=1,or 1=2,and 1=1,and1=2,发现都没变化,都是显示never never never give up。

看bp中返回的数据。发现一段注释的html文件名。

步骤二:访问注释中的文件。

输入:117.72.52.127:11325/1p.html

直接跳入到bugku的论坛页面了。(看得我一脸懵逼)

想想还是返回bp看看。结果发现一段注释的代码。

步骤三:解码发现的注释代码。

1.url解码

通过在线url解码,发现他是链接到了bugku的页面(怪不得跳转到了bugku)。下面还有一段注释代码,拷贝出来。

2.base64解码

注释的代码看起来像是base64加密的,尝试用在线base64解码,解码出来一堆%的字符串。

3.url解码

将解码出来含有%的尝试url解码。

终于获取到了一部分php代码。

";if(!$_GET['id'])
{header('Location: hello.php?id=1');exit();
}
$id=$_GET['id'];
$a=$_GET['a'];
$b=$_GET['b'];
if(stripos($a,'.'))
{echo 'no no no no no no no';return ;
}
$data = @file_get_contents($a,'r');
if($data=="bugku is a nice plateform!" and $id==0 and strlen($b)>5 and eregi("111".substr($b,0,1),"1114") and substr($b,0,1)!=4)
{$flag = "flag{***********}"
}
else
{print "never never never give up !!!";
}?>

步骤四:分析php代码

代码中写着如果有输出flag,必须满足if括号中的条件。简单分析下,为以下几点:

1.读取参数a文件的内容,内容中需要有"bugku is a nice plateform!"。

2.参数id需要为0。

3.参数b的长度需要大于5。

4.正则匹配"111".substr($b,0,1),"1114"。

5.substr($b,0,1)不能为4。

首先,第一条参数a容为"bugku is a nice plateform!"。

我想到下列方法:

方法一:开重定向写入文件(不可行)

但是这段代码是php代码,而重定向应该是在shell中运行的,所以此方法不行。

方法二:利用PHP伪协议(可行)

a=data://text/plain,bugku%20is%20a%20nice%20plateform!

方法三:远程文件包含(不可行)

a=http://your-server.com/file.txt,其中your-server.com为可公开访问的服务器。不行,因为含有“.”,会进入到no no no中。

方法四:利用PHP的过滤器(不可行)

a=php://filter/convert.base64-encode/resource=data://text/plain;base64,YnVna3UgaXMgYSBuaWNlIHBsYXRlZm9ybSE=

不行,因为含有“.”,会进入到no no no中。

之后,第二条参数id需要等于0。

那么id直接为0就可以了。(后面发现其实不行,没那么简单)

最后,第三,四,五条,结合在一起。参数b的长度需要大于5,能正则匹配"111".substr($b,0,1),"1114",且substr($b,0,1)不能为4。

能满足正则,第一位却不能是4的。eregi的模糊匹配特性:如果 $b的第一个字符是​非数字字符​​(如.),可能就满足。

于是b可以赋值为.4*****,后面星号随便填。

步骤五:根据代码去拼接请求参数

这样,我们拼接的请求参数为:

?id=0&a=data://text/plain,bugku is a nice plateform!&b=.4fffd

我以为可以了,结果页面还是现实never give up。

仔细查看网页请求参数,发现id又赋值为1了,参数a和b也不见了。

返回上面代码一看,乖乖,这是进了第一段的代码呀。

if(!$_GET['id'])
{header('Location: hello.php?id=1');exit();
}

的确,当id=0时,他的值是false。

我们需要找到:id的值是true,但是等于0的。==是弱类型比较,比较时会进行类型转换。

查找了下资料,发现id为00、字母(如abc)、数组(如[33],不能是空数组)等都是可以弱类型比较为0的,并且为true的。

最终,输入:http://117.72.52.127:16094/hello.php?id=[33]&a=data://text/plain,bugku%20is%20a%20nice%20plateform!&b=.4fjefk

成功获取flag!

http://www.dtcms.com/a/515373.html

相关文章:

  • Cangjie语言核心技术深度解析测评:迈进鸿蒙原生开发的安全新时代!
  • 长乐市住房和城乡建设局网站网站开发公司的推广费用
  • 绵阳住房和城乡建设部网站网站页面优化怎么做
  • 关于git的使用(在gitee和gitcode上部署自己的项目流程)
  • PHP 字符串操作详解
  • 3合一网站怎么做免费数据统计网站
  • 17.基础IO_3
  • Ubuntu 系统掉电导致分区损坏无法启动修复方案
  • 相机模组,模组是什么意思?
  • 申威架构ky10安装php-7.2.10.rpm详细步骤(国产麒麟系统64位)
  • STM32F407 通用定时器
  • lodash-es
  • 股票交易网站建设四会市城乡规划建设局网站
  • API技术深度解析:从基础原理到最佳实践
  • 西安今晚12点封城吗龙岩网站优化
  • 使用有限体积法求解双曲型守恒性方程(一)FV 框架
  • jenkins流水线部署springboot项目
  • YOLOv5:目标检测的实用派王者
  • 《工业之心:Blender 工业场景解构》
  • 【Linux网络】应用层自定义协议
  • unity免费改名工具-Mulligan Renamer
  • Git分支的多人协作
  • 服务外包网站成都住建局官网app
  • 【ABAP函数】+ALSM_EXCEL_TO_INTERNAL_TABLE批导长字段
  • 艺术学院网站模板wordpress二手车模板
  • docker api 常用接口
  • flutter鸿蒙:实现类似B站或抖音的弹幕功能
  • 从静态模型到数据驱动:图观模型编辑器让工程设备真实还原
  • 了解Docker的多阶段构建(Multi-stage Build)
  • [特殊字符] Berry.Live:开箱即用的.NET直播流媒体服务器