目录
问题1:一直复现不成功的原因
问题2:关于linux32进入32位环境的问题
问题3:关于新建用户
问题4:为什么要对retlib程序设置set-UID位?
问题5:retlib程序的编译为什么要在root身份下进行?
问题6:为什么要用/bin/zsh?
问题7:三个程序实际运行的地址差异
不同程序环境变量及地址差异
问题1:一直复现不成功的原因
之前一直复现不成功,是因为我们这个实验要用到zsh来代替bash,但是自己的系统中没有zsh,所以需要安装这个shell,
问题2:关于linux32进入32位环境的问题
后面自己实验,加不加那个都可以的
问题3:关于新建用户
这个其实也可以不用,
问题4:为什么要对retlib程序设置set-UID位?
对于设定retlib.c为set-UID程序这一步骤:如果不进行这一步骤,则最后攻击成功之后,跳出来的是一个普通的shell,即$: ;但是设置了这一步之后,攻击成功之后,跳出来的是#: ;就是一个root身份的shell。(已验证)
问题5:retlib程序的编译为什么要在root身份下进行?
在普通用户下编译,在root身份下set-UID,可以看到retlib程序的用户依旧是ningan,所以最后攻击之后得到的shell就是一个普通的shell。
正确的做法是在root下编译,root下set-UID进行提权,这样程序的用户就变成了root,攻击成功之后就是#(root身份)
问题6:为什么要用/bin/zsh?
以前的retlib程序是chmod特权程序,以暂时root的身份执行了shellcode,而/bin/sh真实的指向是/bin/zsh,zsh不会收回特权,所以这个shell一直以root身份执行。
显示zsh: command not found: quit 说明这个时候的shell是/bin/zsh
问题7:三个程序实际运行的地址差异
首先要关闭地址随机化
地址差异
|
getenvaddr(10) |
retlib(6) |
expl(4) |
直接在shell中运行(通过getenv()获取) |
0xffffde28 +8=
|
0xffffde30 +4=
|
0xffffde34 |
在gdb中通过列出所有的环境变量进行寻找 |
0xffffde1e |
0xffffde22 |
0xffffde24 |
在gdb中运行程序(通过getenv()获取) |
0xffffde1e +4 |
0xffffde22 +2=
|
0xffffde24 |
从上面的表格可以看出:
(1)在shell中运行时,这几个程序地址的差异是它们程序名的二倍,这也是本次实验利用getenvaddr.c加上偏移获取retlib.c环境变量的方法,具体原因见这个博客的末尾:https://www.cnblogs.com/xidian-wws/p/10819073.html;
(2)在gdb中不管是上面两种方法中的哪一种,同一程序获取到的地址都是一样的,但是不同程序获取到的地址偏移是它们程序名的一倍,这个原因尚没有找出来,希望知道的朋友告知;
(3)retlib是漏洞程序,getenvaddr和expl是攻击程序,这两个攻击程序其实是可以合并的,我们的目的就是通过攻击程序猜漏洞程序环境变量的地址;
(4)假设不用getenvaddr,只用expl这个攻击程序:可以通过在shell中运行expl程序(程序中会利用getenv函数获取程序变量地址),然后加上expl和retlib程序名偏移量的二倍来猜测retlib程序环境变量的地址;也可以通过在expl的gdb中获取到环境变量的地址后,加上他们程序名偏移量的一倍来获取retlib程序环境变量的地址(已验证);
(5)假设是在gdb中获取到的地址,那么retlib只能在gdb中运行才能攻击成功,在shell中运行是不会攻击成功的,因为同一环境变量在shell中和在gdb中的地址是不一样的
(关于这个的解释,老师说因为gdb调试是静态的,shell运行是动态的,地址肯定不一样;
一个大神的解释是:gdb的调试环境会影响buf在内存中的位置,虽然关闭了ASLR,但这只能保证buf的地址在gdb的调试环境中不变,但当直接执行的时候,buf的位置会固定在别的地址上)
感觉大神的这个解释应该某一函数中的局部变量在gdb和直接运行时地不一样的原因,我现在也不是很懂
(6)对于(5),在gdb中攻击成功的话,获取的是普通用户的shell,不是root,现在我也不知道能不能获取到root以及如何获取到root
以程序expl.c为例说明这些地址的获取方法(加粗的是自己输入的部分,红色是一些重要内容)
[email protected]:~/anan/ret2libc$ gcc -m32 -g -o expl expl.c
[email protected]:~/anan/ret2libc$ ./expl BIN_SH
BIN_SH will be at 0xffffde34 [email protected]:~/anan/ret2libc$ gdb -q expl
Reading symbols from /home/ningan/anan/ret2libc/expl...done.
(gdb) list
1 #include <stdlib.h>
2 #include <stdio.h>
3 #include <string.h>
4
5 int main(int argc, char **argv, char *envp[])
6 {
7 char buf[40];
8 FILE *badfile;
9 char *ptr;
10 badfile = fopen(".//badfile", "w");
(gdb) b 7
Breakpoint 1 at 0x8048537: file expl.c, line 7.
(gdb) run
Starting program: /home/ningan/anan/ret2libc/expl
Breakpoint 1, main (argc=1, argv=0xffffd3c4, envp=0xffffd3cc) at expl.c:10
10 badfile = fopen(".//badfile", "w");
(gdb) p envp
$1 = (char **) 0xffffd3cc
(gdb) x/500sb *0xffffd3cc
0xffffd558: "SSH_AGENT_PID=2548"
0xffffd56b: "GPG_AGENT_INFO=/tmp/keyring-BIGWwf/gpg:0:1"
0xffffd596: "SHELL=/bin/bash"
0xffffd5a6: "TERM=xterm"
0xffffd5b1: "XDG_SESSION_COOKIE=7a7a2f572dbd5adb18bca55b00000007-1557276113.109114-1887978045"
0xffffd602: "WINDOWID=52428806"
0xffffd614: "GNOME_KEYRING_CONTROL=/tmp/keyring-BIGWwf"
0xffffd63e: "USER=ningan"
0xffffd64a: "LS_COLORS=rs=0:di=01;34:ln=01;36:mh=00:pi=40;33:so=01;35:do=01;35:bd=40;33;01:cd=40;33;01:or=40;31;01:su=37;41:sg=30;43:ca=30;41:tw=30;42:ow=34;42:st=37;44:ex=01;32:*.tar=01;31:*.tgz=01;31:*.arj=01;31"...
0xffffd712: ":*.taz=01;31:*.lzh=01;31:*.lzma=01;31:*.tlz=01;31:*.txz=01;31:*.zip=01;31:*.z=01;31:*.Z=01;31:*.dz=01;31:*.gz=01;31:*.lz=01;31:*.xz=01;31:*.bz2=01;31:*.bz=01;31:*.tbz=01;31:*.tbz2=01;31:*.tz=01;31:*.d"...
0xffffd7da: "eb=01;31:*.rpm=01;31:*.jar=01;31:*.war=01;31:*.ear=01;31:*.sar=01;31:*.rar=01;31:*.ace=01;31:*.zoo=01;31:*.cpio=01;31:*.7z=01;31:*.rz=01;31:*.jpg=01;35:*.jpeg=01;35:*.gif=01;35:*.bmp=01;35:*.pbm=01;35"...
0xffffd8a2: ":*.pgm=01;35:*.ppm=01;35:*.tga=01;35:*.xbm=01;35:*.xpm=01;35:*.tif=01;35:*.tiff=01;35:*.png=01;35:*.svg=01;35:*.svgz=01;35:*.mng=01;35:*.pcx=01;35:*.mov=01;35:*.mpg=01;35:*.mpeg=01;35:*.m2v=01;35:*.mk"...
0xffffd96a: "v=01;35:*.webm=01;35:*.ogm=01;35:*.mp4=01;35:*.m4v=01;35:*.mp4v=01;35:*.vob=01;35:*.qt=01;35:*.nuv=01;35:*.wmv=01;35:*.asf=01;35:*.rm=01;35:*.rmvb=01;35:*.flc=01;35:*.avi=01;35:*.fli=01;35:*.flv=01;35"...
0xffffda32: ":*.gl=01;35:*.dl=01;35:*.xcf=01;35:*.xwd=01;35:*.yuv=01;35:*.cgm=01;35:*.emf=01;35:*.axv=01;35:*.anx=01;35:*.ogv=01;35:*.ogx=01;35:*.aac=00;36:*.au=00;36:*.flac=00;36:*.mid=00;36:*.midi=00;36:*.mka=00"...
0xffffdafa: ";36:*.mp3=00;36:*.mpc=00;36:*.ogg=00;36:*.ra=00;36:*.wav=00;36:*.axa=00;36:*.oga=00;36:*.spx=00;36:*.xspf=00;36:"
0xffffdb6b: "XDG_SESSION_PATH=/org/freedesktop/DisplayManager/Session0"
0xffffdba5: "XDG_SEAT_PATH=/org/freedesktop/DisplayManager/Seat0"
0xffffdbd9: "SSH_AUTH_SOCK=/tmp/keyring-BIGWwf/ssh"
0xffffdbff: "DEFAULTS_PATH=/usr/share/gconf/ubuntu.default.path"
0xffffdc32: "SESSION_MANAGER=local/ubuntu:@/tmp/.ICE-unix/2514,unix/ubuntu:/tmp/.ICE-unix/2514"
0xffffdc84: "COLUMNS=133"
0xffffdc90: "XDG_CONFIG_DIRS=/etc/xdg/xdg-ubuntu:/etc/xdg"
0xffffdcbd: "DESKTOP_SESSION=ubuntu"
0xffffdcd4: "PATH=/usr/lib/lightdm/lightdm:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games"
0xffffdd3a: "_=/usr/bin/gdb"
0xffffdd49: "PWD=/home/ningan/anan/ret2libc"
0xffffdd68: "LANG=en_US.UTF-8"
0xffffdd79: "GNOME_KEYRING_PID=2504"
0xffffdd90: "MANDATORY_PATH=/usr/share/gconf/ubuntu.mandatory.path"
0xffffddc6: "COMPIZ_CONFIG_PROFILE=ubuntu"
---Type <return> to continue, or q <return> to quit---
0xffffdde3: "UBUNTU_MENUPROXY=libappmenu.so"
0xffffde02: "LINES=37"
0xffffde0b: "GDMSESSION=ubuntu" 0xffffde1d: "BIN_SH=/bin/sh"
0xffffde2c: "SHLVL=1"
0xffffde34: "HOME=/home/ningan"
0xffffde46: "GNOME_DESKTOP_SESSION_ID=this-is-deprecated"
0xffffde72: "LOGNAME=ningan"
0xffffde81: "DBUS_SESSION_BUS_ADDRESS=unix:abstract=/tmp/dbus-u20SORJaFU,guid=01d9b6a813e81470134d715500000054"
0xffffdee3: "XDG_DATA_DIRS=/usr/share/ubuntu:/usr/share/gnome:/usr/local/share/:/usr/share/"
0xffffdf32: "LESSOPEN=| /usr/bin/lesspipe %s"
0xffffdf52: "DISPLAY=:0.0"
0xffffdf5f: "XDG_CURRENT_DESKTOP=Unity"
0xffffdf79: "LESSCLOSE=/usr/bin/lesspipe %s %s"
0xffffdf9b: "XAUTHORITY=/home/ningan/.Xauthority"
0xffffdfbf: "COLORTERM=gnome-terminal"
0xffffdfd8: "/home/ningan/anan/ret2libc/expl"
(gdb) x/sb 0xffffde1d+7 0xffffde24: "/bin/sh"
(gdb) run BIN_SH
The program being debugged has been started already.
Start it from the beginning? (y or n) y
Starting program: /home/ningan/anan/ret2libc/expl BIN_SH
Breakpoint 1, main (argc=2, argv=0xffffd3c4, envp=0xffffd3d0) at expl.c:10
10 badfile = fopen(".//badfile", "w");
(gdb) p envp
$2 = (char **) 0xffffd3d0
(gdb) x/500sb *0xffffd3d0
0xffffd558: "SSH_AGENT_PID=2548"
0xffffd56b: "GPG_AGENT_INFO=/tmp/keyring-BIGWwf/gpg:0:1"
0xffffd596: "SHELL=/bin/bash"
0xffffd5a6: "TERM=xterm"
0xffffd5b1: "XDG_SESSION_COOKIE=7a7a2f572dbd5adb18bca55b00000007-1557276113.109114-1887978045"
0xffffd602: "WINDOWID=52428806"
0xffffd614: "GNOME_KEYRING_CONTROL=/tmp/keyring-BIGWwf"
0xffffd63e: "USER=ningan"
0xffffd64a: "LS_COLORS=rs=0:di=01;34:ln=01;36:mh=00:pi=40;33:so=01;35:do=01;35:bd=40;33;01:cd=40;33;01:or=40;31;01:su=37;41:sg=30;43:ca=30;41:tw=30;42:ow=34;42:st=37;44:ex=01;32:*.tar=01;31:*.tgz=01;31:*.arj=01;31"...
0xffffd712: ":*.taz=01;31:*.lzh=01;31:*.lzma=01;31:*.tlz=01;31:*.txz=01;31:*.zip=01;31:*.z=01;31:*.Z=01;31:*.dz=01;31:*.gz=01;31:*.lz=01;31:*.xz=01;31:*.bz2=01;31:*.bz=01;31:*.tbz=01;31:*.tbz2=01;31:*.tz=01;31:*.d"...
0xffffd7da: "eb=01;31:*.rpm=01;31:*.jar=01;31:*.war=01;31:*.ear=01;31:*.sar=01;31:*.rar=01;31:*.ace=01;31:*.zoo=01;31:*.cpio=01;31:*.7z=01;31:*.rz=01;31:*.jpg=01;35:*.jpeg=01;35:*.gif=01;35:*.bmp=01;35:*.pbm=01;35"...
0xffffd8a2: ":*.pgm=01;35:*.ppm=01;35:*.tga=01;35:*.xbm=01;35:*.xpm=01;35:*.tif=01;35:*.tiff=01;35:*.png=01;35:*.svg=01;35:*.svgz=01;35:*.mng=01;35:*.pcx=01;35:*.mov=01;35:*.mpg=01;35:*.mpeg=01;35:*.m2v=01;35:*.mk"...
0xffffd96a: "v=01;35:*.webm=01;35:*.ogm=01;35:*.mp4=01;35:*.m4v=01;35:*.mp4v=01;35:*.vob=01;35:*.qt=01;35:*.nuv=01;35:*.wmv=01;35:*.asf=01;35:*.rm=01;35:*.rmvb=01;35:*.flc=01;35:*.avi=01;35:*.fli=01;35:*.flv=01;35"...
0xffffda32: ":*.gl=01;35:*.dl=01;35:*.xcf=01;35:*.xwd=01;35:*.yuv=01;35:*.cgm=01;35:*.emf=01;35:*.axv=01;35:*.anx=01;35:*.ogv=01;35:*.ogx=01;35:*.aac=00;36:*.au=00;36:*.flac=00;36:*.mid=00;36:*.midi=00;36:*.mka=00"...
0xffffdafa: ";36:*.mp3=00;36:*.mpc=00;36:*.ogg=00;36:*.ra=00;36:*.wav=00;36:*.axa=00;36:*.oga=00;36:*.spx=00;36:*.xspf=00;36:"
0xffffdb6b: "XDG_SESSION_PATH=/org/freedesktop/DisplayManager/Session0"
0xffffdba5: "XDG_SEAT_PATH=/org/freedesktop/DisplayManager/Seat0"
0xffffdbd9: "SSH_AUTH_SOCK=/tmp/keyring-BIGWwf/ssh"
0xffffdbff: "DEFAULTS_PATH=/usr/share/gconf/ubuntu.default.path"
0xffffdc32: "SESSION_MANAGER=local/ubuntu:@/tmp/.ICE-unix/2514,unix/ubuntu:/tmp/.ICE-unix/2514"
0xffffdc84: "COLUMNS=133"
0xffffdc90: "XDG_CONFIG_DIRS=/etc/xdg/xdg-ubuntu:/etc/xdg"
0xffffdcbd: "DESKTOP_SESSION=ubuntu"
0xffffdcd4: "PATH=/usr/lib/lightdm/lightdm:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games"
0xffffdd3a: "_=/usr/bin/gdb"
0xffffdd49: "PWD=/home/ningan/anan/ret2libc"
0xffffdd68: "LANG=en_US.UTF-8"
0xffffdd79: "GNOME_KEYRING_PID=2504"
0xffffdd90: "MANDATORY_PATH=/usr/share/gconf/ubuntu.mandatory.path"
0xffffddc6: "COMPIZ_CONFIG_PROFILE=ubuntu"
---Type <return> to continue, or q <return> to quit---
0xffffdde3: "UBUNTU_MENUPROXY=libappmenu.so"
0xffffde02: "LINES=37"
0xffffde0b: "GDMSESSION=ubuntu" 0xffffde1d: "BIN_SH=/bin/sh"
0xffffde2c: "SHLVL=1"
0xffffde34: "HOME=/home/ningan"
0xffffde46: "GNOME_DESKTOP_SESSION_ID=this-is-deprecated"
0xffffde72: "LOGNAME=ningan"
0xffffde81: "DBUS_SESSION_BUS_ADDRESS=unix:abstract=/tmp/dbus-u20SORJaFU,guid=01d9b6a813e81470134d715500000054"
0xffffdee3: "XDG_DATA_DIRS=/usr/share/ubuntu:/usr/share/gnome:/usr/local/share/:/usr/share/"
0xffffdf32: "LESSOPEN=| /usr/bin/lesspipe %s"
0xffffdf52: "DISPLAY=:0.0"
0xffffdf5f: "XDG_CURRENT_DESKTOP=Unity"
0xffffdf79: "LESSCLOSE=/usr/bin/lesspipe %s %s"
0xffffdf9b: "XAUTHORITY=/home/ningan/.Xauthority"
0xffffdfbf: "COLORTERM=gnome-terminal"
0xffffdfd8: "/home/ningan/anan/ret2libc/expl"
(gdb) c 7 //清除行号为7处的断点
Will ignore next 6 crossings of breakpoint 1. Continuing.
BIN_SH will be at 0xffffde24
[Inferior 1 (process 3108) exited normally]
(gdb)
|