butterfly美化
本文用于记录博客修缮过程由于博客过于人机所以想要美化一下
借鉴文章:
Hexo-butterfly美化基础教程(一) | J1Zh0n9の小屋
Butterfly主题一图流背景及文章顶部图修改_butterfly设置背景图-CSDN博客
注意:本文中代码中的 + - 为添加加号要舍弃, - -为去除
一图流修改\ROOT\themes\butterfly_config.yml
编辑其中的 index_img、background、footer_bg 选项。设置网站背景,将主页顶部图和页脚背景改为透明。
新建styl文件
在ROOT\themes\butterfly\source\css\page目录,新建topimg.styl。
1234567891011121314151617181920212223242526// 顶部图#page-header, #page-header:before background-color: transparent !important background-image: unset !important.top-img height: ...
基础学习
[TOC]
建立学习参考目标
(1)短期参考比自己优秀的同龄人。阅读他们的文章和工作成果从细节中观察他们的学习方 式和工作方式。
(2)中期参考你的方向上的业内专家。了解他们的成长轨迹’跟踪他们关注的内容。
(3)长期参考业内老牌企业和先锋企业把握行业发展、技术趋势’为未来做积累
二进制文件从源代码到可执行文件编译原理编译器的作用是读人以某种语言(源语言)编写的程序,输出等价的用另一种语言(目标语言) 编写的程序。
GCC编译GCC编译主要包括四个阶段:预处理、编译、汇编、链接。*(-o 选项用于指定编译后生成的输出文件名)*
1gcc hello.c -o hello //终端运行即可获得可执行文件hello
hello.c–>hello.s–>hello.o
预处理将#开头的预处理指令转换后直接插入程序文本中,得到另一个c程序 hello.i
1gcc -E hello.c -o hello.i //-E可以单独执行预处理
预处理的一些处理规则如下:
递归处理#include预处理指令将对应文件的内容复制到该指令的位置;
删除所有的#define指令并且在 ...
pwn环境搭建
pwn环境搭建一直用的学姐给的pwn虚拟机,插件修修补补总是出点小问题,干脆之间从零开始配一台虚拟机吧,这篇文章用来记录一下配置的过程
版本:Ubuntu 24.04
前置条件请确保安装好VMware(网上有很多教程,这里就不做演示了)注意最好一次性装好,不然就会出现很多奇奇怪怪的bug
下载Ubuntu 22.04的镜像文件:https://ubuntu.com/download/desktop官网下载即可
前期配置过程可以参考这篇文章[★pwn 22.04环境搭建保姆级教程★_pwn环境搭建-CSDN博客](https://blog.csdn.net/j284886202/article/details/134931709#:~:text=本文从零开始演示了Ubuntu 22.04虚拟机的搭建过程,包括VM和镜像的下载安装,还介绍了可能出现的git clone和pip错误的解决办法,以及工具的安装。 此外,详细说明了vim、窗口、壁纸和终端的美化方法,最后提醒勤用快照,未来会更新到Ubuntu 24.04。 摘要生成于,C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 ...
UAF
UAF漏洞概述:UAF漏洞全称:use after free,翻译过来也就是说当一个指针所指向的指针块被释放掉之后可以再次被使用,但有一定的前置条件:
chunk被释放之后,其对应的指针被设置为NULL,如果再次使用它,程序就会崩溃
chunk被释放之后,其对应的指针未被设置为NULL,如果在下一次使用之前没有代码对这块内存进行修改,那么再次使用这个指针时程序很有可能正常运转
chunk被释放之后,其对应的指针没有被设置为NULL,但是在它下一次使用前,有代码对指针所指的这块内存区域进行了修改,那么当程序再次使用这块内存时,就会出现问题
我们一般称被释放后没有被设置为NULL的内存指针为dangling pointer(悬空指针)
未被初始化过的内存指针称为野指针
示例:我们以ctfshow pwn141为例子
pwn141
分析:提示:使用已释放的内存
远程环境:Ubuntu 18.04
check
12345678910桌面$ checksec pwn[*] '/home/pwn/桌面/pwn' Arch: i386-32-litt ...
堆
堆概述什么是堆在程序运行过程中,堆可以提供动态分布的内存,允许程序申请大小未知的内存。堆其实就是程序虚拟地址空间的一块连续的线性区域,它由低地址向高地址方向增长。我们一般称管理堆的那部分程序为堆管理器。
堆管理器处于用户程序与内核中间,主要做以下工作:
1.响应用户的申请内存请求,向操作系统申请内存,然后将其返回给用户程序,同时为了保持内存管理的高效性,内核一般都会预先分配很大的一块连续的内存,然后让堆管理通过某种算法管理这块内存。只有当出现了堆空间不足的情况,堆管理器才会再次与操作系统进行交互。
2.管理用户所释放的内存。一般来说用户释放的内存并不是直接返还给操作系统的,而是由堆管理器进行管理。这些释放的内存可以来响应用户新申请的内存请求。
Linux 中早期的堆分配与回收由 Doug Lea 实现,但它在并行处理多个线程时,会共享进程的堆内存空间。因此,为了安全性,一个线程使用堆时,会进行加锁。然而,与此同时,加锁会导致其它线程无法使用堆,降低了内存分配和回收的高效性。同时,如果在多线程使用时,没能正确控制,也可能影响内存分配和回收的正确性。Wolfram Gloger 在 D ...
polar2025夏季赛复现
flow整数溢出
check
12345678桌面$ checksec pwn[*] '/home/pwn/桌面/pwn' Arch: i386-32-little RELRO: Partial RELRO Stack: No canary found NX: NX enabled PIE: No PIE (0x8048000) Stripped: No
有system和/bin/sh,有gets在exit函数中但需要栈溢出控制执行流
漏洞函数
1234567891011121314151617181920212223242526272829char *test(){ char buf[824]; // [esp+0h] [ebp-338h] BYREF printf("Enter shell:"); read(0, buf, 0x300u); return xxx(buf);}char *__c ...
H&NCTFwp
PWN三步走战略简单的orw
check
1234567891011桌面$ checksec orw[*] '/home/pwn/桌面/orw' Arch: amd64-64-little RELRO: Partial RELRO Stack: No canary found NX: NX unknown - GNU_STACK missing PIE: No PIE (0x400000) Stack: Executable RWX: Has RWX segments SHSTK: Enabled IBT: Enabled
mmap分配了一个可读写执行的段buf,用第一个read读shellcode到buf上第二个read栈溢出执行buf上的shellcode读出flag,要注意一开始用getchar接收了一个字节
12345678910111213141516171819202122232425262 ...
LitCTF wp(更新中)
PWNtest_your_nc010edi打开附件
12345678910111213#!/bin/python3import osprint("input your command")blacklist = ['cat','ls',' ','cd','echo','<','${IFS}','sh','\\']while True: command = input() for i in blacklist: if i in command: exit(0) os.system(command)
发现过滤了一些指令,可以通过变量拼接构造cat,通过$IFS$9绕过空格过滤分隔指令
1a=c;b=at;c=fl;d=ag;$a$b$IFS$9$c$d
也可以用
1$0 , /bin/s? s' ...
IDA动态调试
IDA动态调试IDA动调有图形化界面,做逆向的时候学会了windows的,在回顾动态链接的延迟绑定的时候又尝试了用IDA远程动调elf文件
目前了解到IDA动态调试可以通过附加到一个已经运行的进程上,从而开始调试,也可以启动新进程来调试
指令F9继续运行,F7步入,F8步过,F2下断点
通过Debugger-Breakpoints-Breakpoint list或者Ctrl+Alt+B来查看已经下的断点
通过Debugger-Debugger windows-Stack trace或者Ctrl+Alt+S查看是谁调用了当前的函数
下断点IDA中下断点要启动源码级调试,否则断点无效
也可以在Debugger中找到
动调elf:动调elf是利用IDA自己提供的调试服务器,如 linux_server 或 linux_server64 ,这些服务器可以在目标机器上运行,并通过特定端口与 IDA 客户端通信,通过远程调试。
首先要打开安装IDA的目录在/dbgsrv中找到linux_server和linux_sever32两个文件,将其复制到装有linux系统的虚拟 ...
ret2dlresolve
ret2dlresolve参考资料:
https://ctf-wiki.org/pwn/linux/user-mode/stackoverflow/x86/advanced-rop/ret2dlresolve/
https://blog.csdn.net/seaaseesa/article/details/104478081
Return-to-dl-resolve | BruceFan’s Blog
原理:相关结构ELF可执行文件由ELF头部、程序头部表和其对应的段、节头部表和其对应的节组成。如果一个可执行文件参与动态链接,它的程序头部表将包含类型为PT_DYNAMIC的段,它包含.dynamic节。结构如下:
1234567typedef struct { Elf32_Sword d_tag; union { Elf32_Word d_val; Elf32_Addr d_ptr; } d_un;} Elf32_Dyn;
其中tag对应着每个节,比如JMPREL对应着.rel.plt
节中包含目 ...