Mary_Morton另外两种做法
网上可以找到的通常是利用格式化字符串输出 Canary 的值,然后再利用栈溢出调至漏洞函 数,此处我讲讲例外两种思路。
方式 1: 输入 2,利用格式化字符串将 printf 的 got 地址修改为 system 的 plt 地址,再次输 入 2,输入’/bin/sh\x00’,相当于执行 system(‘/bin/sh\x00’)
方式 2: 输入 2,利用格式化字符串将 exit 的 got 地址修改为 sub_4008DA 函数地址(该函数 可以直接执行 cat ./flag),再次输入 3,调用 sub_4008DA 函数 cat flag 代码如下,已详细注释,就不再做分析说明了。
make命令教程
Make 命令教程代码变成可执行文件,叫做编译(compile);先编译这个,还是先编译那个(即编译的安排),叫做构建(build)。
Make是最常用的构建工具,诞生于1977年,主要用于C语言的项目。但是实际上 ,任何只要某个文件有变化,就要重新构建的项目,都可以用Make构建。
一、Make的概念Make这个词,英语的意思是”制作”。Make命令直接用了这个意思,就是要做出某个文件。比如,要做出文件a.txt,就可以执行下面的命令。
1$ make a.txt
但是,如果你真的输入这条命令,它并不会起作用。因为Make命令本身并不知道,如何做出a.txt,需要有人告诉它,如何调用其他命令完成这个目标。
比如,假设文件 a.txt 依赖于 b.txt 和 c.txt ,是后面两个文件连接(cat命令)的产物。那么,make 需要知道下面的规则。
12a.txt: b.txt c.txt cat b.txt c.txt > a.txt
也就是说,make a.txt 这条命令的背后,实际上分成两步:第一步,确认 b.txt 和 c.txt 必须已经存在,第二步使用 ...
M1水卡破解教程
M1水卡破解教程前置知识1、如果一个读卡器周围有多张卡,读卡器的电磁场激活卡片后,卡片会把自己的 UID 回复给读卡器,读卡器根据 UID 选择卡片,然后读卡器与卡片进行认证,通过之后才进行正常的数据传输,避免信息的混肴和丢失
2、ISO/IEC 14443-3 是一项国际标准,主要涉及近场通讯(NFC)和射频识别(RFID)技术中用于接触式集成电路卡(IC卡)和读卡器之间通信的协议标准,在 14443-3 中读卡器(近距离耦合设备)简写为 PCD,卡片(近距离集成电路卡片)简写为 PICC
M1卡这里的M1卡指的是A卡,也就是ISO/IEC 14443 Type A卡,本来是在学习这篇关于M1的AES认证机制的时候突然想到以前搞的ACR克隆M1卡的实验,但是那个比较基础,于是我就花了一些时间去研究了一下关于M1的的水卡的校验原理,发现还算比较简单的
实验先贴上我的实验数据
12345678910119 扇区0区块:0021470100000000000031383230396D1区块:E40300000000000000000000140000FB2区块:E403 ...
ls libc.so.6 version `GLIBC_2.28' not found (required by ls)--linux系统下文件夹中有libc.so.6文件
ls: libc.so.6: version `GLIBC_2.28’ not found (required by ls)–linux系统下文件夹中有libc.so.6文件ls出现报错因为当前文件夹下面存在libc.so.6文件,并且版本低于当前系统libc的版本,因为LD_LIBRARY_PATH设置有问题。
libc调用顺序
缓存搜索:系统首先会查找之前运行过的程序的缓存,如果之前已经加载了libc库,那么会直接使用缓存中的libc库。
程序指定的动态链接库搜索路径:程序可以通过调用ldconfig或者设置LD_LIBRARY_PATH环境变量来指定动态链接库搜索路径,这些路径会被系统搜索。
系统默认搜索路径:如果以上步骤都没有找到libc库,那么系统会按照默认的搜索路径进行搜索,这些路径通常包括/lib、/usr ...
Linux输入-输出(IO)-错误流and setvbuf
Linux输入-输出(I/O)-错误流and setvbuf前言因为一个文件的运行错误,导致我以为是setvbuf的问题,各种找文章了解,后来发现是一个设置的问题,太寄了,看都看差不多了,那就总结一下。
(I/O)基本概念
I/O重定向通常与FD有关,shell的FD通常为10个(FD:文件标识符—->系统为每个打开的文件指定一个文件标识符以便系统对文件进行跟踪,文件标识符是一个数字,不同数字代表不同的含义)
常用的FD有三个,为0(stdin ,标准输入),1(stdout ,标准输出)、2(stderr, 标准错误输出)
直接I/O,绕过内核缓冲
fd = open(filepath, O_WRONLY | O_DIRECT); //O_DIRECT直接IO标志
从用户空间直接将数据传递到文件或磁盘设备,把这种操作也称为直接 I/O(direct I/O)或裸 I/O(raw I/O)。
对于大多数应用程序而言,使用直接 I/O可能会大大降低性能。因为 ...
Linux网络编程常用头文件解释
Linux网络编程常用头文件解释常用文件头sys/types.h:数据类型定义
sys/socket.h:提供socket函数及数据结构
netinet/in.h:定义数据结构sockaddr_in
arpa/inet.h:提供IP地址转换函数
netdb.h:提供设置及获取域名的函数
sys/ioctl.h:提供对I/O控制的函数
sys/poll.h:提供socket等待测试机制的函数
**其他在网络程序中常见的头文件 **unistd.h:提供通用的文件、目录、程序及进程操作的函数
errno.h:提供错误号errno的定义,用于错误处理
fcntl.h:提供对文件控制的函数
time.h:提供有关时间的函数
crypt.h:提供使用DES加密算法的加密函数
pwd.h:提供对/etc/passwd文件访问的函数
shadow.h:提供对/etc/shadow文件访问的函数
pthread.h:提供多线程操作的函数
signal.h:提供对信号操作的函数
sys/ ...
Linux系统查看正在使用的端口
Linux系统查看正在使用的端口端口可以认为是设备与外界通讯交流的出口,就好像是门牌号一样,那么在Linux系统中如何查看正在使用的端口?
一、使用 netstat 检查端口netstat 是一个命令行工具,可以提供有关网络连接的信息。
要列出正在侦听的所有 TCP 或 UDP 端口,包括使用端口和套接字状态的服务,请使用以下命令:netstat -tunlp
此命令中使用的选项具有以下含义:
-t – 显示 TCP 端口。-u – 显示 UDP 端口。-n – 显示数字地址而不是主机名。-l – 仅显示侦听端口。-p – 显示进程的 PID 和名称。仅当您以 root 或 sudo 用户身份运行命令时,才会显示此信息。
查询指定端口通过grep过滤:netstat -tnlp | grep :80
显示示例:
注:Proto – 套接字使用的协议。Local Address – 进程侦听的 IP 地址和端口号。PID/Program name – PID 和进程名称。
二、使用 ss 检查端口ss 是新的 netstat,命令选项大致相同。它缺少一些 netstat 功能 ...
linux管道
linux管道在Linux系统中,管道(pipe)是一种用于进程间通信的技术,允许一个进程的输出直接成为另一个进程的输入。管道是一个非常重要的功能,因为它支持命令行中多个程序的协作,使得Linux和Unix系统的命令行工具非常强大和灵活。
基本概念管道,用符号 | 表示,在命令行中非常常见。它创建了一个通道,使得一个程序的标准输出可以直接传送到另一个程序的标准输入。
示例假设你想查找一个文件中包含特定文本的行数,你可以使用 grep 命令来搜索文本,然后用 wc 命令来计算行数。通过管道连接这两个命令:
123bashCopy codecat filename.txt | grep "search_text" | wc -l
这里的操作流程如下:
cat filename.txt 命令读取文件内容并将其输出。
grep "search_text" 从上一个命令接收输入,筛选出含有 “search_text” 的行,然后输出这些行。
wc -l 接收上一个命令的输出,计算并返回行数。
工作原理在技术层面,管道是通过在内核中创建一个缓冲区实现的 ...
Linux神器strace的使用方法
Linux神器strace的使用方法前言在Linux系统中,strace命令是一个集诊断、调试、统计与一体的工具,可用来追踪调试程序,能够与其他命令搭配使用。
场景1、在操作系统运维中会出现程序或系统命令运行失败,通过报错和日志无法定位问题根因。
2、如何在没有内核或程序代码的情况下查看系统调用的过程。
说明1、strace是有用的诊断,说明和调试工具,Linux系统管理员可以在不需要源代码的情况下即可跟踪系统的调用。
2、strace显示有关进程的系统调用的信息,这可以帮助确定一个程序使用的哪个函数,当然在系统出现问题时可以使用 strace定位系统调用过程中失败的原因,这是定位系统问题的很好的方法。
strace的常用参数及示例
-c
统计每一系统调用的所执行的时间,次数和出错的次数等。
示例:打印执行uptime时系统系统调用的时间、次数、出错次数和syscall
1# strace -c uptime
-d
显示有关标准错误的strace本身的一些调试输出。
-f
跟踪子进程,这些子进程是由于fork(2)系统调用而由当前跟踪的进程创建的。
-i在系统调用时打印指令指 ...
Linux搭建ARM的GDB和运行环境
Linux搭建ARM的GDB和运行环境0x00 前言本文中所介绍的方法目前只测试了单个的demo,并没有拿大型的项目做测试,但是应该是大同小异。这里介绍两种方法,一种是有独立的ARM硬件,另一种是依靠qemu实现的模拟化,其实其本质都是一样的。如果是大型项目的话最好还是建议有一个原生的环境,毕竟模拟环境通常会遇到一些意外的事。
0x01 依靠qemu搭建环境环境准备
ubuntu 20.04
这里我的物理机是ubuntu,虚拟机一样的。首先需要安装一下qemu的环境和编译ARM汇编机器码的交叉gcc编译器,其安装命令如下
12luna@ubuntu:~$ sudo apt update -y && sudo apt upgrade -yluna@ubuntu:~$ sudo apt install qemu-user qemu-user-static gcc-aarch64-linux-gnu binutils-aarch64-linux-gnu binutils-aarch64-linux-gnu-dbg build-essential
然后我们编写一个测试 ...