问答
发起
提问
文章
攻防
活动
Toggle navigation
首页
(current)
问答
商城
实战攻防技术
漏洞分析与复现
NEW
活动
摸鱼办
搜索
登录
注册
Shellcode动态分析
CTF
周末参加了ctf 比赛,第一次接触,花了点时间,找朋友辅助了一下,最终获取题目答案
上周末需要支持 ctf 比赛,没打过呀,记录第一次打 ctf 的经历。 下面为题目  解压后是一个二进制文件  • ELF:文件格式为**可执行与可链接格式**(Linux 系统下最常见的二进制文件格式)。 • 64-bit:64 位架构,运行在 x86-64(AMD64)处理器上。 • LSB:采用**小端字节序**(低端字节存储在低地址,x86 架构的典型特征)。 • pie executable:**位置无关可执行文件**(Position-Independent Executable),加载时可随机分配内存地址,增强安全性(对抗缓冲区溢出等漏洞利用)。 使用checksec 查看 文件安全保护机制状态  **RELRO(Relocation Read-Only)**:重定位表只读保护 **栈保护(Stack Canary)**:栈溢出检测机制。 **NX(No-eXecute)**:不可执行内存保护。 **PIE(Position-Independent Executable)**:位置无关可执行文件。 好家伙,都开启了。 然后题目需要找到 恶意 IP 和端口,那 strings 试一下 ,万一有呢  果真不存在,那么基本信息已经知道了,就先打开 IDA 看一下流程图。 直接拖入到 ida 中,会自动识别架构     本人也看不懂,找了 ai 总结了一下  观察导入表比较少,没有发现和网络相关的单词,猜测 ip 地址应该不是明文写入  回到main 函数中,,把鼠标放到loc\_14E3 ,空格切换视图   addr 就是我们需要获取的 ip 地址 简单看下汇编, rax 为寄存器,他的值在上面是 rbp+dest 给他的,然后是通过call \_memcpy 进来的,所以我们需要动态调试,静态是不能获取到数据。 动态调试不太会,所以请好盆友来辅导一下。 info files 查看文件入口  b \*0x1240 打断点  run 运行程序  再次输入 info files 查看文件入口  i b 查看断点信息  这时,我们删除 1 断点,否则程序无法运行 del 1 run 运行程序  ni 步过 一直步过,直到看到我们的main 函数地址。 输入 ni 后,绿色的小箭头会往下走  输入第一次 ni 后,后面直接敲回车,一样的意思 一直到这里,就看到程序入口函数了  这是输入 si 步入 main 函数中  上面的框框就是 main 函数的实际内存地址 我们在地址上打断点 b \*0x55555555540a  然后执行 c,可直接进入主函数  n 重复执行一直到能看到 call rax,这里 call rax 就是我们在 ida 分析的汇编,他的值就是从这能寻找到 大概输入了 20 多次回车,就看到了  然后我们输入si 进入内存中  其实这一步就已经看到数据了,接着回车,直到 syscall 哪一行  然后用syscall去调用connect(),建立连接,就可以看到ip地址,为16进制 转一下数据,就可以看到题目中的答案。 
发表于 2025-08-29 10:00:00
阅读 ( 195 )
分类:
应急响应
0 推荐
收藏
0 条评论
请先
登录
后评论
轩公子
3 篇文章
×
发送私信
请先
登录
后发送私信
×
举报此文章
垃圾广告信息:
广告、推广、测试等内容
违规内容:
色情、暴力、血腥、敏感信息等内容
不友善内容:
人身攻击、挑衅辱骂、恶意行为
其他原因:
请补充说明
举报原因:
×
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!