Exploit-Exercises Nebula

2017-10-07  本文已影响0人  苏州暮雨

writeup链接: https://pan.baidu.com/s/1mip9WaG 密码: ypza


获取权限的思路:

利用密码备份文件,暴力破解

竞争

利用程序中调用的  系统调用函数如:system,popen,cmd等

溢出

资源未释放漏洞


tips:

几个描述符:0(标准输入) 1(标准输出) 2 (错误输出)3 (文件描述符)

通过向其他用户运行的程序文件中注入或添加自己的程序文件,可以实现提权操作

ll 查看文件具体权限相关

tmp 文件夹读写权限门槛最低(所有用户都可以可写可读),可以用于提权辅助

linux的shell环境下   ${变量名,,}  即可将变量转换成小写

pickle的dump之后的文件操作码: c S p0等等   pickle.loads("""cos\nsystem\n(S'ps'\ntR.""")

Linux 中的进程有父子关系,当子进程销毁时,父进程需要回收它。如果在子进程执行完毕之前,父进程因为种种原因被销毁了,那么子进程就变成了孤儿进程,收养它的是 init 进程,它的 pid 是 1。

chmod 更改权限


gdb 修改寄存器的值: set $eax=XXX


getopt相关

getopt只是一个简单的解析命令可选项的函数,只能进行简单的格式命令解析

int getopt(int argc,char* const argv[],const char* optstring);

如getopt返回-1,表示argv[]中的所有选项被解析出

optstring指定选项合法的选项,一个字符代表一个选项,在字符后面加一个':'表示该选项带一个参数


/etc/passwd相关

cat /etc/passwd 查看权限UID

传统UNIX的密码存储方式是直接在/etc/passwd(所有合法用户都可访问)里,后期版本存储在/etc/shadow(只有root可读的)

在/etc/shadow文件中的记录行内容用‘:’隔开,为:【登录名:加密口令:最后一次修改时间:最小时间间隔:最大时间间隔:警告时间:不活动时间:失效时间:标志】

/etc/passwd文件存放的是用户的信息,由6个分号组成的7个信息,解释如下:

【用户名:密码(已经加密):UID(用户标识):GID(组标识):用户信息:主目录:Shell(对登录命令进行解析的工具)】

john破解密码

(Ubuntu下安装:sudo apt-get install john)

john -single shadow.txt(提取的某一行用户完整信息)

john -wordfile:password.lst -rules shadow.txt 使用字典

john -i:all shadow.txt(全部密钥空间配对)


linux环境变量

查看PATH:echo $PATH

添加变量:export  PATH=/usr/local/mongodb/bin:$PATH 【只对当前shell(BASH)有效(临时的)】

                  /etc/profile文件中添加变量【对所有用户生效(永久的)】

                  在用户目录下的.bash_profile文件中增加变量【对单一用户生效(永久的)】

修改环境变量:例如USER=“XXXXX”即可


ssh相关

实现字符界面的远程登录管理,它默认使用22号端口

简单连接方式:ssh user@hostname,或者指定端口ssh -p 10022 user@hostname,-X可以添加图形化界面功能(即可以打开某些图形化界面程序)

可以在/etc/ssh/sshd_config进行编辑,修改ssh的配置

ssh-keygen -t dsa 创建一个密钥  (ssh-keygen -F IP 查看与之配对情况)

(ssh 验证时用的私钥公钥就放在home目录中的.ssh 目录里)

某些情况下, 比如主机地址更改或者不再使用某个密钥, 你就可能需要删除某个密钥

ssh-keygen -R IP 或者手动删除 ~.ssh 文件夹

windows平台下还有putty,xshell程序可以用于ssh,ftp,telnet等连接


tar 相关  

x(解压)  c(加压) t(打开压缩包)

-v 显示压缩文件

-z 以gzip方式压缩(一般格式为xx.tar.gz或xx. tgz)

-j  以bzip2方式压缩(一般格式为xx.tar.bz2)

-f :使用档名

设置压缩目录:-C dir(参数的作用在于改变工作目录) 如:tar -cvf file2.tar -C /home/usr2 file2


php的preg_replace相关

第一个参数后使用了/e,即启用/e 模式,那么 preg_replace 的第二个参数将会被作为代码执行。(/e 这个修饰符的意思 就是让 正则替换的 时候 替换规则 支持 php 代码)

在 php 变量引用中,如果双引号的字符串出现了“$变量名”或“${变量}”的形式,最终引用的是变量值。同样的思想,如果是函数,则引用的是函数的返回结果。

“\”主要用于转义,“/”主要用于描述模式。


linux下的find

find / -uid 扫描当前目录以及其子文件,查找符合UID值的文件(例如find / -uid 999 2>/dev/null)

-name  filename            #查找名为filename的文件

-user    username            #按文件属主来查找

-group groupname            #按组来查找


ln 链接指令使用

-s:进行软链结(symboliclink)  (软连接可以跨文件系统,可以对一个不存在的文件名进行连接)

不论是硬连结或软链结都不会将原本的档案复制一份,只会占用非常少量的磁盘空间

ln -s abc cde    #建立abc 的软连接

ln abc cde       #建立abc的硬连接

rm -rf XXX       #用于删除链接


nice — 调整程序运行的优先级

nice -n 19 表示改变文件的执行优先级,范围是-20~19,数字越低,优先级越高


access函数用于检测文件存在与读写权限,windows下在<io.h>导入,linux在<unistd.h>导入


fread()与fwrite()

size_t fread(void*ptr, size_t size, size_t nmemb,FILE* stream);

size_t fwrite(const void* ptr,size_t size,size_t nmemb,FILE* stream);

返回值:读或写的记录数,成功时返回的记录数等于nmemb,出错或读到文件末尾时返回的记录,数小于nmemb,也可能返回0。参数size指出一条记录的长度,而nmemb指出要读或写多少条记录.


strace 命令可跟踪一个程序的系统调用

Linux 里动态链接库的文件名是以“.so.版本”号结尾的,如:libc.so.6。当要调用动态链接库时,先用dlopen 函数打开它。之后动态链接库的入口函数首先得到执行,在 Win32 编程中,DLL 的入口函数是DllMain(好久没搞 Windows 编程了,如果没有记错的话),Linux 的动态链接库的入口是_init。_init 函数是在 gcc 命令编译时自动加入的,主要做一些全局变量之类的初始化操作。

通过__attribute ((constructor)),这是 gcc的一个特性,可以让程序在执行_init 函数之前,就先执行带有__attribute ((constructor))的函数

gcc -fpic -shared -nostdlib libc.c -o libc.so.6.                          (加上-nostdlib 就可以消除“version                                             GLIBC_2.1.3 not defined in file libc.so.6 with link timereference”提示了)

使用汇编自动写成一个system(在一些时候不能直接使用系统调用)

动态链接库的写法

上一篇 下一篇

猜你喜欢

热点阅读