Tcache pwn 入门
HITB CTF 2018: gundam 分析要点1.利用 unsorted bin泄露 libc 基址参考 https://www.cjovi.icu/pwnreview/1089.html
2.double free——tcache poisoning类似fastbin 的double free,不过这题有一些细节
关键代码:def overwrite(): destroy(2) #free这两个chunk是为了接下来构造3个chunk, destroy(1) #不这样的话不能 炸工厂,即高达数不会减少 destroy(0) #debug(1) destroy(0) #debug(1) blow_up() #高达数不减少就不能创建chunk了 #debug(1) build(p64(free_hook_addr)) #申请到原本的chunk(0) 工厂编号开始重新排序 chunk(0) #debug(1) build('/bin/sh') # ...
CTF-pwn 技术总结(4)
CTF-pwn 技术总结(4)转载自https://forum.butian.net/share/1228
前言从前面几期我们能够学习到一些CTF-pwn中关于栈溢出、格式化字符串漏洞题型的攻击技巧以及linux安全保护机制的原理以及绕过方法等等,这期我们正式进入堆入门的学习。
学习本节需要读者具有一定操作系统、C 语言及其运行机制的知识,而且为了对新手友好,简化了很多内容,语言可能没那么严谨,如有错误还请师傅们斧正。
啥是堆?堆是程序虚拟内存中由低地址向高地址增长的线性区域。一般只有当用户使用 allocte族函数(malloc、alloc、realloc 函数)向操作系统申请内存时,这片区域才会被内核分配出来,并且出于效率和页对齐的考虑,通常会分配相当大的连序内存。程序再次申请时便会从这片内存中分配,直到堆空间不能满足时才会再次增长。
如图,堆不同于栈,栈是由高地址向低地址增长的,而堆是由低地址向高地址增长的。
CTF比赛中常见的堆是 ptmalloc2堆管理器中的堆 ,它是由 glibc 实现的,它的管理机制是:
当用户申请堆块(内存)时,从堆中按顺序分配堆块交给用户,用户保存 ...
CTF-pwn 技术总结(3)
CTF-pwn 技术总结(3)转载自https://forum.butian.net/share/1190
前言学习linux pwn,linux安全机制的知识是绕不开的。如果能理解这些安全机制的原理以及不懂得如何绕过它们,那么在比赛时将你举步维艰,本节我就总结了所有linux安全机制的基本原理以及具体的绕过方法,希望能帮助一些小萌新更快入门,帮助需要进阶的朋友打好根基。
linux安全机制详解与绕过一、Stack canaryStack canary(取名自地下煤矿的金丝雀,因为它能比矿工更早发现煤气泄漏,有预警作用)是一种用于对抗栈溢出攻击的技术,有时也叫做 Stack cookie 。canary的值是栈上的一个随机数,在程序启动时随机生成并保存在比函数返回地址更低的位置。由于栈溢出是从低地址向高地址进行覆盖,因此攻击者要想控制函数的返回指针,就一定要先覆盖到Canary。程序只需要在函数返回前检查Canary是否被篡改,就可以达到保护栈的目的。
可以在 GCC 中使用以下参数设置 Canary:
-fstack-protector 为内部缓冲区大于8字节的函数插入保护-fsta ...
CTF-pwn 技术总结(2)
CTF-pwn 技术总结(2)转载自https://forum.butian.net/share/1181
格式化字符串漏洞格式化字符串函数常见的有格式化字符串函数有
输入: scanf
输出:
函数
基本介绍
printf
输出到 stdout
fprintf
输出到指定 FILE 流
vprintf
根据参数列表格式化输出到 stdout
vfprintf
根据参数列表格式化输出到指定 FILE 流
sprintf
输出到字符串
snprintf
输出指定字节数到字符串
vsprintf
根据参数列表格式化输出到字符串
vsnprintf
根据参数列表格式化输出指定字节到字符串
setproctitle
设置 argv
syslog
输出日志
err, verr, warn, vwarn 等
。。。
格式化字符串漏洞成因:printf()函数的调用格式为:
printf("<格式化字符串>", <参量表>);
但有些人为了省事,直接让printf打印一个变量的内容,导致了漏洞的 ...
CTF-pwn 技术总结(1)
CTF-pwn 技术总结(1)转载自https://forum.butian.net/share/1065
初级Rop返回导向编程(Return-Oriented Programming,缩写:ROP)是计算机安全中的一种漏洞利用技术,该技术允许攻击者在程序启用了安全保护技术(如堆栈不可执行—NX保护)的情况下控制程序执行流,执行恶意代码。
使用方法:利用栈溢出控制程序中函数的返回地址,再借助 ROPgadget 寻找程序/libc 中带有ret的指令,利用这些指令构造一个指令序列,从而控制程序的执行。
例题演示:来自某学校新生赛题: checkin,
ida打开发现需要输入三个变量满足一个简单的等式,没什么限制随意构造即可
进入vul函数,发现存在栈溢出,偏移为10h,等下就要在这里构造ROP链
还找到了后门函数,
利用ROPgadget工具寻找可用的指令:
也可以用它查找字符串:
思路:这样构造下面这样的ROP链就可以getshell了
pop rdi; ret; binsh_addr; system_addr
Exp:from pwn import *context. ...
二进制漏洞之数组越界
pwn入门之数组越界二进制漏洞挖掘——PWNPWN 是一个黑客语法的俚语词 ,是指攻破设备或者系统 。发音类似”砰”,对黑客而言,这就是成功实施黑客攻击的声音–砰的一声,被”黑”的电脑或手机就被你操纵了 。
解决PWN题就是利用简单逆向工程后得到代码(源码、字节码、汇编等),分析与研究代码最终发现漏洞,再通过二进制或系统调用等方式获得目标主机的shell
Linux下的二进制漏洞挖掘LIbclibc是Standard C library的简称,它是符合ANSI C标准的一个函数库。libc库提供C语言中所使用的宏,类型定义,字符串操作函数,数学计算函数以及输入输出函数等。正如ANSI C是C语言的标准一样,libc只是一种函数库标准,每个操作系统都会按照该标准对标准库进行具体实现通常我们所说的libc是特指某个操作系统的标准库,比如我们在Linux操作系统下所说的libc即Glibc。Glibc是类Unix操作系统中使用最广泛的libc库,它的全称是GNU C Library。类Unix操作系统通常将libc库作为操作系统的一部分 (被视为操作系统与用户程序之间的接口)
简单而言,l ...
log4j2-RCE 漏洞复现
log4j2-RCE 漏洞复现0x01 漏洞情况Apache Log4j2 是 Apache 的一个开源项目,Apache Log4j2 是一个基于 Java 的日志记录工具,使用非常广泛,被大量企业和系统索使用,漏洞触发及其简单,攻击者可直接构造恶意请求,触发远程代码执行漏洞。漏洞利用无需特殊配置
实际受影响范围如下:
Apache Log4j 2.x < 2.15.0-rc2
目前为止已知如下组件存在漏洞:
Spring-Boot-strater-log4j2ApacheStruts2Apache SolrApache FlinkApache DruidElasticSearchFlumeDubboRedisLogstashKafkavmware
0x02 知识储备2.1 JAVA 的命令执行2.1.1 Java中RunTime类Runtime 类代表着Java程序的运行时环境,每个Java程序都有一个Runtime实例,该类会被自动创建,我们可以通过Runtime.getRuntime() 方法来获取当前程序的Runtime实例。
并且可以通过 Runtime.getR ...
数据结构大作业-算法可视化设计
中国邮递员可视化设计中国邮递员问题背景中国邮递员问题是邮递员在某一地区的信件投递路程问题。邮递员每天从邮局出发,走遍该地区所有街道再返回邮局,问题是他应如何安排送信的路线可以使所走的总路程最短。这个问题由中国学者管梅谷在1960年首先提出,并给出了解法——“奇偶点图上作业法”,被国际上统称为“中国邮递员问题”。用图论的语言描述,给定一个连通图G,每边e有非负权),要求一条回路经过每条边至少一次,且满足总权最小。
成品展示及功能介绍
左边一列有三个按钮,它们的功能依次是 初始化地图、下一步、上一步。
右边的大画布就是 地图的显示界面,地图的生成是根据 用户在算法程序中输入的地图边信息构成的,地图中的每个结点的 相对位置是固定的 ,但是 **绝对位置是随机的 **,用户可以多按几次初始化地图按钮,生成他们想要的地图样式。
每当按下一步按钮,邮递员就会依照算法程序得到的最终路径来前进一步,上一步按钮顾名思义就是返回上一次邮递员的位置。
邮递员的前进是通过结点和边的颜色变化实现的,邮局(起点)为浅绿色、未走过的结点为浅蓝色、未走过的边为黑色,走过一次的结点和边都为金色,走过多次的结点和边都 ...
Web Developer靶机渗透
Web Developer靶机渗透1. 渗透环境系统环境:Kali Linux-2021、WebDeveloper靶机
靶机来源:https://www.vulnhub.com/entry/web-developer-1,288/
渗透目标 :获取靶机Web Developer 文件/root/flag.txt中flag。
2. 靶机安装
下载并解压,将.voa文件用vmware打开,然后开机即可,不需要登入。
3. 渗透过程1、扫描该网段存活主机
发现靶机ip地址为192.168.52.70。
2、查看目标主机端口开放、服务情况,版本信息,nmap -sV 192.168.52.70
开放了20与80端口,提供ssh服务以及http服务,Ubuntu系统。
3、尝试利用浏览器访问目标网站。
访问网站,发现该网站是用 WordPress 来搭的,并且存在登入界面。
4、探测目标网站使用的CMS模板信息WhatwebWhatWeb 是一个开源的网站指纹识别软件。
WhatWeb 可识别 Web 技术,包括内容管理系统( ...
数据结构期末复习
数据结构期末复习脉络与算法基本术语:
抽象数据类型- ADT
按 逻辑结构 分为 : 集合(结点之间没有联系的)、线性结构(结点之间存在一对一关系的)、树形结构(结点之前存在一对多关系的)、图形结构(结点之间存在多对多的关系的)
按 存储结构(物理结构) 分为:顺序储存结构(一段连续的储存单元)、链式储存结构(存储位置由编译器随机分配,结点间需要用指针联系起来)、索引储存结构(拥有索引表,其中包含着结点的关键码以及储存位置)、散列储存结构(储存位置由散列函数决定)
算法分析时间复杂度 :算法的时间复杂度是一个函数,它定性描述该算法的运行时间。时间复杂度常用大O符号表述,例如、、、等;其中n用来表示输入的长度,该值可以影响算法的空间复杂度。不包括这个函数的低阶项和首项系数。使用这种方式时,时间复杂度可被称为是渐近的,亦即考察输入值大小趋近无穷时的情况。
空间复杂度 :算法空间复杂度是一个函数,定性地描述该算法运行所需要的存储空间。它表示一个算法完全执行所需要的存储空间大小。和时间复杂度类似,空间复杂度通常也使用大O记号来渐进地表示,就像时间复杂度的计算不考虑算法所使用的空间大小一样,空 ...