第十五届蓝桥杯网络安全个人赛部分赛题解析1(详细)

1、爬虫

题目提示robot,这是当然要进网站robots.txt看看有啥了。

----------(分割线)

注:robots.txt是网站管理者写给robots(一般代表爬虫程序或搜索引擎)的内容,里面描述了网站管理者不希望爬虫做的事,比如:

- 不允许访问某个文件、文件夹

- 允许或禁止某些搜索引擎的访问

- 限制爬虫访问网站的频率

- 更多robots.txt内容了解:如何使用robots.txt及其详解_/robots.txt-CSDN博客

-----------

在url后面加上/robots.txt后回车

得到:

可以看到有一个文件目录,是一串数字加字母???

加到url后面看看...


进去了,点一下试试,

flag!!!!

2、AES加解密

给了一个页面,如图,CyberChef

注意图中红方框的内容,aes加密方式,密钥key、初始化向量IV的值,编码方式UTF-8,加密模式(Mode)CBC,输入(input)原文raw,输出(output)十六进制hex

点了点页面,没反应,好吧,看来得用自己的工具

这里用离线下载的CyberChef

----------

注:CyberChef是一个网页版加解密编码解码的工具,挺方便,有在线版本,也可以离线下载到自己电脑上,建议下载到自己电脑上

在线:https://cyberchef.org/,在线版服务器部署在国外,访问可能有点慢

离线下载:https://github.com/gchq/CyberChef/releases,可以网上查查怎么搭建,教程很多

----------

打开自己的CyberChef

对应给的赛题页面信息,

第一步输入aes加密方法,第二步双击选择AES Decrypt模块(解密模块),也就是第二个,第三步输入key、IV值,赛题已经给出了,并且选择对应的编码方式UTF-8,选择加密模式CBC,这里注意,输入(input)要选择Hex(因为密文输出时为Hex),输出(output)为raw,第四步把密文放到输入大框框里,第五步点击处理,就会看到flag了

这里给出密文,感兴趣的伙伴可以自己下载去试试

4da72144967f1c25e6273950bf29342aae635e2396ae17c80b1bff68d90f16679bb45c15852e0ce88d4864d93e9e3be2

3、wireshark流量分析

拿到赛题,进行解压,得到

从wireshark打开

----------

注:wireshark是一个网络流量包分析工具,可以把经过网卡的所有数据包都记录下来,进行分析查看,具体安装使用可以上网搜索

----------

先ctrl+f搜索:flag,记不住快捷键可以点击编辑->查找分组,然后输入flag,前面选择字符串,直接回车,或者点击查找

可以看到定位到了第144条数据包,http协议,get传参,观察info,看到一些可疑的内容,shell.php、system、cat、flag、base64,选择这条数据,右键选择追踪流

----------

这里为什么要右键,是因为wireshark抓到的包,直观看去(就是下面那部分),基本只能看一下各层协议或者标识啥的,大概按TCP/IP层次模型分开(本人理解,不代表真实结果),所以看流量包具体内容,基本要从tcp流量包(传输层)或者http流量包(应用层)那里去看,看看流量包里面的内容有啥

----------

这里选择http或者tcp都行,因为如图,都一样,你要问不一样是啥样,还没探究,不知道

从request请求体可以看到,get传参,有个木马文件shell.php,通过1337口令,传递并执行了system系统命令,又通过cat命令查看flag的内容,flag经过了base64编码,响应体response响应成功,返回了一串base64编码字符串

ZmxhZ3s3ZDZmMTdhNC0yYjBhLTQ2N2QtOGE0Mi02Njc1MDM2OGMyNDl9Cg==

可以用aes题目中的那个工具CyberChef,也可以用在线工具

直接输入base64,选择第二个模块,用于base64解码,直接将编码字符串输入到input框中,处理即可得出falg

4、RSA加密算法

不了解RSA加密的伙伴可以上网查查看,有很多资料,建议配合视频图片,更易于理解

题目是.py文件,代码如下,所有文字注释为我自己后面所写,原题没有文字注释

from Crypto.Util.number import *
from gmpy2 import *
flag = b'xxx'  # flag被代替了,也可以理解为隐藏了

m =  bytes_to_long(flag)  # m是将字节串flag转化成了长整型数字,也就是明文
p = getPrime(512)  # p是一个512为的素数
q = next_prime(p)  # q是p后面的一个素数
e = 65537  # 公钥e
n = p * q  # 大整数n
phi = (p - 1) * (q - 1)  # n的欧拉值
d = inverse(e, phi)  # 私钥d

