N1ch0l4s
码龄6年
求更新 关注
提问 私信
  • 博客:33,914
    社区:337
    34,251
    总访问量
  • 43
    原创
  • 29
    粉丝
  • 99
    关注
IP属地以运营商信息为准,境内显示到省(区、市),境外显示到国家(地区)
IP 属地:上海市
加入CSDN时间: 2020-03-09
博客简介:

weixin_46521144的博客

查看详细资料
个人成就
  • 获得29次点赞
  • 内容获得33次评论
  • 获得79次收藏
  • 代码片获得279次分享
  • 博客总排名597,041名
创作历程
  • 43篇
    2021年
成就勋章
TA的专栏
  • 工具使用
    2篇
  • pwn
    31篇
  • angr
    3篇
  • pwnable.tw
    5篇
  • CSAPP
  • x86-从保护模式到实模式
    8篇

TA关注的专栏 0

TA关注的收藏夹 0

TA关注的社区 4

TA参与的活动 0

兴趣领域 设置
  • 后端
    架构
  • 网络空间安全
    系统安全web安全安全架构
创作活动更多

「谁说嵌入式只是调包和焊板子?」—— 2026嵌入式全栈技术征锋令

谁说嵌入式只会“Ctrl+C 调包”和“拿电烙铁焊板子”?2026嵌入式全栈技术征锋令正式启幕! 本次活动专为硬核硬件/软件开发者打造,无论你是刚玩转裸机外设的萌新,还是精通RTOS调度、死磕底层驱动的行业老手,亦或是执掌系统架构的大神,这里都是你证明实力的舞台! 拒绝表面功夫,每一行代码,都有撬动硬件的力量!晒出你的硬核工程实战,为嵌入式开发者的全栈硬实力正名!

213人参与 去参加
  • 最近
  • 文章
  • 专栏
  • 代码仓
  • 资源
  • 收藏
  • 关注/订阅/互动
更多
  • 最近

  • 文章

  • 专栏

  • 代码仓

  • 资源

  • 收藏

  • 关注/订阅/互动

  • 社区

  • 帖子

  • 问答

  • 课程

  • 视频

搜索 取消

部署ctf pwn题目的时候遇到的坑+经验总结

前言 还是第一次部署pwn题目,这次一共使用了两个项目一个是ctfd,另一个是ctf-xinetd。重点大概记录一下两个东西咋用。 ctfd 编辑首页部分 目录栏里面的page xinetd 部署题目 在bin目录下放好binary和flag(或者flag.txt以及其他的,用户ls之后就能看到这个文件夹的内容) 修改ctf.xinetd文件中如下图所示的部分为可执行文件名称,也就是pwn题目的binary文件 启动docker,使用的命令就是README中的 sudo docker build -
原创
博文更新于 2023.07.16 ·
3815 阅读 ·
1 点赞 ·
2 评论 ·
16 收藏

pwn musl libc环境配置

pwn musl libc环境配置 上网找不到能看的资料,太惨了。还是自己看手册把。 原本是符号调试musl libc时碰到的困难,发现不知道怎么符号调试,后面询问别人看到要用dir命令。然后上网查发现并不能查到讲的清楚的。如果下面有写的有问题的,请大家指出。 gdb dir命令手册 起源 源文件在编译时其实不能携带源代码(好像确实,以前以为-g命令就会带上源代码的)而且源代码可能会移动,因此gdb需要一种方法寻找源代码文件的位置。gdb默认会有一个寻找源文件的列表叫做source path。 source
原创
博文更新于 2021.10.21 ·
1395 阅读 ·
2 点赞 ·
0 评论 ·
5 收藏

srop学习 rootersctf_2019_srop

rootersctf_2019_srop 前置知识 这里有必要讲一下什么是srop。ctf_wiki的描述 这里我也简单说一下我的理解。就是内核处理信号(软中断)的时候,会将寄存器压栈到用户地址空间(这里有点小疑惑,因为内核切换进程的时候压栈是属于到内核地址空间,这里是用户地址空间)然后切换回来的时候,调用rt_sigreturnpop回来之前保存的寄存器等。那么我们只要拥有这个gardet,就可以控制程序执行流以及次奥用的系统调用的参数。而触发pop这些寄存器的方法就是直接调用这个rt_sigreturn
原创
博文更新于 2021.10.12 ·
670 阅读 ·
0 点赞 ·
0 评论 ·
1 收藏

