开坑CTF-pwn-入门

0x00 扯淡

pwn,大概是pwn to own的意思,通过二进制/系统调用等方式获得目标主机的shell。

之前软件安全课上学过windows上的栈溢出,格式化字符串等漏洞,弹过几个窗,但是没接触过linux的二进制相关问题,也没玩过shell这种控制。

考研之前的最后一段时间学一下pwn,目标是几天后的TSCTF。

0x01 工具

Linux上目前还没有找到windows下OD+IDA这么棒的组合,目前使用的几个比较顺手的工具。不过还是不能在纯Linux环境搞。

  1.file pwn0           //查看文件格式,i386,x86_64等

  2.objdump -S pwn0 | less    //查看汇编代码,查看相关的函数信息。具体可以Read The Fucking Manual

  3.转到windows开IDA F5,看伪代码,搞清程序结构

    IDA 有linux版,可以试一试。

    IDA 还有远程调试功能,可以试一试。

  4.edb,类似windows上的OD,不过小细节上还是不行,操作不方便。

  5.gdb,据说是神器,不太会用。平时写代码都是printf调试。

    b main 下断点

    ni = od F8;si = od F7 一个next,一个step

    x 查看任意位置内存。x \10xw %sp 查看栈的值。但是目前不知道怎么才能像OD那样同时看到hex值和str值。

    layout asm|reg  分屏查看汇编代码|寄存器状态,比较有用。不过很丑。

  6.windows subsystem of linux 肥肠看好,目前可以用来objdump,编些小代码,脚本。

  7.pwntools 不是很懂为什么都用python做pwn题,明明c/c++更直接。无聊了可以开发一个c/c++pwn库,名字想好了叫cpwn。

0x02 Linux的汇编

Linux和Unix使用的是AT&T风格的汇编,一开始不太适应。而windows使用了Intel风格的汇编。从外形上看区别如下

  1.操作赋值方向。

    AT&T:mov 1,eax

    Intel:mov %eax,$1

  2.前缀。

    AT&T:mov 1,eax

    Intel:mov %eax,$1

  3.后缀。

    AT&T:movb %al,%bl //指令后可跟b(byte),w(word=2b),l(long=4b)表示字节数。此外还有其他更复杂的扩展。

此外,对于ELF文件,windows下IDA反编译的汇编代码是Intel风格的,Linux下objdump是AT&T风格的。

函数传参的方式也有不同,Windows大部分都是通过栈传参的,而Linux大部分是通过寄存器传参的。(不确定)

0x03 shellcode

一些简单的题直接跳转到目标函数,就可以读取flag文件了。这类题覆盖返回地址即可。

其他题,需要执行指令拿shell,即编写shellcode。

当获取任意地址读写能力时,即可写入shellcode,再执行此处的代码即可。

shellcode可以读取flag,更一般的可以用pwntools中的shellcraft。

--具体利用下次在聊

时间: 2024-10-17 01:01:16

开坑CTF-pwn-入门的相关文章

Linux pwn入门教程(0)——环境配置

作者:[email protected] 0×00前言 作为一个毕业一年多的辣鸡CTF选手,一直苦于pwn题目的入门难,入了门更难的问题.本来网上关于pwn的资料就比较零散,而且经常会碰到师傅们堪比解题过程略的writeup和没有注释,存在大量硬编码偏移的脚本,还有练习题目难找,调试环境难搭建,GDB没有IDA好操作等等问题.作为一个老萌新(雾),决定依据Atum师傅在i春秋上的pwn入门课程中的技术分类,结合近几年赛事中出现的一些题目和文章整理出一份自己心目中相对完整的Linux pwn教程.

iOS开发之Auto Layout入门

随着iPhone6与iOS8的临近,适配的问题讲更加复杂,最近学习了一下Auto Layout的使用,与大家分享.  什么是Auto Layout? Auto Layout是iOS6发布后引入的一个全新的布局特性,其目的是弥补以往Autoresizing在布局方面的不足之处,以及未来面对更多尺寸适配时界面布局可以更好的适应. 为什么要用Auto Layout? Autolayout能解决不同屏幕(iPhone4,iPhone5,iPad...)之间的适配问题. 在iPhone4时代开发者只需要适

