WEB

[HCTF 2018]admin

页面没什么功能点,注册一个账号并登录,在更改密码的页面发现注释,存在源码。

config.py中发现SECRET_KEY:ckj123,同时发现session为jwt,去解密一下。

kab1改成admin以及10改成1得到的session与原来的进行更换,得到flag。

[De1CTF 2019]SSRF Me

题目给了源码

#! /usr/bin/env python
#encoding=utf-8
from flask import Flask
from flask import request
import socket
import hashlib
import urllib
import sys
import os
import json
reload(sys)
sys.setdefaultencoding('latin1')app = Flask(__name__)secert_key = os.urandom(16)class Task:def __init__(self, action, param, sign, ip):self.action = actionself.param = paramself.sign = signself.sandbox = md5(ip)if(not os.path.exists(self.sandbox)):          #SandBox For Remote_Addros.mkdir(self.sandbox)def Exec(self):result = {}result['code'] = 500if (self.checkSign()):if "scan" in self.action:tmpfile = open("./%s/result.txt" % self.sandbox, 'w')resp = scan(self.param)#可以读取文件if (resp == "Connection Timeout"):result['data'] = respelse:print(resp)tmpfile.write(resp)tmpfile.close()result['code'] = 200if "read" in self.action:f = open("./%s/result.txt" % self.sandbox, 'r')result['code'] = 200result['data'] = f.read()if result['code'] == 500:result['data'] = "Action Error"else:result['code'] = 500result['msg'] = "Sign Error"return resultdef checkSign(self):if (getSign(self.action, self.param) == self.sign):return Trueelse:return False#generate Sign For Action Scan.
@app.route("/geneSign", methods=['GET', 'POST'])
def geneSign():param = urllib.unquote(request.args.get("param", ""))action = "scan"#此处action被定为scanreturn getSign(action, param)@app.route('/De1ta',methods=['GET','POST'])
def challenge():action = urllib.unquote(request.cookies.get("action"))param = urllib.unquote(request.args.get("param", ""))sign = urllib.unquote(request.cookies.get("sign"))ip = request.remote_addrif(waf(param)):return "No Hacker!!!!"task = Task(action, param, sign, ip)return json.dumps(task.Exec())
@app.route('/')
def index():return open("code.txt","r").read()def scan(param):socket.setdefaulttimeout(1)try:return urllib.urlopen(param).read()[:50]except:return "Connection Timeout"def getSign(action, param):return hashlib.md5(secert_key + param + action).hexdigest()def md5(content):return hashlib.md5(content).hexdigest()def waf(param):check=param.strip().lower()if check.startswith("gopher") or check.startswith("file"):#禁用了gopher和file两个协议return Trueelse:return Falseif __name__ == '__main__':app.debug = Falseapp.run(host='0.0.0.0')

首先看路由:
1、通过/geneSign路由我们可以过的hashlib.md5(secert_key + param + action).hexdigest()的值,且action的值被锁定为scan
2、通过/De1ta路由可以读取文件,通过Exec函数,读取文件的地方已在源码中注释。
3、但是想要执行Exec函数里面的读取文件的代码,还需要通过checkSign()的验证,也就是验证两次的md5值是否相等。
分析完路由开始解题,checkSign()好绕过,通过构造/geneSign?param=xxx即可得到md5值,虽然不知道secert_key的值,但是也没有必要知道,我们只需要得到加密后的md5值,再把它放入sign中,访问/De1ta路由即可。
然后构造/geneSign?param=flag.txtread访问得到9a6fa1811f9ac95a5b6d72c5c12ee9d7,再构造如下内容读取flag

[SUCTF 2019]Pythonginx

题目给了源码

@app.route('/getUrl', methods=['GET', 'POST'])
def getUrl():url = request.args.get("url")host = parse.urlparse(url).hostnameif host == 'suctf.cc':return "我扌 your problem? 111"parts = list(urlsplit(url))host = parts[1]if host == 'suctf.cc':return "我扌 your problem? 222 " + hostnewhost = []for h in host.split('.'):newhost.append(h.encode('idna').decode('utf-8'))parts[1] = '.'.join(newhost)#去掉 url 中的空格finalUrl = urlunsplit(parts).split(' ')[0]host = parse.urlparse(finalUrl).hostnameif host == 'suctf.cc':return urllib.request.urlopen(finalUrl).read()else:return "我扌 your problem? 333"

