coin1 - pwnable_pwbable.kr.coin1-程序员宅基地

技术标签: coin1 pwnable  PWN  coin1  pwnable  pwnable.kr  

coin1 - pwnable

题目

脚本分析

题目利用二分法找出假硬币。游戏需要进行100轮,每轮得一分。游戏与服务器交互?。

需要注意一点,每一轮找出并输入假硬币之后,需要再一次输入假硬币的序号,开启下一轮的游戏或获得flag。

~$ nc pwnable.kr 9007

	---------------------------------------------------
	-              Shall we play a game?              -
	---------------------------------------------------
	
	You have given some gold coins in your hand
	however, there is one counterfeit coin among them
	counterfeit coin looks exactly same as real coin
	however, its weight is different from real one
	real coin weighs 10, counterfeit coin weighes 9
	help me to find the counterfeit coin with a scale
	if you find 100 counterfeit coins, you will get reward :)
	FYI, you have 60 seconds.
	
	- How to play - 
	1. you get a number of coins (N) and number of chances (C)
	2. then you specify a set of index numbers of coins to be weighed
	3. you get the weight information
	4. 2~3 repeats C time, then you give the answer
	
	- Example -
	[Server] N=4 C=2 	# find counterfeit among 4 coins with 2 trial
	[Client] 0 1 		# weigh first and second coin
	[Server] 20			# scale result : 20
	[Client] 3			# weigh fourth coin
	[Server] 10			# scale result : 10
	[Client] 2 			# counterfeit coin is third!
	[Server] Correct!

	- Ready? starting in 3 sec... -
	
N=7 C=3

利用脚本就直接看?,有注释:

#coding:utf-8
from pwn import *
import re


def get_weight(start,end,prog):
	payload = ""
	if start == end:
		payload += str(end)
	else:
		for num in range(start,end+1):
			payload += "{} ".format(str(num))
	prog.sendline(payload)
	print "[-]clent:",payload
	weight = prog.recvline()
	print "[+]server:",weight
	try:
		return int(weight)
	except:
		return weight

def choose_coin(nums,chances,prog):
	start = 0
	end = nums -1
	for chance in range(chances):
		print "{:=^25}".format(str("round{}/{}".format(chance,chances-1)))
		weight = get_weight(start,int((end-start)/2+start),prog)
		if (weight%10) != 0:
			end = int((end-start)/2+start)
		else:
			start = int((end-start)/2+start)+1
	prog.sendline(str(end))
	result = prog.recvline()
	print "[+]server:",result


prog = remote("pwnable.kr",9007)
print(prog.recv()) # 题目提示说明部分
print '='*25

# 循环得分100次
for _ in range(100):
	print '='*10,"START",'='*25
	info = prog.recvline() # coin chances信息
	print "[+]server:",info
	# 通过正则表达式匹配出coin 和 chances
	coins = int(re.findall(r'\d+',info)[0])
	chances = int(re.findall(r'\d+',info)[1])
	# 开始筛选fade coin
	choose_coin(coins,chances,prog)

print prog.recv() # recv flag
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_43921239/article/details/100548897

智能推荐

大一python基础编程题列表,大一python程序设计考题_大一python编程题-程序员宅基地

文章浏览阅读697次,点赞18次,收藏18次。大家好,小编来为大家解答以下问题,大一python基础编程题点菜,大一python基础编程题答案,现在让我们一起来看看吧!这篇文章主要介绍了大一python基础编程题答案,具有一定借鉴价值,需要的朋友可以参考下。希望大家阅读完这篇文章后大有收获,下面让小编带着大家一起了解一下。_大一python编程题

耕作方式对微生物群落的影响_cropping practices manipulate abundance patterns o-程序员宅基地

文章浏览阅读3.2k次,点赞2次,收藏10次。Cropping practices manipulate abundance patterns of root and soil microbiome members paving the way to smart farming C:普通耕作 O:有机耕作NT:免耕 RT:少耕 IT:密集耕作C-IT C-NT O-IT O-RT Hartman et al. M..._cropping practices manipulate abundance patterns of root and soil microbiome

tableau表计算--柏拉图曲线_tableau柏拉图-程序员宅基地

文章浏览阅读1.5k次。各个领域都存在着二八定律:比如零售行业,80%的利润可能来自其中20%的用户。今天学到了怎么用tableau来做一个这样的柏拉图曲线。成果图:开始吧把利润、客户名称分别拖到行、列;客户名称拖到标记里的详细详细:2.选择【客户名称】然后点击排序3.右键选择【利润】添加表计算4.上一步得到了利润排序后累计百分比的曲线,如果你想看看是否在利润达到累计80%时客户数在20%左右那就..._tableau柏拉图