d1 = d % q
d2 = d % p
# d1和d2应该是用于混淆,就是没有用的条件
c = pow(m, e, n)  # 得出密文

print(n)
print(d1)
print(d2)
print(c)
# 这里的四个输出每次运行都不一样,因为p每次取值都是随机的,导致后面的值都是随机的

# 94581028682900113123648734937784634645486813867065294159875516514520556881461611966096883566806571691879115766917833117123695776131443081658364855087575006641022211136751071900710589699171982563753011439999297865781908255529833932820965169382130385236359802696280004495552191520878864368741633686036192501791
# 4218387668018915625720266396593862419917073471510522718205354605765842130260156168132376152403329034145938741283222306099114824746204800218811277063324566
# 9600627113582853774131075212313403348273644858279673841760714353580493485117716382652419880115319186763984899736188607228846934836782353387850747253170850
# 36423517465893675519815622861961872192784685202298519340922692662559402449554596309518386263035128551037586034375613936036935256444185038640625700728791201299960866688949056632874866621825012134973285965672502404517179243752689740766636653543223559495428281042737266438408338914031484466542505299050233075829
# 这里的四个很大的整数,是已知的条件,第一个是大整数n,第二个和第三个没啥用,第四个是密文c

----------

引用解释:

Crypto.Util.number这个引用要下载pyCryptodome库才可以使用,pyCryptodome库是实现各种算法和协议的密码模块的集合,包含Cipher,Hash,Protocol,PublicKey,Signature,Util这些子包。 通过以下命令来下载

pip3 install pyCryptodome -i https://pypi.douban.com/simple

gmpy2是一个Python扩展模块,是对GMP的封装,它的前身是gmpy。

GMP(GNU Multiple Precision Arithmetic Library,即GNU高精度算术运算库),它是一个开源的高精度运算库,其中不但有普通的整数、实数、浮点数的高精度运算,还有随机数生成,尤其是提供了非常完备的数论中的运算接口,比如Miller-Rabin素数测试算法、大素数生成、欧几里德算法、求域中元素的逆、Jacobi符号、legendre符号等。

pip install gmpy2

这里安装gmpy2时,网上说要先装wheel,但我没装,也能用,大家安装的时候自己试吧。

----------

RSA逆运算代码

(代码来自网上大佬(https://blog.csdn.net/m0_74345946/article/details/138250482),注释是我自己写的,大佬侵权私信)

from gmpy2 import *
from Crypto.Util.number import *
# 给出相关函数的解释
e = 65537
n = 94581028682900113123648734937784634645486813867065294159875516514520556881461611966096883566806571691879115766917833117123695776131443081658364855087575006641022211136751071900710589699171982563753011439999297865781908255529833932820965169382130385236359802696280004495552191520878864368741633686036192501791
# e:公钥,n:大整数
c = 36423517465893675519815622861961872192784685202298519340922692662559402449554596309518386263035128551037586034375613936036935256444185038640625700728791201299960866688949056632874866621825012134973285965672502404517179243752689740766636653543223559495428281042737266438408338914031484466542505299050233075829
# c:密文
# 上面的参数是已知的
temp = iroot(n, 2)[0]
# gmpy2.iroot(x,y),计算x的y次方根,即将x开y次根号,该函数返回一个含有两个值的元组,
# 第一个值为x开y次根号的值,第二个值为true/faule,代表第一个值的精确度,true代表第一个值是精确的,faule代表第一个值是近似值
# [0]代表取元组第一个值
q = next_prime(temp)  # gmpy.next_prime(n),取相对于n的下一个素数。这里求出了一个素数q
p = n // q  # 得到另一个素数p
phi = (p - 1) * (q - 1)  # 得到n的欧拉值,即phi,该phi在RSA算法中用于得到公钥e和私钥d,e的条件:1<e<phi,且e和phi互素;d*e=1(mod(phi))
d = inverse(e, phi)  # 来自Crypto.Util.number库,inverse(x,y),求 x模y 的 逆元,即x*y=1(mody);这里得到私钥d
m = powmod(c, d, n)  # gmpy2.powmod(x,y,z),求 x的y次 模z 的 余数;根据RSA解密公式,得到明文m
print(long_to_bytes(m))  # 此时的明文m为长整型数字,使用long_to_bytes()函数将其转换为字节串,得到flag

运行得到flag:

后续.......

新人小白,文章有错误的地方,麻烦大佬们评论区指正。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值