pwnable-----coin1和blackjack
coin1
-
看題,連上去,發現要做題還要在60秒做一百題(怎麼可能嘛)
-
分析就寫腳本開始,(題中又說網絡不好可以在服務器端寫,嘿嘿)
-
那直接連接上一題 ssh [email protected] -p2222 (pw:guest) 。就行了,在cd /tmp下寫就好了這裏你會發現已經有大佬寫好了的(真好)叫coin.py,coin1.py,coin2.py(還挺多的)
# coding: utf-8
from socket import*
import random
import time
HOST='0.0.0.0'
PORT=9007
#建立socket對象
client=socket(AF_INET,SOCK_STREAM)
#AF_INET表示將使用標準的ipv4地址或主機名
#SOCK_STREAM說明這是一個TCP客戶端
client.connect((HOST,PORT))#連接
data = client.recv(1024)
time.sleep(4)
for i in range(100):
data = client.recv(1024)#接收數據
int_cnt=data.find('N=')+2 #int_cnt用於找到N,C
N=0
C=0
while True:
N+=int(data[int_cnt])
int_cnt+=1
if data[int_cnt]==' ':
break
N*=10
int_cnt=data.find('C=')+2
while True:
C+=int(data[int_cnt])
int_cnt+=1
if data[int_cnt]<'0' :
break
if data[int_cnt]>'9' :
break
C*=10
print 'get N=%d'%N,'get C=%d'%C#打印N,C
left=0
right=N-1
mid=(left+right)/2#二分
for i in xrange(C):#C次詢問
str_ask=[str(n) for n in xrange(left,mid+1)]
str_ask=" ".join(str_ask)#構造要詢問的硬幣
client.send(str_ask+"\n")#發送數據
str_weight=client.recv(1024)#接收數據
str_weight.split("\n")
int_weight=int(str_weight)
print "int_weight = ",int_weight,"l=%d mid=%d r=%d"%(left,mid,right)
if int_weight!=((mid-left+1)*10):
right=mid
mid=(right+left)/2
else:
left=mid+1
mid=(left+right)/2
client.send(str(mid)+"\n")
ans=client.recv(1024)
print "ans=",ans
ans=client.recv(1024)#flag
print "ans=%s"%ans
client.close()
在一邊跑coin1和腳本就得到flag
blackjack
- 看題
看看網址發現網址403報錯,沒有辦法就去看看博主門怎麼寫出來的(嘻嘻)
這位大神寫得挺好的 - 這是一道溢出的題
這樣就能cat flag。