08 2013 档案
摘要:#include const char shell[]="\x0f\x01\xf8\xe8\5\0\0\0\x0f\x01\xf8\x48\xcf";int main(){ }$ gcc -o disassembly disassembly.c$objdump -D disassembly | less$ /shell08048410 : 8048410: 0f 01 f8 swapgs 8048413: e8 05 00 00 00 call 804841d 8048418: 0f 01 f8 ...
阅读全文
摘要:// ==UserScript==// @name plugin-dodo_chatroom// @namespace // @description Have fun in dodo chatroom// @author Jeremy huang// @homepage // @include *doo.idv.tw/*// ==/UserScript==var $;// Add jQuery(function(){ if (typeof unsafeWindow.jQuery == 'undefined') { ...
阅读全文
摘要:一般来说,一个C的工程中一定要做一些这方面的工作,因为你会涉及到跨平台,不同的平台会有不同的字长,所以利用预编译和typedef可以让你最有效的维护你的代码。为了用户的方便,C99标准的C语言硬件为我们定义了这些类型,我们放心使用就可以了。按照posix标准,一般整形对应的*_t类型为:1字节 uint8_t2字节 uint16_t4字节 uint32_t8字节 uint64_t附:C99标准中inttypes.h的内容00001 /*00002inttypes.h0000300004Contributors:00005Createdby Marek Michalkiewicz 000...
阅读全文
摘要:phpinfo ()CTRL+ F–enable-pcntl今天居然可以用到.哈 狗屎运. 来自t00ls
阅读全文
摘要:selinux与kernel 0daykernel NULL pointer的利用需要把shellcode映射到内存0处, 大家在测试exp的时候,总能发现一个规律, 开着selinux就能溢出成功, 关闭就不能溢出成功了。 看了下内核源码,终于搞清楚了: mmap在做匿名映射的时候,会经过LSM层来做安全验证, LSM初始化的时候,会将selinux作为它的第一验证模块, capablity作为它的第2验证模块。这2个模块在做mmap映射的时候,都指向了dummy_file_mmap_addr这个函数:usr/src/debug/kernel-2.6.18/linux-2.6.18.i686
阅读全文
摘要:Nelson Elhage最近发现了一个内核设计上的漏洞, 通过利用这个漏洞可以将一些以前只能dos的漏洞变成可以权限提升的漏洞。当fork一个进程在的时候, copy_process执行如下操作:static struct task_struct *copy_process(unsigned long clone_flags,unsigned long stack_start,struct pt_regs *regs,unsigned long stack_size,int __user *child_tidptr,struct pid *pid,int trace){p->set_c
阅读全文
摘要:在寫C的過程中,我們會很自然地以為,我連續宣告一堆大小不一的char array。經過Complier之後這些char array未必是連續擺放。至於為什麼就要談到我們今天的主角了alignment以x86-32bit為例,他喜歡一次讀取 4 Bytes (i.e. 32 bits),記憶中可以想成一格一格為 4 Bytes.其indes從 0 ~ 2^32 - 1我們可以用 printf(sizeof(void *)); 來得知。machine在讀取指令時以多少Bytes為單位。printf(sizeof(unsigned long));也行。好讓每次讀取的位置皆為4的倍數,e.g. 0,
阅读全文
摘要:CLONE_NEWUSER trickery: CVE-2013-1858Recent kernels (3.8+ something) introduced a feature calleduser-namespaces (user-ns,CLONE_NEWUSERflag)in which you can have your own UID 0.Think of it as a container solution, so you canset up compartments on a host. A nice thing,but it has some security implicat
阅读全文
摘要:__user表示是一个用户空间的指针,所以kernel不可能直接使用。#ifdef __CHECKER__# define __user __attribute__((noderef, address_space(1)))# define __kernel /* default address space */#else# define __user# define __kernel#endifnoderef告诉编译器,不应该解除该指针的引用,因为在当前地址空间中它是没有意义的。这里的CHECKER表示是否使用了Sprase(就是一种静态分析工具,用来分析内核源码中的BUG)。是不是想研究一下
阅读全文
摘要:Table of Contents,Show Frames,No FramesChapter 15Linux Data StructuresThis appendix lists the major data structures that Linux uses and which are described in this book. They have been edited slightly to fit the paper.block_dev_structblock_dev_structdata structures are used to register block devices
阅读全文
摘要:author :deep_pro目前网上的这个exploit(http://www.milw0rm.com/exploits/8369)的分析是有些问题的(http://forum.eviloctal.com/viewthread.php?tid=34942&pid=154634&page=1&extra=page%3D1#pid154634)感谢乱雪给我提供了思路,解释了疑问有问题的内核代码( http://lxr.linux.no/linux+v2.6.29/kernel/exit.c#L951)if (tsk->exit_signal != SIGCHLD
阅读全文
摘要:udp_sendmsg空指针漏洞分析 by wzt漏洞描述:由于Linux ipv4协议栈中udp_sendmsg()函数设计上存在缺陷, 导致struct rtable *rt以空指针形式传递给ip_append_data(), 从而引发kernel oops,攻击者可以利用此漏洞提升进程权限。漏洞影响2.6.19以下的版本。漏洞成因:>> linux+v2.6.18/net/ipv4/udp.cint udp_sendmsg(struct kiocb *iocb, struct sock *sk, struct msghdr *msg,size_t len){...// rt被
阅读全文
摘要:函數:void *mmap(void *start,size_t length,int prot,int flags,int fd,off_t offsize); 参數start:指向函數:void *mmap(void *start,size_t length,int prot,int flags,int fd,off_t offsize);参數start:指向欲映射的內存起始地址,通常設为 NULL,代表讓系統自動選定地址,映射成功後返回該地址。参數length:代表將文件中多大的部分映射到內存。参數prot:映射區域的保護方式。可以为以下幾種方式的組合:PROT_EXEC 映射區域可被執
阅读全文
摘要:Exploit The Linux Kernel NULL Pointer Dereference Author: wztHome: http://hi.baidu.com/wzt85date: 2010/06/13Version: 0.3目录:1、引言2、NULL Pointer是如何引发OOPS的3、如何Exploit4、攻击实验5、NULL Pointer与Selinux的关系6、如何防御NULL Pointer漏洞7、附录1、引言在最近一系列的Linux kernel本地溢出漏洞中, 大部分是由于内核引用一个空指针而引发的, 看NULL Pointer...
阅读全文
摘要:Exploit Linux Kernel Slub OverflowBy wzt一、前言 最近几年关于kernel exploit的研究比较热门,常见的内核提权漏洞大致可以分为几类:空指针引用,内核堆栈溢出,内核slab溢出,内核任意地址可写等等。空指针引用漏洞比较容易exploit,典型的例子如sock_sendpage,udp_sendmsg。但是新内核的安全模块已经不在允许userspace的code映射低内存了,所以NULL pointer dereference曾经一度只能dos,不能提权。但是CVE-2010-4258这个内核任意地址可写漏洞,可以将null pointer ...
阅读全文
摘要:/****************************************************************************** * .:: Impel Down ::. * * Linux 2.6.x fs/pipe.c local kernel root(kit?) exploit (x86) * by teach & xipe * Greetz goes to all our mates from #nibbles, #oldscho...
阅读全文
摘要:之前看了《新爆内核高危漏洞sock_sendpage的利用分析的讨论》这篇帖子,在九贱兄和诸位CUer的指引下,大致弄清了整个漏洞的始末。现与大家分享(引用自我的空间)。有什么不足之处还望多多指教~内核的BUG这个BUG首先得从sendfile系统调用说起。考虑将一个本地文件通过socket发送出去的问题。我们通常的做法是:打开文件fd和一个socket,然后循环地从文件fd中read数据,并将读取 的数据send到socket中。这样,每次读写我们都需要两次系统调用,并且数据会被从内核拷贝到用户空间(read),再从用户空间拷贝到内核 (send)。而sendfile就将整个发送过程封装在一
阅读全文
摘要:linux中是不可以依附别的进程的,更不可能创建远程线程,然而一种不太正规的方式却可以做到这一点,这就是ptrace接口,ptrace可以依附任何用户进程,用特殊的参数甚至可以更改任何进程的寄存器和内存映射,这个功力和创建远程线程不相上下,甚至比其更加灵活,如果理解了elf映像在内存的布局便可以通过ptrace修改被调试进程的任意内存。然而有一个限制就是ptrace接口只能调试属于自己用户的进程,也就是说它不能调试别的用户的进程,一种显而易见的限制就是普通用户的ptrace不能调试root进程,但是2.6.29内核有一个明显的漏洞使得普通用户可以提升本地权限。简单来讲就是在调用exec的时候需
阅读全文
摘要:在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的記憶體空間,可是因為我們目前是在核心程式碼使用這些系統函式,所以說我
阅读全文
摘要: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
阅读全文
摘要:其中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)
阅读全文
摘要:通常在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)
阅读全文
摘要:/* * 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
阅读全文
摘要:不知各位對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
阅读全文
摘要:core dump的除錯Basic Perl等語言處理的可以說是User的資料, C可以說在那邊把資料在記憶體移來移去, 組語可說把資料在暫存器搬來搬去, 越低階的處理表示握有的資源越少所以C處理不好的話很容易記憶體跨出範圍, 或者系統毀了(panic), 這時都會產生一個core dump, 就是毀掉的瞬間記憶體內部的內容會搬到一個檔案core, core file 包含了程式的read/write的memory部份, 也就是程式躺在記憶體時的狀態, executable只是一個可執行檔也就是程式躺在硬碟時。 gdb可以根據這個檔來除錯,只是這時的target是core 或exec 不是re
阅读全文
摘要:/*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
阅读全文
摘要:在學校老師一定都會教void是無型態的返回值例如void swap(int *a, int *b){ int temp = *a; *a = *b; *b = temp;}這樣的函數結束之後不必返回任何數值就在函數名稱前面加上voidvoid 既然是無型態那void *就是無型態的指標了意思是可指向任何類型的指標有點難想像因為我們習慣把void當成只有在無返回值時要用的但是也可以當作無型態的指標也就是可以指向任何型態例如:void *a;int *b;*b = 10;a = b;printf("a: %d \n", *(int *)a);a = b 的時候 a 還是一個無型
阅读全文
摘要:在 x86 上,regparm 属性会传递一个数值给编译器,这个数值会告诉编译器要用多少个寄存器来传递函数参数(EAX, EDX 或 ECX,最多 3 个寄存器),通常情况下函数是用堆栈来传递参数的。如果参数比较多,那么其余的参数仍然通过堆栈来传递。比如我们指定 __attribute__((regparm(0))) ,则表示不用寄存器来传递参数,所有参数都通过堆栈来传递;如果我们指定 __attribute__((regparm(3))),那么就是说会用 3 个寄存器来传递参数(EAX, EDX, ECX),其余的参数通过堆栈来传递。下面先看不用寄存器来传递参数的情况: 1 #include
阅读全文

浙公网安备 33010602011771号