Day23

never give up

http://123.206.87.240:8006/test/hello.php

 
本题要点:url编码,base64编码,代码审计,php函数
 
 
 查看源码~
 
访问1p.html
http://123.206.87.240:8006/test/1p.html
 
发现时bugku主页 
查看一下源码
view-source:http://123.206.87.240:8006/test/1p.html
 
url解码得到:
 
 
<script>window.location.href='http://www.bugku.com';</script>
<!--JTIyJTNCaWYlMjglMjElMjRfR0VUJTVCJTI3aWQlMjclNUQlMjklMEElN0IlMEElMDloZWFkZXIlMjglMjdMb2NhdGlvbiUzQSUyMGhlbGxvLnBocCUzRmlkJTNEMSUyNyUyOSUzQiUwQSUwOWV4aXQlMjglMjklM0IlMEElN0QlMEElMjRpZCUzRCUyNF9HRVQlNUIlMjdpZCUyNyU1RCUzQiUwQSUyNGElM0QlMjRfR0VUJTVCJTI3YSUyNyU1RCUzQiUwQSUyNGIlM0QlMjRfR0VUJTVCJTI3YiUyNyU1RCUzQiUwQWlmJTI4c3RyaXBvcyUyOCUyNGElMkMlMjcuJTI3JTI5JTI5JTBBJTdCJTBBJTA5ZWNobyUyMCUyN25vJTIwbm8lMjBubyUyMG5vJTIwbm8lMjBubyUyMG5vJTI3JTNCJTBBJTA5cmV0dXJuJTIwJTNCJTBBJTdEJTBBJTI0ZGF0YSUyMCUzRCUyMEBmaWxlX2dldF9jb250ZW50cyUyOCUyNGElMkMlMjdyJTI3JTI5JTNCJTBBaWYlMjglMjRkYXRhJTNEJTNEJTIyYnVna3UlMjBpcyUyMGElMjBuaWNlJTIwcGxhdGVmb3JtJTIxJTIyJTIwYW5kJTIwJTI0aWQlM0QlM0QwJTIwYW5kJTIwc3RybGVuJTI4JTI0YiUyOSUzRTUlMjBhbmQlMjBlcmVnaSUyOCUyMjExMSUyMi5zdWJzdHIlMjglMjRiJTJDMCUyQzElMjklMkMlMjIxMTE0JTIyJTI5JTIwYW5kJTIwc3Vic3RyJTI4JTI0YiUyQzAlMkMxJTI5JTIxJTNENCUyOSUwQSU3QiUwQSUwOXJlcXVpcmUlMjglMjJmNGwyYTNnLnR4dCUyMiUyOSUzQiUwQSU3RCUwQWVsc2UlMEElN0IlMEElMDlwcmludCUyMCUyMm5ldmVyJTIwbmV2ZXIlMjBuZXZlciUyMGdpdmUlMjB1cCUyMCUyMSUyMSUyMSUyMiUzQiUwQSU3RCUwQSUwQSUwQSUzRiUzRQ==-->
 
 
发现还有一层base64
 
解密
 
 
 
又是一层url~
继续解密
发现是这样的一段代码
 
<!--";if(!$_GET['id'])          #限制 URL 查询字符串中必须有非空非零变量 id
{
    header('Location: hello.php?id=1');
    exit();
}
$id=$_GET['id'];
$a=$_GET['a'];
$b=$_GET['b'];
if(stripos($a,'.'))               #限制变量 $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)             
#要满足以下 5 条表达式才会爆 flag(见代码后面)
#变量 $data 弱等于字符串 bugku is a nice plateform!  
{
    require("f4l2a3g.txt");
}
else
{
    print "never never never give up !!!";
}
 
 
?>-->
 
 
 