【linux】串口编程(二)——非阻塞接收_linux串口非阻塞例程-程序员宅基地

文章浏览阅读2k次。项目中很少会使用阻塞接收,一般都是select+read监听模式来实现非阻塞接收。 使用selece时,需要处理一些异常情况的返回,比如:系统中断产生EINTR错误;超时错误ETIMEDOUT。 使用read时,需要处理读取时可能出现的错误,比如:对方关闭连接(ECONNRESET),连接被拒绝(ECONNREFUSED),文件描述符错误(EBADF)等_linux串口非阻塞例程

Qt 5.9.5 webengine 开发_webengine 淘汰-程序员宅基地

文章浏览阅读9k次。QtWebkits在Qt5.6以上版本被淘汰了,目前而言,QWebEngine有以下缺点:MinGW版本的Qt不支持,即便是Qt5.9.5版本以上也是不支持的。仅仅支持MSVC版本,接口暂时不丰富,无法和QWebFrame进行交互(使用了新的QWebChannel和QWebEnginePage组合进行交互)在使用的时间安装新版本的Qt要安装Qt MSVC版本的,记得选择webengine组件在ex..._webengine 淘汰

BUUCTF Misc Page2-6部分题目_b0d3e5f34e36b189b47a1a57a0a43ba4.png-程序员宅基地

文章浏览阅读6.7w次,点赞4次,收藏29次。BUUCTF Misc Page2-6部分题目_b0d3e5f34e36b189b47a1a57a0a43ba4.png

随便推点

Eclipse 扁平化滚动条、背景色美化_jeeeyul is themes-程序员宅基地

文章浏览阅读1.7k次。Eclipse 扁平化滚动条、背景色美化_jeeeyul is themes

[Vue warn]: Error in onLoad hook (Promise/async): “ReferenceError: hpvPack is not defined“-程序员宅基地

文章浏览阅读1.6k次。#Error in onLoad hook (Promise/async): "ReferenceError: hpvPack is not defined"#vue#uniapp框架开发#_error in onload hook (promise/async)

经典算法问题 - 最大连续子数列和_c语言给定n个整数的数列,其中有可能是正数和负数,找出其中一个连续子数列-程序员宅基地

文章浏览阅读716次。原文:最大连续子数列和一道很经典的算法问题,给定一个数列,其中可能有正数也可能有负数,我们的任务是找出其中连续的一个子数列(不允许空序列),使它们的和尽可能大。我们一起用多种方式,逐步优化解决这个问题。为了更清晰的理解问题,首先我们先看一组数据:8-2 6 -1 5 4 -7 2 3第一行的8是说序列的长度是8,然后第二行有8个数字,即待计算的序列。对于这个序列,我们的答案应该是14,..._c语言给定n个整数的数列,其中有可能是正数和负数,找出其中一个连续子数列

CH32V307 LVGL移植笔记-程序员宅基地

文章浏览阅读1.1k次,点赞3次,收藏7次。第二步:把lv_conf_template.h 文件名修改成 lv_conf.h,同时打开lv_conf.h 文件,修改条件编译指令,把#if 0 修改成#if 1。移植前准确,CH32V307核心板,1.8"的TFT显示屏。第六步:测试,在main.c中包含#include "lvgl.h"和#include "lv_port_disp_template.h",并加入以下测试代码。第三步:添加头文件路径,右键选中工程,弹出菜单中选择属性,依次打开下图所示界面,选择从worksapce中添加路径信息。_ch32v307

我的Qt作品(11)使用Qt+OpenCV实现一个带旋转角度的NCC灰度模板匹配演示软件_灰度模板旋转匹配-程序员宅基地

文章浏览阅读9.8k次,点赞10次,收藏97次。使用Qt+OpenCV自己写了一个带旋转角度的NCC灰度模板匹配算子。算子的原理是基于NCC灰度匹配。在opencv代码中,matchTemplate函数保存在文件imgproc文件夹下的templmatch.cpp中,NCC算子的计算方式是cv::TM_CCOEFF_NORMED。https://github.com/opencv/opencv/blob/4.5.5/modules/imgproc/src/templmatch.cpp部分头文件#ifndef CNCCMATCH_H#d_灰度模板旋转匹配

IntelliJ IDEA 安装教程_idea crack.jar-程序员宅基地

文章浏览阅读321次。1:在官网上下载IntelliJ IDEA 开发工具https://www.jetbrains.com/idea/download/#section=windows2:选择自己的电脑系统对于的下载包点击下载按钮下载下载之后开始安装3:一般我会保存在d盘里面,不建议放在c盘,因为会造成电脑卡顿的问题,并且记住安装路径,后面需要用到。D:\IntelliJ IDEA 2018.3...._idea crack.jar

推荐文章

热门文章

相关标签