前言:继续总结学到的新知识

mfw


在about页面发现,搭建网站时用了git,尝试一下是否为git源码泄露

输入:

http://111.198.29.45:36544/.git/


果然是源码泄露,那就查看一下文件,发现并没有找到flag,在Github上下载git源码泄露工具,可以得到其源码。

输入相应的命令:

python2 GitHack.py http://111.198.29.45:36544/.git/

得到源码,发现并没有flag

查看index.php发现

并没有对GET进去的参数进行过滤,assert函数中参数为表达式可以当作PHP文件来执行,再了解一下以下这两个函数:

strpos() 函数查找字符串在另一字符串中第一次出现的位置。
file_exists() 函数检查文件或目录是否存在

有了assert函数,又没有过滤,可以用system()函数进行查看文件等

?page=flag '.system("ls").'


查看templates

?page=flag '.system("cd templates;ls").'


最后查看flag.php

?page=flag '.system("cat templates/flag.php").'


在源码中即可发现flag

注意:

system("") 中命令使用双引号

NaNNaNNaNNaN-Batman

下载附件,打开文件发现乱码

不过还是能看到<script>等标签的,后缀名改为html

观察了还是没有什么头绪,继续看文件源代码

发现在文件最后有一个eval()函数,改成可以弹窗的alert()函数将脚本文件通过弹窗显示出来

eval() 函数计算 JavaScript 字符串,并把它作为脚本代码来执行


整理好

观察源码,只要满足代码中的正则表达式即可

^    匹配输入字符串的开始位置
$   匹配输入字符串的结尾位置

又限制了e的长度,^$必须匹配到,所以可以构造

e=be0f23233ace98aa

还有一种方法利用控制台直接执行下面的代码

即可得出flag

PHP2


什么也没有,抓包,御剑扫

发现index.php,但是打开还是这个页面,那就试一下index.phps,发现有源码泄露

这里解释一下.phps文件

phps文件就是php的源代码文件,通常用于提供给用户(访问者)查看php代码,因为用户无法直接通过Web浏览器看到php文件的内容,所以需要用phps文件代替。

接下来分析源代码

===是恒等计算符   同时检查表达式的值与类型
==是比较运算符号  不会检查条件式的表达式的类型

第一步需要使这行代码不成立

if("admin"===$_GET[id])

第二步需满足这行代码成立
$_GET[id] = urldecode($_GET[id]);if($_GET[id] == "admin")

由于网站在解析输入的参数时会对非ASCII码的字符进行一次urlencode

所以构造payload时将其中一个字符urlencode两次即可
payload:

http://111.198.29.45:40639/index.php?id=a%2564min

即可得出flag

unserialize3


这个格式再加上题目,很容易就可以想到是考察反序列化的

PHP魔法函数中存在__wakeup()方法,unserialize()会检查是否存在一个__wakeup()方法。如果存在,则先会调用__wakeup()方法。

下面就来构造payload:

O:4:"xctf":1:{s:4:"flag";s:3:"111";}
#xctf后面的1即代表属性个数

发现回显结果为:

bad requests

这里是因为__wakeup()的影响,所以要绕过__wakeup,

当成员属性数目大于实际数目时可绕过wakeup方法(CVE-2016-7124)

故构造payload:

?code=O:4:"xctf":3:{s:4:"flag";s:3:"111";}

即可得出flag

补充:属性

类的变量成员叫做“属性”,或者叫“字段”、“特征”,在本文档统一称为“属性”。属性声明是由关键字 public,protected 或者 private 开头,然后跟一个普通的变量声明来组成。

// 正确的属性声明public $var6 = myConstant;

ics-05


御剑、源码都没有什么线索,点击一下云平台设备维护中心,发现URL有变化

LFI漏洞的黑盒判断方法:
单纯的从URL判断的话,URL中path、dir、file、pag、page、archive、p、eng、语言文件等相关关键字眼的时候,可能存在文件包含漏洞。

所以猜测是应该是文件包含读源码,利用php://filter协议即可

?page=php://filter/read=convert.base64-encode/resource=index.php


base64解码得到index.php源码,在源码中发现关键的代码

$_SERVER['HTTP_X_FORWARDED_FOR'] 获取IP地址
preg_replace($pattern, $replacement, $subject)
搜索 subject 中匹配 pattern 的部分, 以 replacement 进行替换
$pattern: 要搜索的模式,可以是字符串或一个字符串数组。
$replacement: 用于替换的字符串或字符串数组。
$subject: 要搜索替换的目标字符串或字符串数组

这串代码存在一个漏洞,preg_replace函数存在命令执行漏洞
preg_replace()函数使用 /e模式,导致代码执行的问题

/e 修正符使 preg_replace() 将 replacement 参数当作 PHP 代码(在适当的逆向引用替换完之后)。提示:要确保 replacement 构成一个合法的 PHP 代码字符串,否则 PHP 会在报告在包含 preg_replace() 的行中出现语法解析错误。

所以利用这个漏洞可以执行一些命令

抓包,首先设置IP地址为127.0.01,再传入三个参数的值

?pat=/1234/e&rep=system("ls")&sub=1234