5条表达式~
  • 变量 $id 弱等于整型数 0
  • 变量 $b 的长度大于 5
  • 字符串 1114 要与字符串 111 连接变量 $b 的第一个字符构成的正则表达式匹配
  • 变量 $b 的第一个字符弱不等于整型数 4
  • 变量 $data 弱等于字符串 bugku is a nice plateform! 

查一下php的手册,https://php.net/manual/zh/types.comparisons.php

 
 
 
 
PHP 伪协议
php:// - 访问各种I / O流
 
查一下php的手册~~~
参考:https://www.php.net/manual/en/wrappers.php.php
 
源码中变量 $data 是由 file_get_contents() 函数读取变量 $a 的值而得,所以 $a 的值必须为数据流。
 
在服务器中自定义一个内容为 bugku is a nice plateform! 文件,再把此文件路径赋值给 $a,显然不太靠谱。
 
因此这里用伪协议 php:// 来访问输入输出的数据流,其中 php://input可以访问原始请求数据中的只读流。
这里令 $a = "php://input",并在请求主体中提交字符串 bugku is a nice plateform!。
 
 
 
再次需要查查php手册了~~
 
参考:https://php.net/manual/en/function.eregi.php
 
eregi() 截断漏洞
 
ereg() 函数或 eregi() 函数存在空字符截断漏洞,即参数中的正则表达式或待匹配字符串遇到空字符则截断丢弃后面的数据。
 
源码中待匹配字符串(第二个参数)已确定为 "1114",正则表达式(第一个参数)由 "111" 连接 $b 的第一个字符组成,若令 substr($b,0,1) = "\x00",即满足 "1114" 与 "111"匹配。因此,这里假设 $b = "\x0012345",才能满足条件。
 
 
 
回到题目中
 
构造 payload
 
分析出以上三个变量应该等于什么值之后
接下来构造出对应的 payload 去 拿flag 了。
 
注意一点~
在构造变量 b 中的空字符时,过早将空字符 \x00 放入,在提交请求时导致请求头截断,继而请求失败,得不到响应。
 
因为
 

所以构造下面语句
 
 
 
 
或者有一种投机取巧的方法,直接访问~
 
 
 
 
 
完成!
 
 
参考资料:
https://php.net/manual/zh/types.comparisons.php
https://www.php.net/manual/en/wrappers.php.php
https://php.net/manual/en/function.eregi.php
 

