更新中…结营赛还有非常多值得探索的东西
IoT安全研究视角的交叉编译
IoT安全研究员使用交叉编译的主要目的,就是编译一段能运行在目标嵌入式设备上定制的恶意代码,以达到我们邪恶的目的。根据目标情景的不同,编译前的工具选择、编译中的参数设置、编译后的成品形态也不同。如果目标是linux,那我们的目标成品一般有三种形态:可执行ELF,动态库so,以及用于内存破坏漏洞的shellcode。如果是非linux,则可能是一段shellcode,甚至是整个固件。本文介绍了交叉编译工具本身,获得这些工具的办法,以及针对以上不同目标的编译方法。
HWS 2021 入营选拔赛 Pwn/固件/内核
本次入营赛时长4天半,仍然由安恒承办,赛题只有四类:固件、内核、逆向、Pwn。对于二进制选手足够友好,其中固件题目与IoT实战结合紧密,难度总体来说不大,入门友好型赛题。自己在比赛中也学到了很多东西,最终AK了Pwn和固件,内核和逆向分别做出来最简单的一个,总成绩排名第二。
StarCTF 2021 RISC-V Pwn Favourite Architecture
题目底座为
riscv:rv64:libc2.27:ubuntu18.04
,漏洞是该用户态程序栈溢出。不过远程环境是patch过的qemu,其功能限制了模拟程序去执行特定的系统调用,即没有riscv:rv64执行层面的execve。Pwn题总共两问:(1)读文件(2)Getshell。读文件就正常写orw的shellcode,本文也着重练习了shellcode的制造流程。Getshell的解法是:因qemu-user对模拟起来的代码访存隔离不完全,导致qemu-user模拟的程序可以直接修改qemu-user本体进程的内存,最终导致可以直接在qemu-user本体进程(x86_64层面)上Getshell。比赛时抢了第一问的一血,也是人生第一次xctf的一血,后在煜博的提示下解出第二问,感谢煜博。
python 负数 和 任意位数 补码 互转
对于补码,最简单的理解是最高位的权值是负数,而不是取反加一。
思科路由器 RV130W 中 ARM:uClibc 的 ROP寻找
在思科的RV130W路由器,因为字符串拷贝存在许多栈溢出漏洞,故利用时要考虑到空字符截断,一般来说存在这种限制条件的漏洞是不容易利用的。但不知为何,在思科这个系列的路由器中,进程加载动态库的地址是固定不变且位于高地址的,故可以通过各种动态库中的gadget来完成整个漏洞的利用,这里抽象出一道练习题进行练习寻找ROP的过程。
XCTF华为鸿蒙专场 HARMOFS01
更新中…
XCTF华为鸿蒙专场 ARM Pwn1
栈溢出,ARM题目的一般环境是QEMU用户态,默认不支持NX,故直接ROP+栈迁移然后写shellcode即可。
XCTF华为专场 三道RISC-V Pwn
更新中…没有一道题是看出洞来,因为没工具不会看,全是手测然后调出来的…
纵横杯2020 之 wind_farm_panel
house_of_orange原题
JAVA 后门 shell_reverse_tcp 实现
遇到情景是可以在android上安装任意apk,执行apk后有个反弹shell的效果。一般来说直接用msf就可以生成android后门,但不知为何在目标设备上无法正常使用,故决定自己编写一个简单的apk以完成反弹shell。最终实现三个纯JAVA版的shell_reverse_tcp,当然塞进apk也好使。开始自己完成了一个无法完全交互的shell,类似一句话木马那种伪tty。因为思路也是web的思路,执行->取结果字符串->发送结果字符串。后来参考msf的实现,人家是使用线程直接转发了启动shell的输入输出流到反弹的socket的输入输出流,不仅可以获得一个完全交互的shell,还省去了byte流转字符串的操作。这个其实就是和shellcode的思路一样了,类似dup socket的文件描述符到程序的输入输出流中。二者最重要的区别就是执行顺序上,因为自己对线程不熟,没有想到转发的过程其实是持续的,是伴随着我们对后门的操作的。也是因为自己的编程水平还停留面向过程的1234,不容易想到多个实体一起执行的情景,想的总是执行完第一步,然后第二步…最后找到一个单线程死循环获得完全交互shell的写法,通过判断输入流是否可用来进入转发,是目前看到的最短实现。
CTF中常见的C语言输入函数截断属性总结
函数 | 截断字符 | 截断属性 | 截断字符是否保留 | 截断后加 |
---|---|---|---|---|
read(0,a,0x100) |
EOF | 无 | 无 | 无 |
*a = getchar() |
EOF | 无 | 无 | 无 |
scanf("%c",a) |
EOF | 无 | 无 | 无 |
scanf("%s",a) |
EOF 0x09 0x0A 0x0B 0x0C 0x0D 0x20 | 截断字符前有有效内容则截断,如无有效内容则跳过截断字符读后面 | 不保留 | 0x00 |
sscanf(a,"%s",b) |
0x00 0x09 0x0A 0x0B 0x0C 0x0D 0x20 | 截断字符前有有效内容则截断,如无有效内容则跳过截断字符读后面 | 不保留 | 0x00 |
gets(a) |
EOF 0x0A | 截断字符前无论有无有效内容均截断 | 不保留 | 0x00 |
fgets(a,256,stdin) |
EOF 0x0A | 截断字符前无论有无有效内容均截断 | 保留 | 0x00 |
sscanf(a,"%[^;];",b) |
0x00 0x3B | 无 | 不保留 | 0x00 |
sprintf(b,"%s",a) |
0x00 | 无 | 保留 | 无 |
strcpy(b,a) |
0x00 | 无 | 保留 | 无 |
Getshell稳定:命令注入 > 内存破坏
不要瞧不起命令注入,因为你不得不承认,命令注入型漏洞就是要比内存破坏型漏洞要稳。在实际的攻击中,我们发现的漏洞代码的运行实体可能是单蹦儿的一个进程,也可能是某个进程的一个线程。如果攻击发生在某个线程中,对其他线程,以及线程所属的进程会不有影响呢?在这种情况下,内存破坏漏洞的表现怎么样呢?
Getshell动作:system与execve的原理与异同
命令注入本身就是system函数,内存破坏漏洞的利用如果想获取shell,控制流劫持后也无非是system和execve,那么这二者又有什么区别呢?当你控制流劫持,并成功的getshell后,你可想过,被你打的漏洞进程,他现在过的怎么样了呢?
Getshell远程:真·RCE 正连?反连?不连?
更新中…真实的网络程序和Pwn题目中把输入输出映射到网络端口,二者程序本体的交互接口显然是不同的,后一种的CTF题目,真的具有现实意义么?如果是真的网络程序,我控制流劫持后直接执行system(“/bin/sh”)可以拿到shell么?如果不能,我如何才能Getshell呢?
后门加密通信分析:ByteCTF 2020 Final MSF6 android/meterpreter_reverse_http
后门通信分析,比较容易的是Metasploit是开源的,故可以直接分析其后门工具meterpreter,以及对端的后门程序的源码。发现新版MSF6中的meterpreter与后门程序通信是使用了RSA和AES,即后门程序使用攻击者发过来的RSA公钥对之后通信的AES秘钥进行加密,此AES秘钥由后门程序随机生成,所以正常情况下应该是无法解密其双方通信的。但题目中公钥给了个可以被分解的素数,导致通信可被破译。另外对于密码算法的操作非常陌生,解题过程中感谢楚涵和gml的帮助。
后门加密通信分析:HITCTF 2020 Godzilla
通信,至少两个实体才有通信这一说,通信各方都需要实现共同的一套通信逻辑,而这个通信逻辑就是我们要分析的,这个逻辑可能是软件实现,也可能是硬件实现。所以柿子要挑软的捏,找到通信各方里,最好分析的实体,一般来说肯定是软件了。Godzilla这款后门管理软件虽然没有开源,但是他的对等实体,也就是他自己的php后门,肯定是可以随便看以及调试的,也就是说并不需要知道他通信加密的所有细节,直接用后门php脚本里的函数就一定可以对发往该脚本的流量进行解密了。如果是对称加密的话,双向的流量也都可解。
X-NUCA 2020 Final 团队赛:QMIPS
更新中…又是瞎发包测出来的栈溢出,给出的MIPS程序IDA7.5居然没法分析:
X-NUCA 2020 Final 个人赛:PWN1
32位静态链接程序,开了canary和NX,可以溢出可控的IO_FILE结构体,之后会fclose该结构体,所以非常容易控制流劫持。但因为静态链接,也没有后门函数,只能靠系统调用,但因为没法控制栈,也就没法找到一条gadget就能完成execve(“/bin/sh”,0,0)的。比赛时没做出来,比赛后发现他还有个没有canary可以输入的栈溢出函数,控制流劫持到这然后ROP就完了。
HITCTF 2020 三道 Pwn
比较简单的Pwn,其中的MIPS Pwn是人生中拿到的第一个Pwn的一血,全是4哥的功劳。
HITCTF 2020 蓝牙原始数据解析
给出了非常长的01串,并告知这是用ubertooth抓到的原始数据,其中含有蓝牙的广播报文,请解析报文。
X-NUCA'2020 rtos
卡住了…更新中…rt-thread的main函数栈溢出,不用getshell,ROP/shellcode读出根目录下的flag即可:
西湖论剑 2020 IoT闯关赛 赛后整理
本次IoT闯关赛为西湖论剑的其中一个赛项,由安恒的海特实验室出题,时长8小时,采用定制硬件为解题平台,玩法新颖,题目底座为armv5:linux5.4.75:libc2.30。但考察点偏CTF风格,与IoT安全实战尚有一定距离,最终赛况如下:
思科路由器 RV110W CVE-2020-3331 漏洞复现
Realworld赛题,要求挖掘并利用CISCO RV110W-E-CN-K9(固件版本1.2.2.5)中的漏洞,获取路由器的Root Shell。攻击演示时的目标设备端口只开启了443端口的https服务,且不知道路由器的Web登录账号,故其实要求就是路由器Web的前台getshell。
HWS赛题 入门 MIPS Pwn
以HWS夏令营的两道题目入门MIPS Pwn,都是栈溢出,但栈地址是否已知这个利用前提不同,故利用方式有也所不同。
2020京津冀大学生安全挑战赛 easy_vm
HWS夏令营 之 GDB调一切
HWS夏令营的课程分为三个部分,IoT固件安全,linux内核安全、IoT硬件安全。GDB作为一个出色的调试工具,也在三个部分的课程中频频登场,说哪都有他一点也不过分。三个部分中,我们用GDB依次调试了:arm,mips等与本机x86(x64)不同架构的linux用户态应用程序、x86(x64)的linux内核、STM32裸机程序。前两者目标的运行方法是qemu,后者是用的STM32单板以及JLINK仿真器。
TSGCTF 2020 beginners_pwn
题面非常简单,scanf格串参数可控。但无任何输出函数,无法泄露libc,不过程序syscall指令。利用方法:scanf格串构造任意地址写,写stack_chk_fail的GOT表,然后继续利用scanf栈溢出触发canary报警,控制流劫持,但是只找到两个能利用rdi和rsi的gadget,无法直接控制rax和rdx。最后在程序中找到一段gadget(0x4011DE)能间接控制rax和rdx,不过需要劫持rbp才能满足这段约束的条件。总之最后一顿ROP到syscall上即可execve(“/bin/sh”,0,0)。
能运行Linux的名片 入门 硬件制作
更新中…
Checkm8 漏洞研究
更新中… 一句话描述漏洞:对USB请求处理不当造成的UAF漏洞。淘宝卖了一个二手iPhone6,决定研究一下checkm8这个漏洞。checkra1n虽然可以越狱iPhone6,但是ipwndfu不支持iPhone6,于是我又买了一个iPhone7。
SCTF 2020 EasyWinHeap 入门 Windows Pwn
本文是写给只会Linux Pwn,而对Windows Pwn一窍不通的朋友,对照Linux Pwn的工具、原理、方法,讲解Windows下对应的内容。通过本文可以了解到:1.一种在Win下搭建Pwn题环境的方法(socat+pwntools+IDA) 2. Windows用户态进程运行的基本原理与一些实用工具 3.Windows堆管理的基本方法。本题的漏洞点是存在悬空指针可以UAF,而且对于该悬空指针可以继续show、edit、free。利用方式为通过UAFleak堆地址,然后通过unlink完成堆上的节点索引的改写进而继续leak出程序基址,进而继续改写堆上的索引节点leak出ucrt的基址,最后继续修改索引节点的函数指针为system并控制参数为cmd即可getshell。
SCTF 2020 Password Lock Plus 入门STM32逆向
本文通过SCTF2020的STM32门锁固件题目,介绍了STM32的正向开发方法,逆向分析方法,以及IDA在分析固件的时候一些使用技巧。最终,通过静态分析以及动态模拟调试的方法分别获得 flag1:门锁密码 以及 flag2:UART输出的信息 。
SCTF 2020 AndroidDisplayBridge
本题官方分类是杂项,题目情景来自于一个实际的android投屏软件,出题者给出的解题目标非常明确,解析数据包中的视频流即可看到flag。这种杂项题目就非常的友好,实际软件、目标明确、思路清晰,并且自己在本题也收获了一些视频方面相关知识,故做此记录。解题方法概括为:1. 识别:识别投屏软件以及软件采用的视频技术。 2. 提取:从数据包中提取出原始的视频流信息。 3. 恢复:将视频流封装成文件并播放。
从树莓派的wiringPi库分析Linux对GPIO的控制原理
前一阵给媳妇买了个树莓派4B,教程里使用wiringPi这个c库对GPIO口进行控制。但是说到底硬件接口肯定是需要通过操作系统进行控制的,wiringPi这个库到底是怎么跟操作系统打交道的呢?换句话说,操作系统提供了什么样的接口让用户程序来控制硬件?操作系统又是怎样真正的完成了一次硬件的控制呢?答案是:树莓派上的Linux通过对映射到硬件寄存器的内存地址读写来真正的控制硬件,提供的接口为GPIO设备文件。不过root用户可以通过
/dev/mem
这个文件,来直接控制物理内存,从而绕过GPIO设备文件,对GPIO进行控制。这就是wiringPi这个库的原理,有些黑客。
Meltdown复现 与 linux检测Meltdown的原理分析
本实验来自清华大学张超老师的《数据安全》课程中侧信道攻击小节作业,内容为:给定一个存在Meltdown漏洞的CPU并且安装了老版本linux系统的低权限用户,进行读取目标驱动的内存中的flag字符串,其中目标驱动的源码给出,真正flag的在源码中被隐去。作业环境为学生使用低权限用户通过ssh登录到一台机器上,然后对目标驱动的设备节点进行攻击,因为ssh环境终究会关闭,而且有驱动源码,所以决定自己动手复现一遍这个环境并完成攻击实验,首先是想了解一下Meltdown漏洞,不过重点也是想入门一下linux驱动。最终参考SEEDLabs的实验文档,使用自己的笔记本电脑,CPU为Intel(R) Core(TM) i9-8950HK CPU @ 2.90GHz,通过在vmware中安装了官方原版ubuntu12.04完成了实验。并且在过程中读完了宋宝华老师的《Linux设备驱动开发详解》前半本,以及左耳朵耗子的《跟我一起写Makefile》。
第五空间 2020 Pwn
三道题的题目附件:5space_attachment.zip
RCTF 2020 Pwn note
漏洞点为索引没有过滤负数以及堆溢出。利用方法为首先通过负数索引泄露libc,然后构造堆溢出到tcache的fd为
__malloc_hook
的地址,再触发两次对应大小的malloc即可实现任意地址写,写入one_gadget
即可。另外题目环境为libc2.29
,本文还使用了ld-2.29.so
直接加载题目的方式,介绍了在任意版本的ubuntu下做任意libc版本Pwn题的方法。
Rockwell/AB PLC 泄露机架模块脚本
Rockwell/AB PLC 的ENIP协议经过简单的构造session即可实现正常通信,通过抓取组态软件和PLC通信的数据包,找出读取架子信息的流量,构造遍历架子序号,即可泄露机架上的模块信息。
Pwnhub 故事的开始 calc
漏洞点为一个整数溢出和一个堆溢出,其中整数溢出可以转化为另一个堆溢出。本题利用方法为利用原生的堆溢出漏洞,可以覆盖一个存在间接跳转的二级指针,因为没有开启NX,所以结合堆喷即可getshell。虽然堆喷解法的exp很简单,但本题的逆向却是是很耗时的。
TSCTF 2019 Pwn 薛定谔的堆块
这是一道堆喷思想和堆风水思想结合的题目,漏洞点是堆上变量初始化。利用方式和本题代码强相关,通过堆喷思想控制堆上的未初始化的变量,然后综合利用堆风水和堆喷泄露出堆块的布局信息以及libc基址,然后在利用堆喷思想劫持控制流并完成栈迁移到堆上,最后进行ROP即可getshell。
三菱PLC控制脚本
三菱系列PLC,Melsoft私有协议,但如果没有配置口令,则可以直接进行重放攻击,通过wireshark抓取组态软件与PLC的通信报文即可获得控制PLC的数据包,重放即可。
网鼎杯 2020 Pwn boom1
多亏mcfx指导,才能做出这题,感谢。64位程序,保护全开,可以执行我们发送的c代码,但可以执行的代码有些限制,不能执行system之类的函数,但可以任意写内存。最终通过利用栈上的数据,获得了libc的基址,完成了对__malloc_hook的劫持,进而getshell。
De1CTF 2020 Pwn stl_container
漏洞点是:使用C++中的STL中vector存储对象的指针时,在earse清除其中元素时,总会调用最后一个对象的析构函数,最终导致存在悬空指针,并且可以被使用,即UAF。其使用的方式是可以继续free以及show其内容。
De1CTF 2020 Web+Pwn mixture
本题前面是Web,SQL注入注出管理员的密码,然后能任意读取文件,发现php使用了一个自定义的函数,读取到这个函数的实现的动态链接库,去除花指令后发现有个栈溢出,但是在利用的过程中需要注意栈的使用情况。
我的世界minecraft相关
大学的时候第一次接触到我的世界,觉得是个很自由浪漫的游戏,可以在游戏里天马行空的创造,当时也是因为这个游戏第一次要指定JAVA路径,听到了什么JDK、JRE的相关名词。最近和家人一起在玩这个游戏,正巧前几天的比赛里也出了游戏相关的题目,而且在CTF中出现MC也不是第一次了,所以借着这个机会玩一下游戏,也研究研究的运行原理,整理下我知道的方方面面。
和媳妇一起学Pwn 之 fengshui
IDA动态调试:arm架构的IoT设备上运行armlinux_server错误的一种解决办法
解决了在arm架构的32位linux下,由于链接器不同,动态库不全导致的IDA的调试server无法运行的问题。后来发现这种方法调试多进程时IDAserver会崩溃,应该是libthread_db.so.1与环境不兼容。另外其实有更简单的方法,直接在运行时设置环境变量,然后用本地的ld运行,ELF为参数即可:
LD_PRELOAD=./libthread_db.so.1 /lib/ld-2.25.so ./armlinux_server
QEMU使用记录
每次看QEMU启动有一堆参数,很是害怕,所以抽出空来彻底整理一下见过的QEMU用法,从使用者的角度对QEMU做一个梳理。
和媳妇一起学Pwn 之 babyfengshui
和媳妇一起学Pwn 之 BookWriter
本题总结点较多,之后总结
和媳妇一起学Pwn 之 seethefile
漏洞点是:存在一个位于bss段的变量输入溢出,溢出后可以覆盖一个IO_FILE结构体的指针。
2020年3月26日国内HTTPS访问GithubPage劫持事件分析
我猜这么诡异的动作,应该是墙,然后用iptables尝试复现了劫持的情景
和媳妇一起学Pwn 之 Secret Garden
漏洞点是:存在悬空指针,并且可以被使用,即UAF。其使用的方式是可以继续free。
gdb带源码调试libc
在使用gcc编译时,如果采用带
-g
选项编译,即可在二进制文件中附加调试信息以便gdb进行源码级别的调试。如果二进制中存在调试信息并且源码文件存在,则可以使用gdb的list命令来查看源码。通过在ubuntu中安装带调试信息的libc,并下载libc源码,即可配置gdb跟入libc的库函数后进行源码级别的调试
为啥要分析固件的加载地址?
计算机最讲道理。凭啥计算机知道加载地址,而我不知道?答:裸机程序中不必要包含自己的加载地址,如果没有加载地址,就无法对绝对地址的引用有正确的解析。所以分析的固件如果是裸机层面的代码,就需要知道其加载地址。
XCTF高校战疫 移动赛题GetFlag出题记录
出了一个攻击真机的题目:利用ssh的端口转发以及一台公网服务器,将apk绑定本地的对应端口映射到公网上。漏洞点为app中的
Runtime.getRuntime().exec
的参数拼接,利用方式为:使用其本身执行的wget
程序的--post-file
参数将保存在应用私有目录下的flag带出。最终解出本题的队伍个数为33,前三名为0ops,天枢,NU1L。
和媳妇一起学Pwn 之 Tcache Tear
漏洞点是:存在悬空指针,并且可以被使用,即UAF。其使用的方式是可以继续free。
x86架构的CPU加电后的第一条指令到底在哪?
本文讨论的第一条指令的概念是存储于CPU外部的指令,因为真正意义上的第一条指令应当位于CPU内部。这个问题其实看intel的CPU手册就知道了!
x86架构的CPU到底有多少个寄存器?
这其实是个不明确的问题,问题的主语应该具体到每一颗不同型号的CPU上,而非一类架构的CPU集合。
和媳妇一起学Pwn 之 applestore
漏洞点是:本题预留了一个彩蛋,触发后可将一块栈内存的地址记录到堆上,并且可通过一些函数的输入控制这块栈内存。
ARM PWN入门
本意是参考https://ctf-wiki.github.io/ctf-wiki/pwn/linux/arm/arm_rop-zh学习ARM相关的漏洞以及利用,却在搭建环境的问题上弄了好久,不明白QEMU启动一堆镜像都是啥,所以采用暴力的方式直接在ARM机器上学习,采用了树莓派,还有装了Termux的android手机直接gdb本地调试,安装zio本地利用。例题:jarvisOJ_typo
Termux(一个免root的android上shell环境与包管理器)
Wargames
和媳妇一起学Pwn 之 hacknote
本题可以申请任意大小的堆块,并且在删除时未清空指针数组导致悬空指针,从而产生UAF。利用方式为通过UAF调用一个存在于堆块,并且被一系列堆操作篡改的函数指针,控制流劫持进而getshell。
Write Some Paper (大小姐教我入门堆)
本题可以申请任意大小的堆块,并且在删除时未清空指针数组导致悬空指针,从而产生UAF。利用方式为通过FastbinAttack的DoubleFree的实现有限制的目标地址写,将GOT表项改写为后门函数。
和媳妇一起学Pwn 之 calc
漏洞点是:因一个逻辑漏洞引发的栈上数组越界读写
工控安全初探
方校长说:工控系统不是多安全,而是常人很少接触到
树莓派3B+刷openwrt安装mitmproxy折腾记录
折腾了三个晚上终于搞定了
36C3 CTF 之 bacon
本题源自2019年36C3 CTF,对基于Speck的hash算法找原像或第二原像,解法是中间相遇(Meet-In-The-Middle)
36C3 CTF 之 flag concat
本题源自2019年36C3 CTF,解法是由strncat函数的SSE优化产生的bug导致的栈溢出
LLVM pass 实现 C++虚表保护
本文写于2019.12.21,LLVM9.0版本编译相关
C++虚函数的攻与防
阅读文章:
Ghidra使用技巧记录
在逆向MIPS指令集的软件时,如果想看反汇编到C代码的结果,现在基本有如下三种选择:
各种sploit框架
收集各种sploit框架:
逆向某设备i2c总线控制功能实现
一次比赛中通过某漏洞getshell后,需要触发硬件上的一些响应,但是并没有找到可以直接控制硬件的对应命令,所以只能逆向能实现控制硬件的程序,进而编写对应功能代码,上传恶意程序进行操控。
线性分析法 分析 DES加密算法
学习线性分析法的起因是密码学课程的一次论文阅读的大作业,题目如下:
破解加密数据 之 Rabin算法
本题来自于:2019年工业信息安全技能大赛个人线上赛,第二场第一题,破解加密数据,题目如下,即解密密文109930883401687215730636522935643539707对应的明文数据
西门子S7-200smart启停以及清空OB块脚本
比赛遇到了S7-200smart的脚本控制,由于型号比较老,流量没有什么认证和加密,直接用wireshark抓到正常通信的包,然后重放即可,目前功能有:
同交换机下劫持通信方法:ARP欺骗和组播源冒充
在全国第五届工控系统信息安全攻防竞赛中遇到了这么一个情景:
TCP 相关机制
安全研究
条件竞争学习 之 DirtyCow分析
冬令营听了两遍DirtyCow还是不太懂,这次决定借着学习条件竞争的机会搞懂这个很出名的漏洞。首先介绍一下DirtyCow,其CVE编号:CVE-2016-5195。Linux内核的内存子系统在处理写入时复制(copy-on-write, COW)时产生了竞争条件(race condition)。恶意用户可利用此漏洞,来获取高权限,对只读内存映射进行写访问。影响版本2.6.22到4.8.3, 4.7.9, 4.4.26之前。首先介绍一下条件竞争:
逆向与IDA调试技巧小结
最近在逆向一个通信协议的实现,具体来说这个协议实现代码在一个windows软件的动态链接库中,该协议的通信过程中加入了随机数以防止重放攻击,我需要逆向找到该协议是如何对随机数进行一系列的计算,从而完成重放攻击。历时四个月终于完成,第一次搞win下逆向就是这么硬核的工作,着实让我费尽心思,更不知道熬了多少个大夜。不过在整个过程中的确学的非常多的知识,但因为并不能公开是何种协议,所以只能抽出整个过程中学到的逆向技巧进行分享。
AES的S盒生成
看了许多网上超多的关于S盒生成的文章,感觉没几个能说明白这个东西怎么算的,最后终于找到一篇文章:
AES加密CBC模式的c语言实现
手写了一遍AES加密,虽然是参考网友的(基本一毛一样),但还是在写的过程中有所收获。不过还是没弄明白s盒的计算方法,即在有限域上求乘法逆,那个扩展欧几里得实在是看不明白。能力太差,以下实现只是能做学习AES原理用,解题或者平时计算还是用高级语言中对应的算法库。
两个栈溢出小题
32位题目地址:nc 202.112.51.157 9001
64位题目地址:nc 202.112.51.157 9002
清华校赛THUCTF2019 之 固若金汤
题目地址:nc grjt.game.redbud.info 20003
清华校赛THUCTF2019 之 warmup
题目地址:nc warmup.game.redbud.info 20002
清华校赛THUCTF2019 之 ComplexWeb
重合指数法破解维吉尼亚密码(英文文本)
重合指数
2019京津冀大学生安全挑战赛 php反序列化小题
题目
python沙箱逃逸绕过以及exp收集
留坑
符号表是啥?strip去符号去了啥?
一直对符号和符号表不是很了解,这次彻底搞懂这玩意,在《程序员的自我修养》3.4和7.5章节介绍了关于符号表的相关知识。符号,这俩中文字放一起,有以下几种意思:
和媳妇一起学Pwn 之 3x17
和媳妇一起学Pwn 之 orw
和媳妇一起学Pwn 之 Start
phpstorm+xdebug调试到底怎么配置?我教你最简方法!
为什么这么麻烦?
IDA动态调试窗口布局设计
前几天看一个朋友的动态调试窗口非常酷炫,大概这样:
mac与win配置内外网同时访问
情景
查看可执行程序依赖的动态库
查看elf依赖的so
工控题目练习IDA(动态)之 组态工程密码破解
你是一名企业工程师,在供热期中,操作员发现工程系统管理员:flag的密码忘记了,请你通过工程文件找出系统管理员的密码。