发现一个特别的文件夹s3chahahaDir,进行查看

?pat=/1234/e&rep=system("cd%20s3chahahaDir%26%26%20ls")&sub=1234

在这里用空格会没有变化,用%20或者+代替,%26%26&&

A&&B   A执行成功,然后才会执行B


发现flag文件,进行查看

?pat=/1234/e&rep=system("cd%20s3chahahaDir/flag%26%26%20ls")&sub=1234


使用cat命令查看flag.php

?pat=/1234/e&rep=system("cat%20s3chahahaDir/flag/flag.php")&sub=1234

即可得出flag

总结:这次就先总结到这里,下次继续总结!

XCTF(攻防世界)—进阶web题Write Up(二)相关推荐

  1. XCTF(攻防世界)—进阶web题Write Up(一)

    前言:这段时间做了一些XCTF的web进阶题,真的是学习到了很多知识,就来总结一下. Cat 一开始以为是命令注入,恰好最近学习了命令注入,就先来测试一下: 输入127.0.0.1,发现是可以ping ...

  2. XCTF(攻防世界)—新手web题Write Up

    前言:之前一直没有接触过web这方面的题,这次利用暑假时光好好学习,web真的是很有趣,虽然有的题很简单,但可以学习到很多知识,话不多说,做题. view_source 用老版火狐浏览器,直接查看源码 ...

  3. XCTF攻防世界--第2题快来围观学习

    解题方法写在代码注释里了 题目: #include #include //大概阅读整体代码,通过最后几行代码我们得知我们需要的flag就是代码中的hash变量 //此时我们逆向推到hash变量的来源 ...

  4. XCTF攻防世界Web新手入门题大全

    XCTF攻防世界Web之WriteUp无图版 (Tips:有图版本,请移步我的资源,自行下载doc文档) 0x00 准备 [内容] 在xctf官网注册账号,即可食用. [目录] 目录 0x01 vie ...

  5. XCTF攻防世界练习区-web题(新手)

    XCTF攻防世界练习区-web题(新手) https://adworld.xctf.org.cn/task?now_checked_num=3&name=web 001 view_source ...

  6. XCTF攻防世界Web之WriteUp

    XCTF攻防世界Web之WriteUp 0x00 准备 [内容] 在xctf官网注册账号,即可食用. [目录] 目录 0x01 view-source2 0x02 get post3 0x03 rob ...

  7. 攻防世界MISC刷题1-50

    目录 1.ext3 2.base64stego 3.功夫再高也怕菜刀 4.easycap 5.reverseMe 6.Hear-with-your-Eyes 7.What-is-this 8.norm ...

  8. XCTF攻防世界 Normal_RSA

    XCTF攻防世界 Normal_RSA 实验环境: windows 10 实验所需工具: python工具: yafu (可以在https://github.com/DarkenCode/yafu上下 ...

  9. 攻防世界逆向高手题之reverse-for-the-holy-grail-350

    攻防世界逆向高手题之reverse-for-the-holy-grail-350 继续开启全栈梦想之逆向之旅~ 这题是攻防世界逆向高手题的reverse-for-the-holy-grail-350 ...

最新文章

  1. XDOC Office Server 开源了,Office文档完美转换为PDF
  2. php和js中,utf-8编码转成base64编码
  3. windows下将iso文件挂载到文件夹
  4. 【剑指offer28:字符串的排列】【java】
  5. flink入门_阿里巴巴为何选择Flink?20年大佬分11章讲解Flink从入门到实践!
  6. Python 第三方模块之 selenium - 模拟操作 Chrome 浏览器
  7. Leetcode每日一题:101.symmetric-tree(对称二叉树)
  8. 应用HTK搭建语音拨号系统2:创建单音素HMM模型
  9. EasyRecovery14免费激活码序列号数据恢复软件 简体中文绿色直装版
  10. 配置管理工具应该具有的一般特性
  11. 苹果maccms V10采集插件下载全自动配置定时任务采集教程
  12. dorado7.x argument type mismatch
  13. 开关三极管的导通和截止条件
  14. java fps计算_帧率(FPS)计算的六种方法总结
  15. 计算机考研专业课——c语言
  16. win10系统映像恢复
  17. 新浪微博技术分享:微博短视频服务的优化实践之路
  18. H5中 iphoneX适配
  19. 乐吾乐零部件拆解可视化解决方案
  20. 使用RestTemplate请求第三方接口出错,没抛出异常?

热门文章

  1. 量子计算机人的大脑,人类的大脑是量子计算机吗?科学家正在进行测试!
  2. python高斯分布训练_Python画图高斯分布的示例
  3. 节能原理 (能量平衡)
  4. Docker安装mysql并连接
  5. 申请补办 CET(纸笔考试)成绩证明的方法
  6. 旷视研究院博士图鉴|Be that challenger
  7. 深度学习中多层全连接网络的梯度下降法及其变式
  8. 已经无法合并还报请合并git_GIT 分支管理:创建与合并分支、解决合并冲突
  9. 挂代理无法访问网页了怎么办_微信H5网页授权
  10. uni-app——一种通过Nginx反向代理处理302重定向请求解决网络请求中无法获取Cookie的解决方案