安洵杯WP

太菜了,最后一个0解题不会,只会前两个被人打烂的。

  • babyarm

    Arm架构的栈溢出,先换表base64解密一下,可以解出来应该输入的字符串是s1mpl3Dec0d4r,然后就是32位的溢出,exp如下: 阅读更多...

AFL源码分析(一)

  • 前言

    一直想学fuzz,但是由于自己太懒,一直没开始,最近终于开始学了,一直认为学习一个东西最好的办法,就是阅读源码,只有理解了源码,才能一通百通,我将从afl-gcc开始,一步一步的分析AFL的源码。

    源码下载:

    1
    git clone https://github.com/google/AFL.git
  • afl-gcc

    afl-gcc.c的main函数如下:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    int main(int argc, char** argv) {

    if (isatty(2) && !getenv("AFL_QUIET")) {

    SAYF(cCYA "afl-cc " cBRI VERSION cRST " by <lcamtuf@google.com>\n");

    } else be_quiet = 1;

    if (argc < 2) {

    SAYF("\n"
    "This is a helper application for afl-fuzz. It serves as a drop-in replacement\n"
    "for gcc or clang, letting you recompile third-party code with the required\n"
    "runtime instrumentation. A common use pattern would be one of the following:\n\n"

    " CC=%s/afl-gcc ./configure\n"
    " CXX=%s/afl-g++ ./configure\n\n"

    "You can specify custom next-stage toolchain via AFL_CC, AFL_CXX, and AFL_AS.\n"
    "Setting AFL_HARDEN enables hardening optimizations in the compiled code.\n\n",
    BIN_PATH, BIN_PATH);

    exit(1);

    }

    find_as(argv[0]);

    edit_params(argc, argv);

    execvp(cc_params[0], (char**)cc_params);

    FATAL("Oops, failed to execute '%s' - check your PATH", cc_params[0]);

    return 0;

    }

    我们需要关注的是find_as函数与edit_params函数,首先来看find_as函数,该函数用于寻找汇编器的位置: 阅读更多...

语法分析器(Parser)的实现

  • 前言

    语法分析器实现参考自文章:

    (https://llvm-tutorial-cn.readthedocs.io/en/latest/chapter-2.html)

  • 抽象语法树的定义

    抽象语法树的作用在于牢牢抓住程序的脉络,从而方便编译过程的后续环节(如代码生成)对程序进行解读。

    我们可以分别定义出所有语法结构的抽象语法树。

    我们先定义一个基类,并让其他的类继承于它:

    1
    2
    3
    4
    class ExprAST{
    public:
    virtual ~ExprAST(){}
    };

    对于常量的抽象语法树的定义如下:

    1
    2
    3
    4
    5
    class NumExprAST : public ExprAST{
    double __Val;
    public:
    NumExprAST(double val): __Val(val) {}
    };

    当然,对于其他语法结构,如二元运算符,变量,函数等语法结构的定义也大同小异: 阅读更多...

CVE-2018-17463详细分析及复现

本文章首发于看雪论坛,链接如下:

(https://bbs.pediy.com/thread-274865.htm)

  • 前言

    本文为CVE-2018-17463的分析以及复现,CVE-2018-17463是一个由于TurboFan优化所产生的漏洞,因为我也是刚接触浏览器这方面不久,是个新手,也是第一次复现真实环境中的漏洞,所以我会尽可能的把分析的过程以及自己在复现过程中遇到的问题写清楚,希望能够帮助到和我一样刚入门的师傅。

    本文参考文章:http://p4nda.top/2019/06/11/%C2%96CVE-2018-17463/?utm_source=tuicool&utm_medium=referral#%E7%8E%AF%E5%A2%83%E6%90%AD%E5%BB%BA

  • 前置准备

    这个漏洞在Chrome Bug的网页上,有很多的相关信息,我们可以在其中找到存在漏洞的版本,可以看到相关的PoC,为我们的复现做准备,这里放一下链接(第一次复现不了解,当时找链接找了半天): 阅读更多...

初识v8之starctf2019-oob

最近开始学习浏览器相关的知识了,虽说看了一些基础知识,但是对于漏洞利用的手法仍然不是很明确,询问队里的大佬后,给我推荐了一道入门题,在做完之后写出了这篇文章。

  • SatrCtf2019-oob

    • 数组对象的结构

      这里简单讲解一下做这一题需要的前置知识。 阅读更多...

v8调试环境搭建(Ubuntu22.04)

  • 写在前面

最近开始学习浏览器相关的知识了,这也是以后想深入研究的方向,俗话说工欲善其事,必先利其器。所以记录一下自己v8环境搭建的过程。

相关的知识在网上其实非常多了,但是没有找到ubuntu22.04版本的教程,虽然都差不多,但是我还是决定记录一下自己搭建环境的过程。 阅读更多...

词法分析器(Lexer)的实现

  • 写在前面

写下Compiler系列的主要目的,是为了记录一下本人在学习编译原理以及做出一个简单的Compiler的历程,为后续向二进制安全的更深领域的学习打下基础。

  • Lexer是什么

Lexer是Lexical analyzer的缩写,中文意思为词法分析器,是进行词法分析的程序或者函数,这也是编译器所做的第一项工作。注意:如果没有编译原理的相关知识,请先学了编译原理之后再来看本文章。

  • 词法分析的任务

词法分析的任务就是让编译器搞懂我们究竟写了什么,编译器会先将我们的程序切片成一个一个的单词,将其作为一个token,每个token都会带有一个编号。 阅读更多...

Pwn出题教程

前段时间经历了自己人生中的第一出题,在出题过程中遇到了很多问题,而网上相关的教程很少,于是打算记录一下自己出题的过程以及踩过的坑。

  • 首先是安装docker

用官方的脚本直接就可以安装: 阅读更多...

Kokodayo-Wp

前几天无意间看到有师傅在询问最短的shellcode的长度是多少,询问之后发现是这个题目只允许写入0x11字节的shellcode,正好本人汇编水平非常的拉,所以想借这题练习练习。

打开虚拟机发现保护全开,是64位的,拖进IDA反汇编后查看伪代码,在如下图中的位置: 阅读更多...

DSCTF2022 fuzzer-Wp

题目附件以及exp我已经上传到GitHub,有需要的可以自己去下载,这题比赛的时候是我队友出的,大佬们tql。

打开IDA Pro进行反汇编后阅读伪代码,这题逆向的过程并不难,所以就不讲了,漏洞也好找,静态分析后可以发现在1-5之外,还存在第六个选项。

点进6号选项调用的函数sub_E2B之后,可以发现,漏洞点就在如下位置: 阅读更多...

  • Copyrights © 2022 h1J4cker
  • 访问人数: | 浏览次数:

请我喝杯咖啡吧~

支付宝
微信