ciscn_2019_n_7(exit_hook)、wdb_2018_1st_babyheap(fsop的例子)

ciscn_2019_n_7 劫持exit_hook 这道题考察比较单一,劫持exit_hook即可 在ida里面看到,首先会在本地寻找一个log.txt,否则直接段错误。因此现在本地创建一个log.txt。写不写内容都可以。 接下来是exit_hook的位置 exit_hook的位置 在libc-2.23中 exit_hook = libc_base+0x5f0040+3848 exit_hook = libc_base+0x5f0040+3856 在libc-2.27中 exit_hook = lib
原创
博文更新于 2021.09.10 ·
1353 阅读 ·
2 点赞 ·
0 评论 ·
1 收藏

rctf_2019_babyheap、0ctf_2018_heapstorm2学习(house of storm)

0ctf_2018_heapstorm2 这道题算是house of storm的起源。 house of storm的原理其实就是:结合利用largebin attack和劫持unsortedbin后一个chunk的bk,实现把堆地址写入到任意地址,再结合unsortedbin的bk指针分配时只检查size而不检查chunk完整性(这里有点疑惑,unlink检查应该很严格,可能是绕过了而不是没有检查)分配到这个地址上(add(0x48))实现的结果和unlink差不多。 具体利用条件: glibc2.3
原创
博文更新于 2021.09.10 ·
1730 阅读 ·
0 点赞 ·
0 评论 ·
3 收藏

angr理论笔记(三)program state

program state 在之前几章中,主要学习的是simulate state也就是模拟状态的程序运行状态。接下来将要学习的是state object也就是状态这个对象的性质(包含但不限于simulate state),并且学习如何和这个对象进行交互。 基本执行 首先简单介绍一下simulator的一些性质,具体性质将在下一章介绍。这里简单介绍一些性质。 state.step()执行符号执行的一步,并返回一个simsuccessors 和一般程序流执行不同,符号执行的一步将会返回许多结果,可以分为多种类
原创
博文更新于 2021.09.04 ·
651 阅读 ·
2 点赞 ·
0 评论 ·
2 收藏

2021祥云杯部分pwn

note 格式化字符串 本题考查了scanf的格式化字符串利用。一般我们用的都是printf的格式化字符串。这里是scanf 踩坑 一开始没有注意到sendline会多发一个换行符,导致往栈上$7的stdout写入的时候老是写不对,结果发现是多发了。 scanf的格式化字符利用方式和printf的比较类似,就是不能直接输出。这里注意到栈上有stdout,可以直接往里面写入绕过判断输出libc_info的fbad1800。 step1 获取libc payload1 = p64(0xfbad1800)+p6
原创
博文更新于 2021.09.03 ·
774 阅读 ·
2 点赞 ·
4 评论 ·
1 收藏

angr理论笔记(一)loading a binary