Bugku-CTF之never give up的更多相关文章

  1. Bugku CTF练习题---MISC---贝斯手

    Bugku CTF练习题---MISC---贝斯手 flag:flag{this_is_md5_and_base58} 解题步骤: 1.观察题目,下载附件 2.下载后进行解压,得到了一张图片.一个压缩 ...

  2. Bugku CTF练习题---MISC---telnet

    Bugku CTF练习题---MISC---telnet flag:flag{d316759c281bf925d600be698a4973d5} 解题步骤: 1.观察题目,下载附件 2.拿到手以后发现 ...

  3. Bugku CTF练习题---MISC---眼见非实

    Bugku CTF练习题---MISC---眼见非实 flag:flag{F1@g} 解题步骤: 1.观察题目,下载附件 2.拿到手以后发现是一个压缩包,打开是一个Word文档,观察其中的内容,除了开 ...

  4. Bugku CTF练习题---MISC---宽带信息泄露

    Bugku CTF练习题---MISC---宽带信息泄露 flag:053700357621 解题步骤: 1.观察题目,下载附件 2.下载到电脑里发现是一个bin文件,二进制文件的一个种类,再看名称为 ...

  5. Bugku CTF练习题---MISC---这是一张单纯的图片

    Bugku CTF练习题---MISC---这是一张单纯的图片 flag:key{you are right} 解题步骤: 1.观察题目,下载附件 2.打开以后发现是一张图片,修改文件扩展名,查看属性 ...

  6. Bugku CTF练习题---加密---ok

    Bugku CTF练习题---加密---ok flag:flag{ok-ctf-1234-admin} 解题步骤: 1.观察题目,发现规律 2.发现所有内容都是ook写的, 直接上网搜索一下原因,发现 ...

  7. Bugku CTF练习题---加密---聪明的小羊

    Bugku CTF练习题---加密---聪明的小羊 flag:KEY{sad23jjdsa2} 解题步骤: 1.观察题目,发现其中的信息 2.经过题目判断,得知该题属于栅栏密码的一种,并且介绍中表明了 ...

  8. Bugku CTF练习题---分析---flag被盗

    Bugku CTF练习题---分析---flag被盗 flag:flag{This_is_a_f10g} 解题步骤: 1.观察题目,下载附件 2.下载的文件是一个数据包,果断使用wireshark打开 ...

  9. Bugku CTF练习题---杂项---隐写3

    Bugku CTF练习题---杂项---隐写3 flag:flag{He1l0_d4_ba1} 解题步骤: 1.观察题目,下载附件 2.打开图片,发现是一张大白,仔细观察一下总感觉少了点东西,这张图好 ...

  10. Bugku CTF练习题---加密---凯撒部长的奖励

    Bugku CTF练习题---加密---凯撒部长的奖励 flag:SYC{here_Is_yOur_rEwArd_enjOy_It_Caesar_or_call_him_vIctOr_is_a_Exc ...

随机推荐

  1. sort 用法

      Sort函数有三个参数: (1)第一个是要排序的数组的起始地址. (2)第二个是结束的地址(最后一位要排序的地址) (3)第三个参数是排序的方法,可以是从大到小也可是从小到大,还可以不写第三个参数 ...

  2. jQuery效果-----fadeIn()、fadeOut()、fadeToggle()、fadeTo()

    fadeIn(),fadeOut(),fadeToggle(),fadeTo() fadeIn()-----淡入已经隐藏的元素(把隐藏的被选元素渐渐显示出来). 语法:$(selector).fade ...

  3. Linux ,Ubuntu 分区建议大小

    分区 分区类型 文件系统 大小 /boot 逻辑分区 Ext4 300M swap 逻辑分区 交换空间 13G / 主分区 Ext4 30G /home 逻辑分区 Ext4 42G /usr 逻辑分区 ...

  4. centos7安装nodejs运行环境及卸载

    一.安装1.进入官网下载最新版本https://nodejs.org/en/ 选择下载后上传或直接使用wget下载 wget https://nodejs.org/dist/v8.11.2/node- ...

  5. python中list添加元素的方法append()、extend()和insert()

    append()函数:将新元素追加到列表末尾 In [1]: a = [1, 2, 3, 4, 5] In [2]: a.append(6) In [3]: a Out[3]: [1, 2, 3, 4 ...

  6. WinAPI 字符及字符串函数(5): IsCharAlpha - 是否是个字母

    unit Unit1; interface uses   Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, For ...

  7. NodeJS笔记(五) 使用React Native 创建第一个 Android APP

    参考:原文地址 几个月前官方推出了快速创建工具包,由于对React Native不熟悉这里直接使用这2个工具包进行创建 1. create-react-native-app(下文简称CRNA): 2. ...

  8. JMeter 压测基础(四)——Java工程测试

    JMeter Java工程测试 1.eclipse中新建工程 2.导入需要的jar包 从JMeter安装目录lib/ext中两个jar包buildPath到Java project中,分别是“Apac ...

  9. 2018-2019-2 网络对抗技术 20165336 Exp4 恶意代码分析

    2018-2019-2 网络对抗技术 20165336 Exp4 恶意代码分析 1.实践目标 1.1是监控你自己系统的运行状态,看有没有可疑的程序在运行. 1.2是分析一个恶意软件,就分析Exp2或E ...

  10. 内网gitlab11.2升级至11.4.5

    当前gitlab版本 宿主机是一台ubuntu 运行备份命令 sudo gitlab-rake gitlab:backup:create STRATEGY=copy 升级命令 sudo apt-get ...