上一页 1 ··· 9 10 11 12 13 14 15 16 17 ··· 21 下一页
摘要: 之前看了《新爆内核高危漏洞sock_sendpage的利用分析的讨论》这篇帖子,在九贱兄和诸位CUer的指引下,大致弄清了整个漏洞的始末。现与大家分享(引用自我的空间)。有什么不足之处还望多多指教~内核的BUG这个BUG首先得从sendfile系统调用说起。考虑将一个本地文件通过socket发送出去的问题。我们通常的做法是:打开文件fd和一个socket,然后循环地从文件fd中read数据,并将读取 的数据send到socket中。这样,每次读写我们都需要两次系统调用,并且数据会被从内核拷贝到用户空间(read),再从用户空间拷贝到内核 (send)。而sendfile就将整个发送过程封装在一 阅读全文
posted @ 2013-08-17 16:55 jeremyatchina 阅读(845) 评论(0) 推荐(0) 编辑
摘要: linux中是不可以依附别的进程的,更不可能创建远程线程,然而一种不太正规的方式却可以做到这一点,这就是ptrace接口,ptrace可以依附任何用户进程,用特殊的参数甚至可以更改任何进程的寄存器和内存映射,这个功力和创建远程线程不相上下,甚至比其更加灵活,如果理解了elf映像在内存的布局便可以通过ptrace修改被调试进程的任意内存。然而有一个限制就是ptrace接口只能调试属于自己用户的进程,也就是说它不能调试别的用户的进程,一种显而易见的限制就是普通用户的ptrace不能调试root进程,但是2.6.29内核有一个明显的漏洞使得普通用户可以提升本地权限。简单来讲就是在调用exec的时候需 阅读全文
posted @ 2013-08-17 15:31 jeremyatchina 阅读(1617) 评论(0) 推荐(0) 编辑
摘要: 在Kernel 中,照理說能存取至 0 ~ 4GB。但是實作層面卻是只能讓我們使用到3GB ~ 4GB這會導致我們無法使用open(),write()這些在user space下的function。而這樣的限制,實作在current->addr_limit 中在Kernel中若真的想要能存取 0 ~ 4GB ,就要利用set_fs()與get_fs()來達成。因為有這樣的限制存在,所以當我們在Linux撰寫程式碼時,如果也叫用了這些系統呼叫的函式,由於這些函式(像是open(),write())被限定只能存取0—3GB的記憶體空間,可是因為我們目前是在核心程式碼使用這些系統函式,所以說我 阅读全文
posted @ 2013-08-17 13:03 jeremyatchina 阅读(5452) 评论(0) 推荐(0) 编辑
摘要: User namespaces – available toplay!Posted onMay 10, 2012bys3hhOver the past few months, Eric Biederman has been working on completing the user namespace. Briefly, unprivileged users can create a user namespace, where he can pretend to be root and start new namespaces (i.e. network and pid) which he 阅读全文
posted @ 2013-08-15 21:04 jeremyatchina 阅读(251) 评论(0) 推荐(0) 编辑
摘要: 其中setresuid()具有最清晰的语法:setresuid()被执行的条件有:①当前进程的euid是root②三个参数,每一个等于原来某个id中的一个如果满足以上条件的任意一个,setresuid()都可以正常调用,并执行,将进程的ID设置成对应的ID。例子:如果ruid=100,euid=0,suid=300则setresuid(200,300,100)可以执行,因为原来的euid=0.如果ruid=100,euid=300,suid=200则setresuid(200,300,100)也可以执行,因为这三个新的id都是原来id中的某一个。但是setresuid(100,200,400) 阅读全文
posted @ 2013-08-15 18:51 jeremyatchina 阅读(857) 评论(1) 推荐(0) 编辑
摘要: 通常在PC上寫程式時,很少會去管struct會佔掉多少記憶體。當要使用到時,也不會想去用手算到底佔掉多少,大多是直接使用sizeof來做計算。然而sizeof計算出來的值往往不會如我們想的一樣。因為compiler為了效能考量,會自動地為我們做最佳化,也就是資料對齊。為了這個目的,compiler會為struct多準備一些記憶體。我們可以看以下的code:struct ABC {int index;char name[6];int score;};struct DEF{int att;char name[3];};int main(void){printf("sizeof(ABC) 阅读全文
posted @ 2013-08-15 09:14 jeremyatchina 阅读(822) 评论(0) 推荐(0) 编辑
摘要: /* * quick'n'dirty poc for CVE-2013-1763 SOCK_DIAG bug in kernel 3.3-3.8* bug found by Spender* poc by SynQ* * hard-coded for 3.5.0-17-generic #28-Ubuntu SMP Tue Oct 9 19:32:08 UTC 2012 i686 i686 i686 GNU/Linux* using nl_table->hash.rehash_time, index 81* * Fedora 18 support added* * 2/20 阅读全文
posted @ 2013-08-14 09:21 jeremyatchina 阅读(412) 评论(0) 推荐(0) 编辑
摘要: 不知各位對volatile(揮發性的)這個字陌不陌生? 我相信大家在一些程式或多或少都看過這個字眼, 但是究竟要在何種場合用它呢?.當然一定是有需要, C/C++才會有這個保留字, 否則只是增加programmer的困擾而已.有2兩個場合(I/O & multithread program), 供各位參考!.請大家check自己的程式中(尤其是第2個場合), 若有的話請記得加上volatile1. I/O, 假設有一程式片斷如下 U8 *pPort; U8 i, j, k; pPort = (U8 *)0x800000; i = *pPort; j = *pPort; k = *pPo 阅读全文
posted @ 2013-08-12 23:02 jeremyatchina 阅读(298) 评论(0) 推荐(0) 编辑
摘要: core dump的除錯Basic Perl等語言處理的可以說是User的資料, C可以說在那邊把資料在記憶體移來移去, 組語可說把資料在暫存器搬來搬去, 越低階的處理表示握有的資源越少所以C處理不好的話很容易記憶體跨出範圍, 或者系統毀了(panic), 這時都會產生一個core dump, 就是毀掉的瞬間記憶體內部的內容會搬到一個檔案core, core file 包含了程式的read/write的memory部份, 也就是程式躺在記憶體時的狀態, executable只是一個可執行檔也就是程式躺在硬碟時。 gdb可以根據這個檔來除錯,只是這時的target是core 或exec 不是re 阅读全文
posted @ 2013-08-12 12:41 jeremyatchina 阅读(10957) 评论(0) 推荐(0) 编辑
摘要: /*Title: Linux/x86-64 - setuid(0) & chmod ("/etc/passwd", 0777) & exit(0) - 63 byesDate: 2010-06-17Tested: Archlinux x86_64 k2.6.33Author: Jonathan SalwanWeb: http://shell-storm.org | http://twitter.com/shell_storm! Dtabase of shellcodes http://www.shell-storm.org/shellcode/ 400078 阅读全文
posted @ 2013-08-12 01:11 jeremyatchina 阅读(558) 评论(1) 推荐(0) 编辑
上一页 1 ··· 9 10 11 12 13 14 15 16 17 ··· 21 下一页