angr——loading a binary 主要学习一些api,以及angr的使用。源代码阅读暂时不做考虑 加载器、映射 加载器主要起到将binary加载到固定空间的作用 proj = angr.Project('examples/fauxware/fauxware') loader有一些api可供调用,可以通过此查看相应libc,加载器等 >>> proj.loader.all_objects [<ELF Object fauxware, maps [0x400000:0x60
原创
博文更新于 2021.09.02 ·
417 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

angr理论笔记(二)solver engine

solver engine 简介 angr的威力不在于模拟执行,而在于将输入抽象为符号,通过将符号(也就是静态或者全局变量的名称,局部变量在编译过程中不具有符号)以及符号的运行过程抽象为语法树,判断输出结果。就像z3的工作一样。我们在这一章中需要解决的问题是: 我知道输出XXX所需要的操作序列是ABCD,那么我的输入应该是多少 bit vector bit vector可以说是模拟了c语言中对于整数的解析方式。例如将int转换为32bit的储存形式。称作bit-vector 当然32位不是必须的,任意位
原创
博文更新于 2021.09.02 ·
704 阅读 ·
1 点赞 ·
0 评论 ·
0 收藏

2021dasctf七月赛 pwn题解复现(strdup,md5,protect,setcontext)

前言:算是第一次参加自己觉得能力匹配的比赛之前的0ctf,tctf的,感觉自己就像个混子,2021国赛参加的时候全程都在学没学过的堆,所以其实也没觉得自己能力赶得上。然而第一次打比赛嘛,总归是不可能会做的,不过也算是知道了,比赛也没有想象中的那么恐怖。 本篇文章参考的wp https://kr0emer.com/2021/08/04/DASCTF%20July%20X%20CBCTF%204th%20pwn/ Easyheap 保护全开,也开了沙箱,但是同时也开了一块RWX的段,地址是固定的0x233300
原创
博文更新于 2021.08.14 ·
1255 阅读 ·
0 点赞 ·
0 评论 ·
4 收藏

sctf_2019_easy_heap off-by-null劫持IO_FILE,理解 0ctf2015 free_note unsortedbin-double_free使用

分析以及漏洞点 本身off-by-null没什么可以再说的,但是这道题没有show函数,就必须想到要劫持IO_FILE。但是之前就一直有个问题就是既然unsortedbin中地址无法取出,怎么能写到tcache或者fastbin中?之前许多题目因为正好有类似的漏洞,但感觉不是很普世。这次只有一个off-by-null就实现了这一点,因此看完之后恍然大悟。明白了一般性的劫持IO_FILE泄露libc的方法。 关键点:构造chunk overlapping,之后用一个大的unsortedbin包裹住这个chun
原创
博文更新于 2021.08.14 ·
460 阅读 ·
0 点赞 ·
0 评论 ·
2 收藏

bss上格式化字符串处理【buuoj】SWPUCTF_2019_login

这道题用了两种方法去做,一种是修改got表,零一种是修改返回值控制执行流。 IDA分析 很明显的格式化字符串漏洞,但是是在bss段上 总结一下32位格式化字符串在bss段上的处理方法就是:寻找一个类似ebp的栈上寄存器,如下图 通过修改这个ebp,可以修改上图0xffc78f38的值为想要的(记住:格式化字符串修改栈上指针指向区域的地址,因此是0xffc78f38)如果想要劫持got表,寻找下面80开头的数据(和got表比较相关)修改完后就可以变成下图这样 (思考一下为什么要这么写:因为一般的格式化字符
原创
博文更新于 2021.08.10 ·
1354 阅读 ·
3 点赞 ·
0 评论 ·
3 收藏

buuoj [2020 新春红包题]3 2.29下unsortedbin attack的替代方法——Tcache Stashing

IDA分析 seccomp只允许orw 程序没有开启canary,末尾有一个大小为0x10的溢出,可以构造栈迁移,栈迁移可以直接orw, 但是需要条件。 需要满足这里的backdoor chunk中的部分内容值大小要求。这里的backdoor chunk是程序一开始申请的chunk,我们不能正常写入,看到这里其实可以想到unsortedbin attack。但是程序是glibc2.29,没有unsorted bin attack 允许构造的chunk只能是0x10,0xf0,0x300,0x400 这道题
原创
博文更新于 2021.08.09 ·
925 阅读 ·
0 点赞 ·
3 评论 ·
0 收藏

SWPUCTF_2019_p1KkHeap(负溢出tcache)de1ctf_2019_weapon(IO_FILE泄露libc)

SWPUCTF_2019_p1KkHeap IDA分析 用IDA反编译发现,此题操作有如下限制 顺便说一下,buu上的所有ubuntu18的题目都是带tcache-double-free的,其实这不太好,怕养成习惯这样解题。 这里可以看到的是,对delete和add有明显的次数限制,不能简单的tcache-poisoning来泄露libc。本题一开始也是卡在这里,没有别的思路。 之后参考了别人的wp,发现tcache的管理块其实存在一些漏洞。这里记录一下 // tcache结构定义中的部分代码 #if U
原创
博文更新于 2021.08.04 ·
532 阅读 ·
1 点赞 ·
0 评论 ·
0 收藏

劫持vtable修改程序执行流——pwnable seethefile

前置知识 vtable vtable是和file结构体并列的一段内容,是函数指针数组,其中包含了对file的一些操作函数。 以下来自ctf-wiki 在 libc2.23 版本下,32 位的 vtable 偏移为 0x94,64 位偏移为 0xd8 以下是vtable的实际结构,如图所示,我们需要关注的是close部分。也就是关闭文件时将会调用的函数。 ## 劫持原理 以下内容摘自https://www.jianshu.com/p/2e00afb01606 分析close函数,最关键的利用点在这里 注意
原创
博文更新于 2021.07.23 ·
558 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

pwnable.tw tcache_tear

需要注意的:首先是free伪造的bss段上堆块的时候要伪造三个才能free,因为都会检查。 其次是在这个版本的glibc下,tcache不会检查bins中size为,因此尽管free周围没有0x7f也可以伪造chunk from pwn import * # io = process('./tcache_tear') io = remote('chall.pwnable.tw',10207) context.log_level='debug' elf = ELF('./tcache_tear') libc
原创
博文更新于 2021.07.21 ·
323 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

roarctf_2019_realloc_magic 详细学习理解 无show()利用IO_FILE输出+realloc分配实现

roarctf_2019_realloc_magic 这道题从头到尾都是我的知识盲区… 爆破,IO_FILE,realloc 学习资料 利用IO_FILE泄露libc原理 IO_FILE泄露libc例题 wp参考 realloc重要知识 静态分析 可以看出程序只有对realloc的调用操作,只有add()和delete()没有泄露函数。一般堆题如果没有show()函数,plt里面也没有system,可以采用的方法是劫持IO_FILE泄露。 IO_FILE劫持思路 对于劫持IO_FILE的思路,我的理解是
原创
博文更新于 2021.07.20 ·
1029 阅读 ·
1 点赞 ·
0 评论 ·
3 收藏

2021 Picoctf pwn部分wp

首先说一下,是参考了校内学长的复盘讲解hhh,这也是第一次直接接触在线的ctf而不是靶场。 Gauntlet1 在ida里面看一下。这三道Gauntlet都是一个类型的,漏洞都是一个格式化字符串+栈溢出。 那就很容易直接把shellcraft.sh()写道栈上,因为一开始给打印了背写区域的起始位置并且使可执行的栈,一溢出就会跳转到我们写的shellcraft上面执行。注意中间还要有个格式化字符串的额send,不要忘了,之前卡在这里好久啊。。。 exp from pwn import * context.
原创
博文更新于 2021.07.18 ·
744 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

ciscn_2019_es_2 栈迁移(很好的例子)

ciscn_2019_es_2 一道很好的栈迁移例题。之前看合天讲的虽然也涉及到原理,但是例子用的是攻防世界pwn200,溢出长度还是有点多。这次只能溢出ebp和retaddr,就很典型并且有挑战性。这题没做出来,看的wp,希望下次能自己做出来。 题目给了两次溢出,这两次都是必要的。一般来说,第一次溢出需要泄露栈上地址用来给第二次做迁移使用,第二次执行栈迁移,控制ret跳转到我们所迁移的栈上,执行栈上填写的exp。由于第二次依然是在函数栈帧内输入,因此除非能自己read到bss上(通常能这样做的溢出空间也
原创
博文更新于 2021.07.17 ·
1486 阅读 ·
3 点赞 ·
1 评论 ·
5 收藏

ciscn_2019_c_1

ciscn_2019_c_1 太无语了这道题,现在也没整明白为什么超过buffer大小就不加密了,反正就…不加密了。其实可以通过\x00绕过strlen的检查。这里mark下这位师傅总结的输入函数截断方式可以看到的是,gets不是00,因此可以用strlen绕过 这道题的libc可以用libcSearcher,注意要选第0个(坑死我了!!第二个libc_base也是正确的000结尾,但就是不对,害得我自己下的libc) 此外就是栈平衡问题,ununtu18之后system会出现这个问题。一般本地调试进入sy
原创
博文更新于 2021.07.16 ·
483 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏
加载更多