Snowdream
posts - 403, comments - 310, trackbacks - 0, articles - 7
BlogJava
::
首頁
::
新隨筆
::
聯系
::
聚合
::
管理
Hacking the Kernel - 修改系統調用表
Posted on 2008-02-19 14:55
ZelluX
閱讀(755)
評論(0)
編輯
收藏
所屬分類:
Linux
、
System
昨天硬是沒找到正確的sys_call_table的地址,原來我之前在虛擬機上裝的ArchLinux是64位的。。
今天在真機上成功地修改了系統調用表。
測試環境:ArchLinux 2.6.24
1. 2.4.20以后的內核出于安全考慮,沒有導出sys_call_table符號,所以要先通過System.map找到sys_call_table的地址
$ cat /boot/System.map26 | grep sys_call_table
c0375680 R sys_call_table
另外也可以用nm工具獲得vmlinux中的所有符號
$ nm /usr/src/linux-2.6.24-ARCH/vmlinux | grep sys_call_table
結果一樣
2. 以添加一個把uid改成root(0)為例,寫一個內核模塊:
addcall.c
#include?
<
linux
/
kernel.h
>
#include?
<
linux
/
module.h
>
#include?
<
linux
/
init.h
>
#include?
<
linux
/
unistd.h
>
#include?
<
linux
/
time.h
>
#include?
<
asm
/
uaccess.h
>
#include?
<
linux
/
sched.h
>
#define
?__NR_changeuid?238
MODULE_DESCRIPTION(
"
Change?uid?to?0
"
);
MODULE_AUTHOR(
"
ZelluX
"
);
static
?
int
?(
*
saved)?(
void
);
void
?
**
?sys_call_table?
=
?
0xc0375680
;
asmlinkage?
int
?sys_changeuid(
void
)
{
????current
->
uid?
=
?current
->
euid?
=
?current
->
suid?
=
?current
->
fsuid?
=
?
0
;
????printk(KERN_ALERT?
"
uid?has?been?changed.
"
);
????
return
?
0
;
}
int
?__init?init_addsyscall(
void
)
{
????saved?
=
?(
int
?(
*
)?(
void
))?(sys_call_table[__NR_changeuid]);
????sys_call_table[__NR_changeuid]?
=
?(unsigned?
long
)?sys_changeuid;
????printk(KERN_ALERT?
"
the?call?has?been?added.
"
);
????
return
?
0
;
}
void
?__exit?exit_addsyscall(
void
)
{
????sys_call_table[__NR_changeuid]?
=
?(unsigned?
long
)?saved;
????printk(KERN_ALERT?
"
the?call?has?been?removed
"
);
}
module_init(init_addsyscall);
module_exit(exit_addsyscall);
對應的Makefile:
ifneq?($(KERNELRELEASE)
,
)
????obj-m?:
=
?addcall.o
else
????KERNELDIR??
=
?/lib/modules/$(shell?uname?-r)/build
????PWD??:
=
?$(shell?pwd)
default:
????????$(MAKE)?-C?$(KERNELDIR)?M
=
$(PWD)?modules
endif
3. 使用insmod addcall.ko載入模塊后,用dmesg可以看到the call has been added.
4. 測試程序
test.c
#include?
<
linux
/
unistd.h
>
#include?
<
stdio.h
>
#define
?__NR_changeuid?238
int
?main()
{
????printf(
"
Previous?uid?=?%d\n
"
,?syscall(__NR_getuid));
????syscall(__NR_changeuid);
????printf(
"
Current?uid?=?%d\n
"
,?syscall(__NR_getuid));
????
return
?
0
;
}
使用gcc -o test test.c編譯
5. 運行./test,即可看到類似的成功信息:
Previous uid = 1002
Current uid = 0
6. 卸載模塊rmmod addcall,此時再次運行./test就會失敗
新用戶注冊
刷新評論列表
只有注冊用戶
登錄
后才能發表評論。
網站導航:
博客園
IT新聞
Chat2DB
C++博客
博問
管理
相關文章:
PieTTY中按Ctrl+S導致掛起的問題解決
Ubuntu 8.10 瀏覽網頁不穩定的解決方法
上來bs下ctags 5.4
vim中.cpp的配置和c.vim中指定的一樣
讀核筆記(6) - 虛擬存儲
Patching CVE-2008-0600, Local Root Exploit
[zz]LKM Rootkits on Linux x86 v2.6
信號量使用例程
讀核筆記(5) - 共享內存
Hacking the Kernel - 修改系統調用表
Powered by:
BlogJava
Copyright © ZelluX
日歷
<
2008年2月
>
日
一
二
三
四
五
六
27
28
29
30
31
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
1
2
3
4
5
6
7
8
常用鏈接
我的隨筆
我的評論
我的參與
最新評論
留言簿
(21)
給我留言
查看公開留言
查看私人留言
隨筆分類
(390)
Algorithm(57)
C/C++(39)
Courses(15)
Economics(2)
Laboratory(25)
Linux(47)
Mathematics(12)
OOP(89)
Scripting(19)
Security(3)
System(28)
Web(10)
書、電影、音樂(11)
其他(14)
點滴(19)
隨筆檔案
(389)
2009年12月 (1)
2009年4月 (1)
2009年3月 (4)
2009年2月 (2)
2009年1月 (2)
2008年11月 (1)
2008年10月 (9)
2008年9月 (1)
2008年7月 (2)
2008年6月 (4)
2008年5月 (12)
2008年4月 (18)
2008年3月 (7)
2008年2月 (33)
2008年1月 (19)
2007年12月 (8)
2007年11月 (14)
2007年10月 (24)
2007年9月 (18)
2007年8月 (28)
2007年7月 (33)
2007年6月 (26)
2007年5月 (30)
2007年4月 (92)
文章檔案
(7)
2007年7月 (2)
2007年5月 (4)
2007年4月 (1)
相冊
Illustration
15ers
jonathan的BLOG
Right There...
宙斯魚的小魚缸
小鮑的世界
簡單幸福
逃遁的Persephone
阿繆爾的錦瑟
風之語的BLOG
友情鏈接
(04CS) ljh
(05CS) 小菜虎的窩
(06CS) FreePeter
(06SS) Overboming
(06SS) Sherry
(06SS) 十指飛揚
(06SS) 銀色子彈
luohandsome的專欄
平淡是真——啃啃不老閣
收藏夾
[ADN.cn]Library
Debian學習筆記
Dictionary of Algorithms and Data Structures
Gollum
Lex&Yacc
Max On Java
techInterview Discussion
核桃仁
程序員面試題精選100題
鐵手
搜索
積分與排名
積分 - 336599
排名 - 167
最新隨筆
1.?新博客
2.?慎用xen的make world...
3.?內存模型相關的資料
4.?安全方面的經典論文:A Logic of Authentication
5.?Lock-Free 算法的幾個鏈接
6.?10 Papers Every Programmer Should Read
7.?PieTTY中按Ctrl+S導致掛起的問題解決
8.?Finding and Reproducing Heisenbugs in Concurrent Programs
9.?Ubuntu 8.10 瀏覽網頁不穩定的解決方法
10.?[zz]蘇南經濟模式興衰親歷記
最新評論
1.?re: C/C++中的序列點
說的太好了,解決我長久的困擾!
--除美滅日平韓
2.?re: 原來GCC是支持尾遞歸的遞推優化的
評論內容較長,點擊標題查看
--darkhorse
3.?re: Arch下配置samba服務
我按照你的方法,安裝了SAMBA,但是 /etc/rc.d/samba start 啟動不了samba服務。提示不存在這個文件或目錄的,怎么辦?
--zhangbear
4.?re: [zz]LKM Rootkits on Linux x86 v2.6
rhel 5 系列 安裝了 Xen 內核, 怎么rootkit xen kernel 呢?
--消息
5.?re: CLRS 習題 16.2-6 部分背包問題的O(n)算法
@ynnej
T(n)=2T(n/2)+O(n) 才是 nlgn 注意其中有一個2
--荒廢庭院
閱讀排行榜
1.?[zz]vim+ctags+taglist插件安裝使用(18313)
2.?memcpy函數代碼分析(9385)
3.?[zz]Zotero與Endnote的互相導入(8777)
4.?BNF 文法 (1) - 語法樹 | 二義性的解決(8261)
5.?Java泛型中的? super T語法(6560)
評論排行榜
1.?C# 學習筆記 (1)(14)
2.?Windows - QQ、網頁Flash視頻無聲音的解決方法(14)
3.?URAL 1011(10)
4.?《編程之美》上的一道題目的討論(8)
5.?Singleton模式與雙檢測鎖定(DCL)(7)
主站蜘蛛池模板:
日韩毛片在线免费观看
|
亚洲av中文无码乱人伦在线r▽
|
免费观看的毛片手机视频
|
亚洲精品视频在线观看免费
|
久久永久免费人妻精品
|
亚洲Av综合色区无码专区桃色
|
a级成人免费毛片完整版
|
久久久久久a亚洲欧洲aⅴ
|
一个人免费日韩不卡视频
|
久久综合亚洲鲁鲁五月天
|
222www在线观看免费
|
亚洲男女一区二区三区
|
国拍在线精品视频免费观看
|
亚洲无吗在线视频
|
精品剧情v国产在免费线观看
|
亚洲av无码有乱码在线观看
|
国产免费直播在线观看视频
|
又硬又粗又长又爽免费看
|
免费国产黄线在线观看
|
亚洲国产一区二区三区在线观看
|
免费无码AV片在线观看软件
|
国产精品久久亚洲一区二区
|
中文字幕亚洲第一
|
日韩电影免费在线观看
|
亚洲六月丁香六月婷婷色伊人
|
成人免费毛片观看
|
一级成人a做片免费
|
亚洲AV乱码久久精品蜜桃
|
国产成人午夜精品免费视频
|
色偷偷噜噜噜亚洲男人
|
亚洲综合激情另类专区
|
99re免费视频
|
精品久久久久亚洲
|
亚洲一区二区电影
|
在线jyzzjyzz免费视频
|
www.xxxx.com日本免费
|
亚洲国产成人精品青青草原
|
免费一看一级毛片人
|
十九岁在线观看免费完整版电影
|
一本色道久久综合亚洲精品蜜桃冫
|
三年片在线观看免费观看大全动漫
|