ble55ing的技术专栏 code analysis ,fuzzing technique and ctf

二进制插桩方式探究

2019-10-24
ble55ing

elf

lava安装实践

lava运行,0/44,正好系统是刚安装过的,什么都没有,所以正好完整的记录一下过程(还好要到了root,省了好多事)

解压然后安装

sudo apt-get install libacl1-dev

然后运行 ./validate.sh,注意为其和core..文件夹下的configure文件添加执行权限。

由于在运行命令时将输出都重定向了&> /dev/null,所以看不到问题,就很僵硬,一步一步单提出来运行试试。

make clean

第一步:报的WARNING: ‘aclocal-1.15’ is missing on your system.

安装Automake

wget http://ftp.gnu.org/gnu/automake/automake-1.16.tar.gz
tar -xvf automake-1.16.tar.gz
cd automake-1.16
./configure --docdir=/usr/share/doc/automake-1.16
make
make install

然后报错:build-aux/git-version-gen: Permission denied

解决方法:chmod 777 build-aux/git-version-gen

configure时爆错:configure: error: Autoconf 2.65 or better is required.

安装autoconf-2.68.tar.gz

wget http://ftp.gnu.org/gnu/autoconf/autoconf-latest.tar.gz
tar xzf autoconf-2.69.tar.gz
cd autoconf-2.69
./configure
make && make install

然后configure时报错:error: no acceptable m4 could be found in $PATH.

然后安装m4

wget http://ftp.gnu.org/gnu/m4/m4-1.4.9.tar.gz
tar -xvf m4-1.4.9.tar.gz 
cd m4-1.4.9
./configure
make
make install

然后问题没解决。。

查资料需要运行autoreconf -vfi,需要autopoint,sudo apt-get install autopoint,然后发现版本不够,回去更新autoconf-latest。

然后再试autoreconf -vfi,注意要在base64/core..里运行,出错为build-aux/git-version-gen: Permission denied,sudo chmod 777 build-aux/git-version-gen,再运行通过

然后make clean,注意前面安装时要用sudo权限,但这里执行不要用

./configure –prefix=’pwd’/lava/base64/coreutils-8.24-lava-safe/lava-install

没有问题

make -j $(nproc)

报错gperf: command not found

sudo apt-get install gperf

然后报错 makeinfo: command not found

sudo apt-get install texinfo

make install

没问题

ok

Building buggy base64...
Checking if buggy base64 succeeds on non-trigger input...
Success: base64 -d inputs/utmp.b64 returned 0
Validating bugs...
Validated 44 / 44 bugs
You can see validated.txt for the exit code of each buggy version.

不容易不容易

在core../lava-install/bin里能够找到编译完的程序。明明是base64,为啥编译了这么多。。

注意:虽然编译了这么多,不过将base64.c的文件夹用来测md5sum还是不行的,需要用md5sum的文件夹。。一开始想先用base64测测,没想到扩展时竟然在这卡了挺久。。

uniq特殊

64位是20/28,据说32位没这问题

who特殊

who的lava_get 插入的有些问题,who.c中需要改成如下,目录在coreutils-8.24-lava-safe/src/who.c 中。

unsigned int lava_get(unsigned int bug_num) {

#define SWAP_UINT32(x) (((x) >> 24) | (((x) & 0x00FF0000) >> 8) | (((x) & 0x0000FF00) << 8) | ((x) << 24))
  if (0x6c617661 - bug_num == lava_val[bug_num] ||
      SWAP_UINT32(0x6c617661 - bug_num) == lava_val[bug_num]) {
    printf("Successfully triggered bug %d, crashing now!\n", bug_num);
    fflush(0);
    //exit(0);
  }
  else {
    //printf("Not successful for bug %d; val = %08x not %08x or %08x\n", bug_num, lava_val[bug_num], 0x6c617661 + bug_num, 0x6176616c + bug_num);
  }
  return lava_val[bug_num];
}

与AFL的结合

命令行输入

export CC=afl-gcc
export CXX=afl-g++
./validate.sh

就可以生成afl版的,记得编译完要改回去,还有,在编译前要讲validate.sh里的输出地址改了

参考文章

https://zhuanlan.zhihu.com/p/82150217

https://www.jianshu.com/p/31a048ccb2ad


上一篇 lava

Content