博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Web 4-24
阅读量:2154 次
发布时间:2019-05-01

本文共 2627 字,大约阅读时间需要 8 分钟。

Web 4-24实战篇

攻防世界——NaNNaNNaNNaN-Batman

题目:在这里插入图片描述

1.附件没有后缀,用记事本打开后发现 script 标签,一个JS代码,不过中间乱码了。然后还是把文件后缀改为了HTML,用浏览器打开,发现
在这里插入图片描述
代码还是乱的,,,输入一些东西,也没有过多反应。

2.还是看不懂,然后把内容部分执行函数eval修改为alert,弹窗显示正常。

congratulation,得到
第二种方法:将代码中的eval()函数换成console.log()也可将js代码完整显示出来。
在这里插入图片描述
3.代码复制,整理。这里可以用一个在线工具,专门整理美化JS代码的。
整理得到:

function $() {
var e = document.getElementById("c").value; if (e.length == 16) if (e.match(/^be0f23/) != null) if (e.match(/233ac/) != null) if (e.match(/e98aa$/) != null) if (e.match(/c7be9/) != null) {
var t = ["fl", "s_a", "i", "e}"]; var n = ["a", "_h0l", "n"]; var r = ["g{", "e", "_0"]; var i = ["it'", "_", "n"]; var s = [t, n, r, i]; for (var o = 0; o < 13; ++o) {
document.write(s[o % 4][0]); s[o % 4].splice(0, 1) } }}document.write('');delete _

其实就是只要输入的与几个if中一 一匹配即可。

要满足上面的if,在正则中^表示开头,$表示末尾,同时还要满足长度为16位,删除一些重复的刚刚好。
可以得出要构造一个字符串,并且满足以下条件:
长度为16
以be0f23开头
以e98aa结尾
包含233ac
包含c7be9

提交内容:be0f233ac7be98aa

得到:flag{it’s_a_h0le_in_0ne}

当然还有另一种解法:

就是直接把中间那段代码直接运行,丢给浏览器的控制台,跑出来就是flag。
或者自己写出运行结果

var t = ["fl", "s_a", "i", "e}"];                        var n = ["a", "_h0l", "n"];                        var r = ["g{", "e", "_0"];                        var i = ["it'", "_", "n"];                        var s = [t, n, r, i];                        for (var o = 0; o < 13; ++o) {
document.write(s[o % 4][0]); s[o % 4].splice(0, 1)

在这里插入图片描述

总结:本题考查的是javascript的代码审计、正则表达式。

easy_RSA

在这里插入图片描述

RSA是什么
RSA公开密钥密码体制是一种使用不同的加密密钥与解密密钥,“由已知加密密钥推导出解密密钥在计算上是不可行的”密码体制

RSA公开密钥密码体制的原理是:根据数论,寻求两个大素数比较简单,而将它们的乘积进行因式分解却极其困难,因此可以将乘积公开作为加密密钥

解题

RSA的算法涉及三个参数,n、e、d。其中,n是两个大质数p、q的积,n的二进制表示所占用的位数,就是所谓的密钥长度。e和d是一对相关的值,e可以任意取,但要求e与(p-1)(q-1)互质;再选择d,要求
(de)mod((p-1)*(q-1))=1。(n,e),(n,d)就是密钥对。其中(n,e)为公钥,(n,d)为私钥。RSA加解密的算法完全相同,设A为明文,B为密文,则:A=B^d mod n;B=A^e mod n;(公钥加密体制中,一般用公钥加密,私钥解密)e和d可以互换使用,即:A=B^d mod n;B=A^e mod n
直接给了p,q,e,求d,即为暴力破解RSA的私钥之一的d。

写脚本:

import math#求欧拉函数f(n)def getEuler(prime1, prime2):    return (prime1-1)*(prime2-1)#求私钥ddef getDkey(e,Eulervalue):#可以辗转相除法   k=1   while True:      if (((Eulervalue * k) + 1) %e)== 0:         (d,m)=divmod(Eulervalue * k + 1,e)         return d      #避免科学计数法最后转int失去精度      k+=1#求明文def Ming(c,d,n):   return pow(c,d,n)if  __name__=='__main__':   p=473398607161   q=4511491   d=getDkey(17, getEuler(p,q))   print('私钥为: %d'%d)

在这里插入图片描述

cyberpeace{125631357777427553}

转载地址:http://zqvwb.baihongyu.com/

你可能感兴趣的文章
Eclipse Memory Analyzer 使用技巧
查看>>
tomcat连接超时
查看>>
谈谈编程思想
查看>>
iOS MapKit导航及地理转码辅助类
查看>>
检测iOS的网络可用性并打开网络设置
查看>>
简单封装FMDB操作sqlite的模板
查看>>
iOS开发中Instruments的用法
查看>>
iOS常用宏定义
查看>>
什么是ActiveRecord
查看>>
有道词典for mac在Mac OS X 10.9不能取词
查看>>
关于“团队建设”的反思
查看>>
利用jekyll在github中搭建博客
查看>>
Windows7中IIS简单安装与配置(详细图解)
查看>>
linux基本命令
查看>>
BlockQueue 生产消费 不需要判断阻塞唤醒条件
查看>>
强引用 软引用 弱引用 虚引用
查看>>
数据类型 java转换
查看>>
"NetworkError: 400 Bad Request - http://172.16.47.117:8088/rhip/**/####t/approval?date=976
查看>>
mybatis 根据 数据库表 自动生成 实体
查看>>
win10将IE11兼容ie10
查看>>