pwnable.tw 3x17】的更多相关文章

3x17 文章主要是参考了https://xuanxuanblingbling.github.io/ctf/pwn/2019/09/06/317/ 首先我们检查一下开启的保护 运行一下,先让输入addr后输入data,感觉像是任意地址写,但是没有没有地址泄漏的功能. 放入IDA分析,程序是个静态链接的ELF,因为去除了符号表,所以什么符号都没有,如果用IDA分析还需要先找到main函数. 这里有两种办法: _start函数中,__libc_start_main(main,argc,argv&en…
存储结构 0x804B070链表头 struct _mycart_binlist { int *name; //ebp-0x20 int price; //ebp-0x1c struct _mycart_binlist *next; //ebp-0x18 struct _mycart_binlist *pre; //ebp-0x14 } insert int __cdecl insert(int a1) { int result; // eax _DWORD *i; // [esp+Ch] [e…
产生漏洞的原因 int __cdecl power_up(char *dest) { char s; // [esp+0h] [ebp-34h] size_t new_len; // [esp+30h] [ebp-4h] new_len = ; memset(&s, , 0x30u); if ( !*dest ) return puts("You need create the bullet first !"); ) > 47u ) // len>47 return…
产生漏洞的原因是free后chunk未置零 unsigned int sub_80487D4() { int index; // [esp+4h] [ebp-14h] char buf; // [esp+8h] [ebp-10h] unsigned int v3; // [esp+Ch] [ebp-Ch] v3 = __readgsdword(0x14u); printf("Index :"); read(, &buf, 4u); index = atoi(&buf);…
(留坑,远程没打成功) int __cdecl main(int argc, const char **argv, const char **envp) { int t_num_count; // eax int *num_stack; // edi unsigned int input_count; // esi unsigned int output_ptr; // esi int v7; // ST08_4 int result; // eax unsigned int num_count…
题目代码量比较大(对于菜鸡我来说orz),找了很久才发现一个能利用的漏洞 运行之发现是一个计算器的程序,简单测试下发现当输入的操作数超过10位时会有一个整型溢出 这里调试了一下发现是printf("%d",num[num-1])时要输出的结果超过了2^31,2147483648即0x80000000,所以这应该算是一个bug并不是一个可利用的漏洞(32位程序最大输出2^31的原因是int类型最高位是符号标志位) 下面我们逆向一下整个程序找到真正可利用的漏洞 其中get_expr函数在读…
emm,之前一直想做tw的pwnable苦于没有小飞机(,今天做了一下发现都是比较硬核的pwn题目,对于我这种刚入门?的菜鸡来说可能难度刚好(orz 1.start 比较简单的一个栈溢出,给出一个linux 0x80系统调用的参考网址,就决定是他了 参考之可以发现al=0x3执行sys_read时长度是0x3c*size_sz,栈的长度是0x14,明显的栈溢出.由于没有开启NX,所以直接在栈上布置shellcode即可. 需要注意的是: 虽然程序没有开启PIE,但是利用的话是需要绕过ASLR的:…
此题的代码量很大,看了一整天的逻辑代码,没发现什么问题... 整个函数的逻辑主要是红框中两个指针的循环赋值和调用,其中第一个指针是主功能函数,第二个数组是子功能函数. 函数的漏洞主要在main函数中,main函数中使用了strtol函数将用户输入转换为字符串,并根据此转换结果,对子函数进行访问. 当用户输入过大或过小时,会导致越界访问的问题,其中,strtol函数的返回值可能为负数. bss段中,用户输入的名称最开始是随机生成的,但用户可以更改.而此字段在函数指针数组上面,也就是说,用户可以通过…
Let's start the CTF:和stdin输入的字符串在同一个栈上,再准确点说是他们在栈上同一个地址上,gdb调试看得更清楚: 调试了就很容易看出来在堆栈上是同一块地址.发生栈溢出是因为:read和write的缓存区地址相同,sys_write函数地址只有20,但是sys_read函数地址有60,当你输出大于20的时候就会覆盖掉ret. payload一般形式:padding + addr of shellcode + padding + shellcode,所以我们要找一个addr…
orw 首先,检查一下程序的保护机制 开启了canary保护,还是个32位的程序,应该是个简单的题…
这题是和pwnable.kr差不多的一道题,主要区别在于没有给syscall.所以需要自己去找. 只有read和sleep两个函数. 思路一是首先劫持堆栈到bss段,然后调用read函数将sleep的got表中地址改成syscall(直接找到\x0f\x05),将/bin/sh放入bss中,然后设置rax为59调用syscall可以调用execve了,结果这个方法本地打通了远程打不通,不知道是什么原因.应该是地址不一样,所以决定先用write泄露一下地址然后再定位syscall. 未完待续 没有…
做到这道题的时候正赶上iPhone 8上市,撒花~(虽然不知道为啥) 程序分析: 先进到main函数,比较简单. myCart位于bss段上,是一个长度为0x10. 主要的处理函数是handler函数: 这是一个标准的菜单类题目.挨个函数看下去 list: 这个是各种手机的价格,什么都没有. 再看第二个函数: 这个函数是一个添加购物车的函数,具体采用my_read函数,得到用户输入的商品号,然后用atoi函数进行判断. my_read函数中存在一个问题,在read部分中以\0分割可以输入其他内容…
此题第一步凑齐7174进入漏洞地点 然后可以把iphone8的结构体中的地址通过read修改为一个.got表地址,这样就能把libc中该函数地址打出来.这是因为read函数并不会在遇到\x00时截断(就是在read字符'y'的时候). 然后还可以采用同样的办法把libc中的libc.symbols['environ']打出来,这个值存储着当前栈中环境变量所在的位置,因而可以得到栈的位置. 然后具体分析在进入delete之后的情景: 将程序断在delete中的关键位置,此时ebp为0xffac6c…
本系列为用于记录那些比较有意思的题目. 题目为一个排序算法,就如题目名称那样,dubblesort,32位程序. 利用思路为栈溢出,先是栈溢出泄露出栈上libc的相关数据从而获取libc地址,再是栈溢出覆盖ebp下一处劫持控制流.第二步时需要注意存在着一个canery需要绕过,可以使用scanf的%d输入为+时为没有输入的方式跳过(返回值会出错但本题没检查),就一个数字的长度,在第25个.…
突然发现已经两个月没写过WP了,愧疚- -... 此题也算一道分数很高的题目,主要考察Shellcode的编写. 又是一道题目逻辑很简单的题. 首先提供了三个函数 查看,删除,添加 查看函数: 此函数中readint()使用atoi进行解析,没有检查小于0的情况,造成越解读,可以泄露libc地址(然并卵) 添加函数中一样有这个问题,并且可以任意写, 显然是一道覆盖got表的题,并且没有开启NX保护,就是可以写shellcode. 查看一下check函数 不太清楚__ctype_b_loc是什么c…
题目逻辑比较简单,大概增加和删除和打印三个功能: show函数中,打印各日记内容,由于这题没有给出libc文件,应该不需要泄露地址,估计用处不大: delete函数中,正常的free,然后指针修改为null,可能不存在漏洞,唯一的bug在于read_int()函数中 readint函数使用了atoi函数,当输入是“-12”这样的负数时,造成读越界,但是由于在delete函数中,用处不是特别大 最后,add函数 函数的逻辑是在note数组中写入malloc的返回的指针,并且同样用了readint函…
一开始特别懵的一道题. main函数中一共4个功能,openfile.readfile.writefile.closefile. 其中,在最后退出时有一个明显的溢出,是scanf("%s",&name); name位于bss段上,name下面有一个fp用于存储文件指针,可以被覆盖. 再看其他函数: openfile.只有一个简单的输入并打开,保存文件指针在bss段上的fp变量中: readfile,从fp所指的文件中每次读取0x18F字节字节到magicbuf中,这个变量也在b…
前言 ​ 对一些有趣的堆相关的漏洞的利用做一个记录,如有差错,请见谅. ​ 文中未做说明 均是指 glibc 2.23 ​ 相关引用已在文中进行了标注,如有遗漏,请提醒. 简单源码分析 ​ 本节只是简单跟读了一下 malloc 和 free 的源码, 说的比较简单,很多细节还是要自己拿一份源代码来读. 堆中的一些数据结构 堆管理结构 struct malloc_state { mutex_t mutex; /* Serialize access. */ int flags; /* Flags (…
pwn ”Pwn”是一个黑客语法的俚语词 ,是指攻破设备或者系统 .发音类似“砰”,对黑客而言,这就是成功实施黑客攻击的声音——砰的一声,被“黑”的电脑或手机就被你操纵.以上是从百度百科上面抄的简介,而我个人理解的话,应该就是向目标发送特定的数据,使得其执行本来不会执行的代码,前段时间爆发的永恒之蓝等病毒其实也算得上是pwn的一种. pwn介绍 CTF pwn中的目标是拿到flag,一般是在linux平台下通过二进制/系统调用等方式编写漏洞利用脚本exp来获取对方服务器的shell,然后get到…
Fastbin Attack 暂时接触到了两种针对堆分配机制中fastbin的攻击方式,double free和house of spirit Double free 基本原理 与uaf是对free之后的指针直接进行操作不同,double free通过利用fastbin对堆的分配机制,改写在fastbin中的chunk,实现对指定内存的堆块分配. 先正常释放chunk1和chunk2 此时重新释放chunk1(连续两次释放相同的堆块会报错) double free通过在fastbin数组中形成m…
HITCON-Training-Writeup 原文链接M4x@10.0.0.55 项目地址M4x's github,欢迎star~ 更新时间5月16 复习一下二进制基础,写写HITCON-Training的writeup,题目地址:https://github.com/scwuaptx/HITCON-Training Outline Basic Knowledge Introduction Reverse Engineering Static Analysis Dynamic Analysis…
本文由“合天智汇”公众号首发 作者:hope 引言 之前遇到没开启NX保护的时候,都是直接用pwtools库里的shellcode一把梭,也不太懂shellcode代码具体做了些什么,遇到了几道不能一把梭的题目,简单学习一下shellcode的编写. 前置知识 NX(堆栈不可执行)保护 shellcode(一段16进制的数据,转化为字符串则为汇编代码) pwnable之start 保护检测 可以看到这道题目什么保护都没有开     ida分析 题目只有start函数,可以知道该题是用汇编语言写的…
https://pwnable.kr/ https://w3challs.com/challenges/wargame http://overthewire.org/wargames/ http://www.root-me.org https://pwnable.tw/ http://wargame.kr/ https://pwnable.xyz/ https://ropemporium.com/…
http://angelboy.logdown.com/ https://wizardforcel.gitbooks.io/sploitfun-linux-x86-exp-tut/content/ https://github.com/scwuaptx/HITCON-Training https://github.com/Kung-Pao-Chicken/ctf https://github.com/shellphish/how2heap https://pwnable.tw/ http://p…
目录 PWN二进制漏洞学习指南 前言 前置技能 PWN概念 概述 发音 术语 PWN环境搭建 PWN知识学习途径 常见漏洞 安全机制 PWN技巧 PWN相关资源博客 Pwn菜鸡小分队 PWN二进制漏洞学习指南 前言 最近准备学PWN,所以买了<CTF权威指南(PWN)篇>的书粗略的看完后,在这里做个学PWN需要掌握的知识指南,如有补充欢迎评论. 前置技能 首先我觉得要学习PWN还是要有一定基础的,因为PWN毕竟是和系统底层知识打交道,所以我觉得应该具备如下的一些技能,并且我推荐了一些不错的书籍…
DVWA实验之Brute Force(暴力破解)- Medium   有关DVWA环境搭建的教程请参考: https://www.cnblogs.com/0yst3r-2046/p/10928380.html     Brute Force(暴力破解)- Low 实验过程请参考: https://www.cnblogs.com/0yst3r-2046/p/11609227.html   Brute Force,即暴力(破解),是指黑客利用密码字典,使用穷举法猜解出用户口令,是现在最为广泛使用的攻…
前段时间找到一个练习pwn的网站,pwnable.kr 这里记录其中的passcode的做题过程,给自己加深印象. 废话不多说了,看一下题目, 看到题目,就ssh连接进去,就看到三个文件如下 看了一下我们的用户名,并不能直接查看flag这个文件.查看passcode.c的源码看一下 #include <stdio.h> #include <stdlib.h> void login(){ int passcode1; int passcode2; printf("enter…
pwnable echo2 linux 32位程序 涉及FSB和UAF漏洞的利用,先%x泄露地址,然后利用UAF漏洞进行利用 code:…
.Nana told me that buffer overflow is one of the most common software vulnerability. Is that true? Download : http://pwnable.kr/bin/bof Download : http://pwnable.kr/bin/bof.c Running at : nc pwnable.kr 9000 将 bof 文件下载下来,用 file 命令查看一下,可以看到是一个32位的 ELF…
题目: 链接后登陆 ssh col@pwnable.kr -p2222 查看文件以及权限 Ls –al 查看代码 cat col.c 根据 if(strlen(argv[1]) != 20){ printf("passcode length should be 20 bytes\n"); return 0; } 得输入的长度为20 根据 if(hashcode == check_password( argv[1] )){ system("/bin/cat flag"…