wtf

WTF is white tight feet.

  1. 1. Tools or stricks
    1. 1.1. objdump
    2. 1.2. readelf
    3. 1.3. ldd
    4. 1.4. XXD
    5. 1.5. ncat
    6. 1.6. Hook & Patch
    7. 1.7. bad char list

Tools or stricks

objdump

千万不要学AT&T格式

-M intel: intel 格式

比较intel和AT&T格式的反汇编区别vimdiff <(objdump -d orw) <(objdump -M intel -d orw)

建立快捷intel格式,alias objdump='objdump -M intel

readelf

  • 分析 ELF binary 功能
  • readelf -a | grep STACK 看能不能跑 shellcode
1
2
sb@xulun:~/pwn/HITCON-Training/LAB/lab2$ readelf -a orw | grep STACK
GNU_STACK 0x000000 0x00000000 0x00000000 0x00000 0x00000 RWE 0x10

E表示可以执行

1
2
cat /proc/`pidof orw`/maps # `pidof orw` 表示 orw 文件的pid进程号
ffe9d000-ffebe000 rwxp 00000000 00:00 0 [stack]

stack上有x表示可以执行。

ldd

  • 寻找 libc 的一些 symbol 比如 system。
1
2
3
4
sb@xulun:~/pwn/HITCON-Training/LAB/lab2$ readelf -a /lib/i386-linux-gnu/libc.so.6 | grep system
259: 00135e80 106 FUNC GLOBAL DEFAULT 15 svcerr_systemerr@@GLIBC_2.0
664: 00041780 63 FUNC GLOBAL DEFAULT 15 __libc_system@@GLIBC_PRIVATE
1537: 00041780 63 FUNC WEAK DEFAULT 15 system@@GLIBC_2.0
  • 小技巧
    • 寻找某个 symbol 时,写成 ‘ symbol@’,假设 symbol 是某一个函数。
1
2
3
4
readelf -a /lib/i386-linux-gnu/libc.so.6 | grep ' system@'
1537: 00041780 63 FUNC WEAK DEFAULT 15 system@@GLIBC_2.0
readelf -a /lib/i386-linux-gnu/libc.so.6 | grep ' printf@'
685: 000502b0 45 FUNC GLOBAL DEFAULT 15 printf@@GLIBC_2.0

XXD

  • 类似于 IDA pro 的 string
  • Linux 自带的 strings 也不错

ncat

1
2
3
4
5
ncat -vc ./shellcode -kl 127.0.0.1 8888
-vc: check
-kl: keep listen
ip(default): 127.0.0.1
ncat -vc 'strace -e trace=read ./elf' -kl ::1 4000
1
2
3
4
5
6
7
8
9
10
# one 转发端口监听
$ ncat -vc ./orw -kl 127.0.0.1 8888
Ncat: Version 7.80 ( https://nmap.org/ncat )
Ncat: Listening on 127.0.0.1:8888
Ncat: Connection from 127.0.0.1.
Ncat: Connection from 127.0.0.1:55184.
# two 连接端口传输
$ nc 127.0.0.1 8888
Give my your shellcode:

1
2
3
4
5
6
7
8
9
10
11
$ pidof orw # 查看进程pid 
986668
$ gdb attach 986668
Attaching to process 986668
(gdb)
Could not attach to process. If your uid matches the uid of the target
process, check the setting of /proc/sys/kernel/yama/ptrace_scope, or try
again as the root user. For more details, see /etc/sysctl.d/10-ptrace.conf
ptrace: Operation not permitted.
$ echo 0 | /proc/sys/kernel/yama/ptrace_scope # 就可以attach了
$ echo "0"|sudo tee /proc/sys/kernel/yama/ptrace_scope
1
finish	该条程序结束回到eip即下一条指令执行地点

Hook & Patch

  • 更改 symbol

bad char list

bad character 列表
00 \0 null
0A \n 回车换行
FF \f 换页
0D \r 回车

本文作者 : wtfff
本作品采用知识共享署名-非商业性使用-禁止演绎 4.0 国际许可协议(CC BY-NC-SA 4.0)进行许可。This blog is under a CC BY-NC-SA 4.0 Unported License
本文链接 : http://im0use.github.io/2022/05/18/decompile/

本文最后更新于 天前,文中所描述的信息可能已发生改变