这道题用的是这道题用的是blackhat议题之一HostSplit-Exploitable-Antipatterns-In-Unicode-Normalization
网上的一个脚本

from urllib.parse import urlparse,urlunsplit,urlsplit
from urllib import parse
def get_unicode():for x in range(65536):uni=chr(x)url="http://suctf.c{}".format(uni)try:if getUrl(url):print("str: "+uni+' unicode: \\u'+str(hex(x))[2:])except:passdef getUrl(url):url=urlhost=parse.urlparse(url).hostnameif host == 'suctf.cc':return Falseparts=list(urlsplit(url))host=parts[1]if host == 'suctf.cc':return Falsenewhost=[]for h in host.split('.'):newhost.append(h.encode('idna').decode('utf-8'))parts[1]='.'.join(newhost)finalUrl=urlunsplit(parts).split(' ')[0]host=parse.urlparse(finalUrl).hostnameif host == 'suctf.cc':return Trueelse:return Falseif __name__=='__main__':get_unicode()

同样原理构造/getUrl?url=file://suctf.cℂ/../../../../../etc/passwd来读取文件,读取配置文件发现flag的位置,/usr/local/nginx/conf/nginx.conf

最后构造如下payload读取flag

/getUrl?url=file://suctf.cℂ/../../../../../usr/fffffflag

[ASIS 2019]Unicorn shop

进入题目,发现有个购买东西的地方

但是全部购买不成功,如果价格输入两个字符以上,还会说你超出了字符限制(1个字符),再根据题目的提示Unicode,想到输入一个Unicode字符进去购买第四个商品,也就是flag,在这个网站上面找到这样的一个字符

其UTF-8编码为0xE1 0x8D 0xBC,也就是咱们输入%E1%8D%BC即可,然后购买得到flag。

MISC

弱口令

在压缩包的注释中发现东西

将其莫斯解密之后得到密码HELL0FORUM,得到一张图片,使用lsb隐写脚本进行解密,因为题目叫做弱口令,所以尝试密码123456,最后得到flag{jsy09-wytg5-wius8}
python2 lsb.py extract 1.png new 123456

[V&N2020 公开赛]拉胯的三条命令

使用这条命令即可

tcpdump -n -r nmapll.pcapng 'tcp[13] = 18' | awk '{print $3}'| sort -u

[SUCTF 2019]Game

题目给了两个附件,在SRC文件夹的index.html里面发现一段字符串,尝试解密发现是base32的,得到一个假的flag:suctf{hAHaha_Fak3_F1ag}
然后在图片中发现存在lsb隐写,全部开启0通道得到一段字符串,在网上搜索了很多发现是3DES加密,以前是不知道的,这是由字符串的头U2FsdGVkX1判断出来的,然后进行3DES解密即可得到flag,密码为第一次得到的suctf{hAHaha_Fak3_F1ag},3DES在线解密地址。

百里挑一

提取出来所有的http请求,发现很多张图片,在kali里面使用如下命令得到一半的flag

剩下来的一半在tcp的114里面(网上搜到的,哈哈,真难找,怎么会有人出这种东西,一点提示没有)

[ACTF新生赛2020]swp

先导出http流中的文件,发现一个伪加密的压缩包,但是我没有手动修复成功,使用ZipCenOp工具修复,成功得到flag。

java -jar .\ZipCenOp.jar r .\secret.zip

