问题解决及工具使用

记录一些工具的使用方法和遇到的问题解决途径

工具使用

one_gadget

github : https://github.com/david942j/one_gadget

所谓 one_gadget 就是一个实现了直接执行system(‘/bin/sh’)的程序跳板。

常见的,可以使用one_gadget覆盖劫持got表、返回地址、hook(__malloc_hook、__free_hook)等等操作,也就是当可以劫持控制流后覆盖的捷径

安装方法

安装one_gadget需要ruby环境,因为是由ruby写成的。

以ubuntu为例,首先安装ruby

1
sudo apt-get install ruby

还需要安装ruby的包管理器

1
sudo apt-get install gem

依赖安装好了以后就可以安装one_gadget了

1
$ gem install one_gadget

使用方法

一般针对libc使用,直接one_gadget libc.so就可以了

输出结果:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
└─[$] <> one_gadget libc64.so 
0x45216 execve("/bin/sh", rsp+0x30, environ)
constraints:
rax == NULL

0x4526a execve("/bin/sh", rsp+0x30, environ)
constraints:
[rsp+0x30] == NULL

0xf02a4 execve("/bin/sh", rsp+0x50, environ)
constraints:
[rsp+0x50] == NULL

0xf1147 execve("/bin/sh", rsp+0x70, environ)
constraints:
[rsp+0x70] == NULL

当泄露了libc基地址以后再用libc base+offset就可以使用了,但需要注意one_gadget的输出是有一定限制的,如[$rax = NULL],需要逐个尝试。

libc database

github: https://github.com/niklasb/libc-database

有一些PWN题故意不给libc文件,但是可以泄露地址,libc database可以利用泄露的地址来确定服务器使用的libc。

安装方法

先下载libc database

1
git clone https://github.com/niklasb/libc-database

利用get来下载流行的libc库

1
2
cd libc-database
./get

程序会自动在ubuntu网站上下载相关的libc文件,存储到./db文件夹下

使用方法

使用./find可以在db中找到对应libc,如泄露的地址是printf 0xf7xxxx260 puts 0xf7xxxf30,输入最后三位即可

1
2
$ ./find printf 260 puts f30
archive-glibc (id libc6_2.19-10ubuntu2_i386)

seccomp-tools

github: https://github.com/david942j/seccomp-tools

主要是针对linux seccomp沙箱规则的读取

安装方法

1
gem install seccomp-tools

如果遇到报错,可参考下面问题解决…

使用方法

主要就用dump了…

1
seccomp-tools dump ./xxxx

比如查看检查到的某通防机制

问题解决

ida “sp-analysis failed” 错误

问题描述

具体情况是在分析QWB CTF 2018 比赛中raisepig一题中,发现某些函数在按F5进行反编译时,出现这个问题,导致无法查看反编译代码。

参考了本队大佬的博客以后,解决了问题。

解决方法

问题原因貌似是在代码执行中的pop、push操作不匹配,导致ida解析的时候对esp的值产生错误造成的。这种不匹配可能对程序执行并无影响。

一种可能的解决办法是:

首先,在ida中打开栈指针的显示:options-general-stack pointer (勾选)

结果会在原来的地址偏移的旁边,显示函数栈内ESP寄存器的偏移:

可以看到在出现问题的函数中,retn前的偏移是一个非0值,这回导致ida识别函数出错,修改的目的就是使这个值为0,修改办法是使用“ALT + K”快捷键,强行使esp保持平衡,具体操作是:

在leave这一行(这很重要)按快捷键“ALT+K”,修改其值为leave前方标志的其ESP偏移值:

当发现,retn前标志的ESP偏移是00时,按F5应该就可以反编译了(不要care红色的报错,果断的按F5!

gem “ERROR: Failed to build gem native extension.”问题

问题描述

在安装seccomp-tools时,使用

1
gem install seccomp-tools

命令时,出现报错

1
2
3
4
5
6
7
  ERROR:  Error installing seccomp-tools:  
ERROR: Failed to build gem native extension.

/System/Library/Frameworks/Ruby.framework/Versions/2.1/usr/bin/ruby
extconf.rb
mkmf.rb can't find header files for ruby at
/System/Library/Frameworks/Ruby.framework/Versions/2.1/usr/lib/ruby/ruby.h

解决方法

缺少ruby-dev,执行

1
sudo apt-get  install   ruby-dev

不蒜子统计数目消失,只留下竖线

问题描述

10月9日,查看blog时,突然发现最下方统计数目消失,只剩下原本中间的细线了,最初以为是网络的问题,后来发下其他设备访问也同样是这样,访问一些相同主题的blog发现都消失。顺手将这个问题反馈到主题的issue,但是并没有解决。

解决方法

是在忍不了了,查看了一下文档,发现使用的默认统计插件是不蒜子 ,进入官网后突然发现公告:

1
2
3
4
5
6
7
!!!!2018年9月 - 重要提示 !!!!
大家好,因七牛强制过期原有的『dn-lbstatics.qbox.me』域名(预计2018年10月初),与客服沟通数次无果,即使我提出为此付费也不行,只能更换域名到『busuanzi.ibruce.info』!因我是最早的一批七牛用户,为七牛至少带来了数百个邀请用户,很痛心,很无奈!
各位继续使用不蒜子提供的服务,只需把原有的:
<script async src="https://dn-lbstatics.qbox.me/busuanzi/2.3/busuanzi.pure.mini.js"></script>
域名改一下即可:
<script async src="https://busuanzi.ibruce.info/busuanzi/2.3/busuanzi.pure.mini.js"></script>
只需要修改该js域名,其他均未改变。若有疑问,可以加入不蒜子交流QQ群:`419260983`,对您带来的不便,非常抱歉!!!还是那句话,不蒜子不会中断服务!!!!

也就是说问题原因是不蒜子的域名过期了。

这个问题就很好解决了,首先使用sublime等软件把主题的文件夹打开,全局搜素“dn-lbstatics.qbox.me”,把这个字符串换成“busuanzi.ibruce.info”,重新生成一下就可以了。

本blog使用的yelee主题默认字符串在\themes\yelee\layout\_partial\after-footer.ejs 文件。

文章目录
  1. 1. 工具使用
    1. 1.1. one_gadget
      1. 1.1.1. 安装方法
      2. 1.1.2. 使用方法
    2. 1.2. libc database
      1. 1.2.1. 安装方法
      2. 1.2.2. 使用方法
    3. 1.3. seccomp-tools
      1. 1.3.1. 安装方法
      2. 1.3.2. 使用方法
  2. 2. 问题解决
    1. 2.1. ida “sp-analysis failed” 错误
      1. 2.1.1. 问题描述
      2. 2.1.2. 解决方法
    2. 2.2. gem “ERROR: Failed to build gem native extension.”问题
      1. 2.2.1. 问题描述
      2. 2.2.2. 解决方法
    3. 2.3. 不蒜子统计数目消失,只留下竖线
      1. 2.3.1. 问题描述
      2. 2.3.2. 解决方法
|