Snowdream
posts - 403, comments - 310, trackbacks - 0, articles - 7
BlogJava
::
首頁(yè)
::
新隨筆
::
聯(lián)系
::
聚合
::
管理
Hacking the Kernel - 修改系統(tǒng)調(diào)用表
Posted on 2008-02-19 14:55
ZelluX
閱讀(754)
評(píng)論(0)
編輯
收藏
所屬分類:
Linux
、
System
昨天硬是沒(méi)找到正確的sys_call_table的地址,原來(lái)我之前在虛擬機(jī)上裝的ArchLinux是64位的。。
今天在真機(jī)上成功地修改了系統(tǒng)調(diào)用表。
測(cè)試環(huán)境:ArchLinux 2.6.24
1. 2.4.20以后的內(nèi)核出于安全考慮,沒(méi)有導(dǎo)出sys_call_table符號(hào),所以要先通過(guò)System.map找到sys_call_table的地址
$ cat /boot/System.map26 | grep sys_call_table
c0375680 R sys_call_table
另外也可以用nm工具獲得vmlinux中的所有符號(hào)
$ nm /usr/src/linux-2.6.24-ARCH/vmlinux | grep sys_call_table
結(jié)果一樣
2. 以添加一個(gè)把uid改成root(0)為例,寫(xiě)一個(gè)內(nèi)核模塊:
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);
對(duì)應(yīng)的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. 測(cè)試程序
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. 運(yùn)行./test,即可看到類似的成功信息:
Previous uid = 1002
Current uid = 0
6. 卸載模塊rmmod addcall,此時(shí)再次運(yùn)行./test就會(huì)失敗
新用戶注冊(cè)
刷新評(píng)論列表
只有注冊(cè)用戶
登錄
后才能發(fā)表評(píng)論。
網(wǎng)站導(dǎo)航:
博客園
IT新聞
Chat2DB
C++博客
博問(wèn)
管理
相關(guān)文章:
PieTTY中按Ctrl+S導(dǎo)致掛起的問(wèn)題解決
Ubuntu 8.10 瀏覽網(wǎng)頁(yè)不穩(wěn)定的解決方法
上來(lái)bs下ctags 5.4
vim中.cpp的配置和c.vim中指定的一樣
讀核筆記(6) - 虛擬存儲(chǔ)
Patching CVE-2008-0600, Local Root Exploit
[zz]LKM Rootkits on Linux x86 v2.6
信號(hào)量使用例程
讀核筆記(5) - 共享內(nèi)存
Hacking the Kernel - 修改系統(tǒng)調(diào)用表
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
常用鏈接
我的隨筆
我的評(píng)論
我的參與
最新評(píng)論
留言簿
(21)
給我留言
查看公開(kāi)留言
查看私人留言
隨筆分類
(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)
書(shū)、電影、音樂(lè)(11)
其他(14)
點(diǎn)滴(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)
相冊(cè)
Illustration
15ers
jonathan的BLOG
Right There...
宙斯魚(yú)的小魚(yú)缸
小鮑的世界
簡(jiǎn)單幸福
逃遁的Persephone
阿繆爾的錦瑟
風(fēng)之語(yǔ)的BLOG
友情鏈接
(04CS) ljh
(05CS) 小菜虎的窩
(06CS) FreePeter
(06SS) Overboming
(06SS) Sherry
(06SS) 十指飛揚(yáng)
(06SS) 銀色子彈
luohandsome的專欄
平淡是真——啃啃不老閣
收藏夾
[ADN.cn]Library
Debian學(xué)習(xí)筆記
Dictionary of Algorithms and Data Structures
Gollum
Lex&Yacc
Max On Java
techInterview Discussion
核桃仁
程序員面試題精選100題
鐵手
搜索
積分與排名
積分 - 336589
排名 - 167
最新隨筆
1.?新博客
2.?慎用xen的make world...
3.?內(nèi)存模型相關(guān)的資料
4.?安全方面的經(jīng)典論文:A Logic of Authentication
5.?Lock-Free 算法的幾個(gè)鏈接
6.?10 Papers Every Programmer Should Read
7.?PieTTY中按Ctrl+S導(dǎo)致掛起的問(wèn)題解決
8.?Finding and Reproducing Heisenbugs in Concurrent Programs
9.?Ubuntu 8.10 瀏覽網(wǎng)頁(yè)不穩(wěn)定的解決方法
10.?[zz]蘇南經(jīng)濟(jì)模式興衰親歷記
最新評(píng)論
1.?re: C/C++中的序列點(diǎn)
說(shuō)的太好了,解決我長(zhǎng)久的困擾!
--除美滅日平韓
2.?re: 原來(lái)GCC是支持尾遞歸的遞推優(yōu)化的
評(píng)論內(nèi)容較長(zhǎng),點(diǎn)擊標(biāo)題查看
--darkhorse
3.?re: Arch下配置samba服務(wù)
我按照你的方法,安裝了SAMBA,但是 /etc/rc.d/samba start 啟動(dòng)不了samba服務(wù)。提示不存在這個(gè)文件或目錄的,怎么辦?
--zhangbear
4.?re: [zz]LKM Rootkits on Linux x86 v2.6
rhel 5 系列 安裝了 Xen 內(nèi)核, 怎么rootkit xen kernel 呢?
--消息
5.?re: CLRS 習(xí)題 16.2-6 部分背包問(wèn)題的O(n)算法
@ynnej
T(n)=2T(n/2)+O(n) 才是 nlgn 注意其中有一個(gè)2
--荒廢庭院
閱讀排行榜
1.?[zz]vim+ctags+taglist插件安裝使用(18313)
2.?memcpy函數(shù)代碼分析(9385)
3.?[zz]Zotero與Endnote的互相導(dǎo)入(8777)
4.?BNF 文法 (1) - 語(yǔ)法樹(shù) | 二義性的解決(8261)
5.?Java泛型中的? super T語(yǔ)法(6560)
評(píng)論排行榜
1.?C# 學(xué)習(xí)筆記 (1)(14)
2.?Windows - QQ、網(wǎng)頁(yè)Flash視頻無(wú)聲音的解決方法(14)
3.?URAL 1011(10)
4.?《編程之美》上的一道題目的討論(8)
5.?Singleton模式與雙檢測(cè)鎖定(DCL)(7)
主站蜘蛛池模板:
国产精品成人69XXX免费视频
|
亚洲a级成人片在线观看
|
相泽南亚洲一区二区在线播放
|
日韩免费一区二区三区在线
|
国内精自视频品线六区免费
|
亚洲∧v久久久无码精品
|
中国一级特黄高清免费的大片中国一级黄色片
|
无遮免费网站在线入口
|
亚洲国产美女视频
|
日韩免费精品视频
|
亚洲中文字幕无码av永久
|
四虎影视免费在线
|
亚洲熟伦熟女专区hd高清
|
日本特黄特色免费大片
|
亚洲av无码专区在线电影
|
夫妻免费无码V看片
|
亚洲成av人在线观看网站
|
日本a级片免费看
|
免费无码一区二区
|
亚洲精品一品区二品区三品区
|
黄色片免费在线观看
|
亚洲欧洲日本精品
|
免费视频中文字幕
|
一个人看的www视频免费在线观看
|
亚洲精品亚洲人成在线观看
|
亚洲免费精彩视频在线观看
|
亚洲成AV人片久久
|
成人免费无码大片A毛片抽搐
|
男男gay做爽爽的视频免费
|
国产成人高清亚洲
|
好男人资源在线WWW免费
|
亚洲精品成人无码中文毛片不卡
|
国产午夜精品久久久久免费视
|
亚洲中文字幕无码av在线
|
免费国产一级特黄久久
|
99久久成人国产精品免费
|
亚洲av乱码一区二区三区
|
亚洲A∨午夜成人片精品网站
|
国产白丝无码免费视频
|
亚洲av中文无码字幕色不卡
|
亚洲乱码一区二区三区在线观看
|