BUUCTF-刷题记录-3相关推荐

  1. BUUCTF刷题记录(7)

    文章目录 web [NPUCTF2020]ezinclude [NPUCTF2020]ReadlezPHP [GXYCTF2019]BabysqliV3.0 非预期1 非预期2 预期 [NCTF201 ...

  2. BUUCTF刷题记录(2)

    文章目录 web [De1CTF 2019]SSRF Me(未完成) [极客大挑战 2019]PHP [极客大挑战 2019]Knife [极客大挑战 2019]LoveSQL [RoarCTF 20 ...

  3. buuctf刷题记录(6)

    [MRCTF2020]Xor 查壳: 拖入IDA中: 跟进,但是我们无法对关键函数sub_401090查看伪代码: 然后我们就直接看: 再函数中可以看到v0和byte_4212c0按位异或,最后得到b ...

  4. 【BUUCTF刷题记录】[极客大挑战 2019] Http

    1. 打开靶场,看起来给的不是一个完整的地址,复制一下访问 http://node4.buuoj.cn:26551/ 显示一个页面,找了一下没有用于输入的框. 右击查看源代码,发现一个名为Secret ...

  5. BUUCTF刷题记录 Pokémon

    [GKCTF2020]Pokémon 下载安装包 进入游戏 来到天元镇 接着做任务 经过101道路 道吉镇 到103道路 发现flag

  6. buuctf刷题记录21 [网鼎杯 2020 青龙组]jocker

    今天挑战一下,结果最后还是看了别人的wp才写出来的 无壳,ida查看发现不能f5,原因堆栈不平衡 进行栈指针修改 修改出错的地方的栈指针偏移,快捷键alt+k,值改为0 然后就能f5了, 逻辑也不难, ...

  7. [buuctf]刷题记录web

    文章目录 反序列化 pingpingping [极客大挑战]http [极客大挑战 2019]PHP [极客大挑战 2019]Knife [极客大挑战 2019]Secret File [ACTF20 ...

  8. BUUCTF刷题记录 Ping Ping Ping

    [GXYCTF2019]Ping Ping Ping 进入页面 然后/?ip=127.0.0.1|ls 进入 读取flag.php 再cat$IFS$1indnx.php 再变量拼接 ?ip=127. ...

  9. buuctf rsa刷题记录(记几种类型的RSA攻击二)

    前言 最近学习了点儿rsa这里总结以下我的buctf rsa部分刷题记录 dp,dp泄露 场景描述: 假设题目仅给出p,q,dp,dq,c,即不给公钥e 这种参数是为了让解密的时候更快速产生的 dp= ...

  10. BUUCTF-2020寒假刷题记录

    BUUCTF-2020寒假刷题记录 Web [RoarCTF 2019]Easy Calc 打开源码,看到calc.php,打开看到源码. 在 num 前面加个空格即可绕过 ? num=phpinfo ...

最新文章

  1. 中小企业网站建设不妨试试快速建站
  2. liunx服务(Nginx服务器 web服务器源码包和rpm 服务平滑升级)
  3. mpvue开发微信小程序之picker
  4. 数据中心ECC值班长岗位提升工作总结
  5. [转载]动态规划之0-1背包问题
  6. 备份mysql数据库的思路
  7. 前端学习(1743):前端调试值之调试元素的hover样式
  8. vue-day03-vue组件化开发
  9. linux 监控命令iostat,Linux性能监控分析命令(三)—iostat命令介绍
  10. jdbc教程_JDBC教程
  11. 了解速率控制模式:什么是 CBR、VBR、CRF和Capped-CRF?
  12. 【Microsoft Word 2010】页面部分双栏,添加脚注后导致双栏内容换页的解决方法
  13. 图库/相册/播放器看不到迅雷下载的视频的解决办法
  14. 【附源码】计算机毕业设计Python安卓基于安卓的校园跑腿代购476ww(源码+程序+LW+调试部署)
  15. X11VNC远程连接Ubuntu
  16. Unity射线与UI碰撞检测
  17. 参数估计:对无偏性的理解
  18. 用计算机处理图像属于啥技术,计算机技术在图像处理中的应用
  19. ThinkPHP5.0教程学习06:TP5 数据库与模型操作
  20. js实现幻灯片效果二

热门文章

  1. 简记_光耦的主要参数及应用
  2. 就 3 点,提升工作效率
  3. ipadpro如何分屏_不再泡面!大学生如何用iPad高效学习
  4. 第11篇- 抓取免费代理IP并搭建自己的代理IP池
  5. U盘无法打开提示格式化解决方案
  6. Python 点滴 V
  7. 扩展正则表达式及应用
  8. 顾盼华发鸿蒙怦然而梦是什么意思,最美的承诺情话
  9. LeetCode 区间子数组个数
  10. 害怕失败,所以全力以赴