开坑!JavaScript AMD模块的设计与实现

开个坑,慢慢学习总结JavaScript的AMD规范 先把自己写的一个简易实现放上来,然后慢慢从0开始讲解一下AMD,已经如何自己动手实现一个AMD /*AMD*/ var DOC = window.document; var head = DOC.head || DOC.getElementsByTagName('head')[0]; var basePath = getCurrentScript(DOC); basePath = basePath.substring(0, basePath.

梦游战纪开坑~业余

梦游战纪开坑,准备用em-x开发 客户端+服务端 2014.05.14 打造网络版的仿梦幻OL 写梦幻最难的是:1.素材整理 2.策划思路 招募素材整理人员~欢迎各类人员~ QQ群号是199084707 梦游战纪开坑~业余,布布扣,bubuko.com

CozyRSS开发记录0-RSS阅读器开坑

CozyRSS开发记录0-RSS阅读器开坑 1.RSS RSS,全名是Really Simple Syndication,简易信息聚合. 关于RSS相关的介绍,网上可以很容易的找到.RSS阅读器是我几乎每天都用到的一个工具类软件,他的优点是: A.没有广告,只关注内容: B.可以轻松快捷的关注到一批博客和新闻网站的更新. RSS本身涉及到的技术点: A.XML,RSS使用XML来编写,它是XML的子集: B.HTTP,RSS的内容源通常是使用HTTP协议来提供的. 2.CozyRSS的目标 初步

开坑,Unix环境高级编程,转行之路又得缓缓了

不要问我基础,我用了近6年的Linux系统,最早的版本可以追溯到Ubuntu 8.04,常用的命令 VIM基本上是没压力,遇到问题google 配置环境变量 网络环境也不在话下, C语法基本熟练,过去一年,我自学过 数据结构 算法 CSAPP等课程,开坑Unix环境编程压力不大, 开坑的原因主要是为了了解系统底层编程,更接系统实现的原理,预计时间2-3个月,Unix网络编程留明年开坑算了, 估计Spring MVC等web后端框架又得推一推了,说实话,目前我真的不急着去找工作,我缺乏实际的工程经

爬虫开坑之路(一)

什么是爬虫 网络爬虫(web crawler),也叫网络蜘蛛(spider),是一种用来自动浏览万维网的网络机器人(bots).爬虫是通过网页的链接地址来寻找网页,从网站某一个页面开始,读取网页的内容,找到在网页中的其它链接地址,然后通过这些链接地址寻找下一个网页,这样一直循环下去,直到按照某种条件把互联网上所有的网页都抓取完为止的技术.            某爬虫的结构   爬虫的工作原理 简单来说就是从给定的入口进入然后按逻辑获取需要的信息资源.原理主要是通过http或者其他协议,发送请求

重新开坑:开始自学Android编程

开坑原因 从高考后开始的这轮对于计算机知识的学习,最早的热情就是来自于学习Android Development.我们几百块钱就能买到一个不错的廉价Android设备,WLAN.GPS.NFC.4G.Screen.Camera等硬件一应俱全,利用这些硬件实现一些有趣的功能,让生活更高效,是我学习Android Development的最初动力.当然,事情不是我想象的那么简单,没有Java基础(或者说没有任何Computer Science基础)的我被搞得晕头转向,只得抱起厚厚的Core Java

pwn入门系列习题解析(二)

第一题--BITSCTF 2017-Command_Line 查看文件格式以及开启的保护措施,此处全保护均未开启(默认开启ASLR),且为64位ELF. 尝试运行,发现打印出一处地址(基本不用考虑ASLR了),猜测为栈某处地址 放入ida观察逻辑,发现的确打印了栈上的一个地址,可以直接用.此处可以顺便探测一下偏移,0x10+8=0x18,输入0x18个字符后即可覆盖ret.只要注意shellcode位于泄露的栈地址后的0x20处(0x18+8=0x20).至于shellcode直接从网上找就可以