gdb无法找到main
gdb无法找到main最近在用gdb调试一个程序的时候,由于程序经过了strip处理,没有debug信息,所以当b main的时候会出现”Function main not defined”错误信息,也就是无法定位main函数。而当b libc_start_main函数时是可以定位到的,而libc_start_main函数的第一个参数就是main函数的地址,因此可以通过定位__libc_start_main函数,然后获得第一个参数的内容,此时就是main函数的地址。具体操作如下:
传进__libc_start_main函数的参数查看汇编可以看到将__libc_start_main的第一个参数传进了$RDI寄存器中(64位机器):
因此在gdb中先在**libc_start_main函数下断点: b** libc_start_main
在$RDI指向的内容处下断点在 libc_start_main处下了断点后,run一下会在libc_start_main入口处停下,此时$rdi寄存器存储的是main函数的地址,b *$rdi则会在main处下断点
转自
gdb无法找到main | ...
CC++改变终端输出字体的颜色(Linux)
C/C++改变终端输出字体的颜色(Linux)例子:
123456//输出红色的hello world!#include <stdio.h>int main() { printf("\033[31mhello world!\033[0m"); return 0}
ASCII编码中的八进制数字033代表ESC,这是非打印字符,属于控制字符。ASCII码表对他的解释是——换码(溢出),其实这是一个屏幕控制码,是由ASCII码驱动支持的一系列用来控制终端的控制码,如:控制显示颜色、闪烁、发出声音等。(Linux下的GNU和Bash支持用\e代替\033)
格式:
1printf("\033[属性1;属性2;属性3m;有颜色的输出");
控制码如下:
\033[0m 清除所有格式(结束格式,如果格式范围结束,需要在结束为止添加此控制码来结束上一个格式,否则后续终端输入或输出都会沿用此格式)
\033[1m 设置文字颜色亮度,变亮
\033[2m 设置文字颜色亮度,变暗
\033[3m ...
CANARY爆破
CANARY爆破题解题目文件在那位大佬的博客里有链接,是这个:
[点击打开链接](https://github.com/Hcamael/CTF_repo/tree/master/NJCTF 2017/pwn150(messager))
0x0001拿到这个题之后首先看出是一个 elf 文件,拖到我的kali里面,用 binwalk 查看一下:
一个64位的文件,静态反汇编IDA
0x0002搜索字符串之后锁定在了main函数
看完main函数之后,大致有了认识,这个程序创建了socket连接,并且监听5555端口的信息。含有最初的对v7赋值以及最后一步的检测。因为有了fork()函数,
里面含涉及到几个比较重要的函数:
第十行的sub_400B76():
这个函数可以告诉我们,正常情况下在题目文件当前目录下有一个文件名为 “flag” 的文件,推测我们最重要获得的flag就在里面,引文这是在自己的电脑上做这个题,所以自己赶紧在题目文件旁边新建一个flag文件(没有这个文件题目无法运行)。
还有最后返回的是fd这个文件指针,指向的是unk_602160这个空间,点进去看 ...
C++等pwn的换libc库的方法
C++等pwn的换libc库的方法前言关于这个是我在打2023年的四川省赛的时候线下因为不会换libc,导致exp是能通的,但是在调libc的偏移的时候耗费了太多时间导致丢分
如何修改对于c++的libc库也就是比c语言的库,多了几个C++的链接库罢了,并且会使用到该libc.so.6,就将对应的所以的链接库给改为那个版本即可
下面是一个C++的题需要的某些库文件,用ldd列出来即可
于是先把libc.so.6 替换掉,然后替换掉libm.so.6等等
但是值得注意的是,并不是说它链接的是哪个就去替换哪个
可以看到这个libstdc++.so.6最后是转到libstdc++.so.6.0.28的,于是我们需要去替换这个库就行
libc.so.6也是这样的
下面给出一个脚本,去修改下关联数组即可,最后再用 –set-interpreter 替换运行库即可
123456789101112131415161718192021222324252627282930313233343536373839404142#!/bin/bash# 设置可执行文件的路径executable_file=& ...
AFL++fuzz测试
AFL++fuzz测试概述AFL++是AFL的社区维护版本。它拥有更快的fuzzing速度,更好的变异策略、插桩性能和功能,以及支持各类自定义的模块。
AFL简介AFL(American Fuzzy Lop)是由安全研究员Micha? Zalewski(@lcamtuf)开发的一款基于覆盖引导(Coverage-guided)的模糊测试工具,它通过记录输入样本的代码覆盖率,从而调整输入样本以提高覆盖率,增加发现漏洞的概率。
①从源码编译程序时进行插桩,以记录代码覆盖率(Code Coverage);②选择一些输入文件,作为初始测试集加入输入队列(queue);③将队列中的文件按一定的策略进行“突变”;④如果经过变异文件更新了覆盖范围,则将其保留添加到队列中;⑤上述过程会一直循环进行,期间触发了crash的文件会被记录下来。
选择和评估测试的目标开始Fuzzing前,首先要选择一个目标。 AFL的目标通常是接受外部输入的程序或库,输入一般来自文件(后面的文章也会介绍如何Fuzzing一个网络程序)。
1. 用什么语言编写AFL主要用于C/C++程序的测试,所以这是我们寻找软件的 ...
CVE复现计划【CVE-2023-27997 fortigate 防火墙】
CVE复现计划【CVE-2023-27997 fortigate 防火墙】前言为了继续学习IOT路由器等漏洞挖掘的学习,参加了团队的CVE复现计划,这里简单跟着师傅们做一些复现,这里用于记录我的学习路线
一、漏洞详情Fortinet(飞塔)是一家网络安全产品和安全解决方案提供商,其产品包括防火墙和VPN、防病毒软件、入侵防御系统和终端安全组件等。FortiOS是专用于FortiGate网络安全平台上的安全操作系统,该系统为用户提供防火墙、防病毒、VPN、Web内容过滤和反垃圾邮件等多种安全功能。
近日监测到Fortinet FortiOS中存在一个远程代码执行漏洞(CVE-2023-27997)。由于Fortinet FortiOS SSL-VPN功能中存在基于堆的缓冲区溢出漏洞,可在未经身份验证的情况下利用该漏洞导致设备崩溃或执行任意代码。
建议受影响用户做好资产自查以及预防工作,以免遭受黑客攻击。
二、影响范围Fortinet FortiOS 6.0.x版本:< 6.0.17
Fortinet FortiOS 6.2.x版本:< 6.2.15
Fortinet Fort ...
堆入门off-by-null-asis2016_b00ks
[堆入门off-by-null]asis2016_b00ks前言由于这个题在堆利用里面过于经典了,网上wp千千万,我这里就不再细讲其中的利用方法了,只是说一点细节的东西,这里推几个我看的师傅的文章,下面的内存大部分都是基于Tokameine师傅的wp的。
堆中的 Off-By-One - CTF Wiki (ctf-wiki.org)
[(17条消息) 堆入门off-by-null]asis2016_b00ks_Nashi_Ko的博客-CSDN博客
[(17条消息) Asis CTF 2016] b00ks —— Off-By-One笔记与思考_Tokameine的博客-CSDN博客
free_hook劫持https://lantern.cool/note-pwn-free-hook/#%E4%BE%8B%E5%AD%90
小细节为了能更好的理解后面的内容建议先看完其他师傅的博客,这里先贴一下我本地打通的wp123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495 ...
RHG赛制
RHG赛制做题技巧静态编译的题目的ropchain
1ROPgadget --binary r2 --ropchain
工具和资源汇总2022网鼎赛制介绍
https://g.ichunqiu.com/wdsignup/static/resources/pdfs/%E4%BA%BA%E5%B7%A5%E6%99%BA%E8%83%BD%E6%BC%8F%E6%B4%9E%E6%8C%96%E6%8E%98%E8%B5%9B%EF%BC%88RHG%EF%BC%89%E8%B5%9B%E5%88%B6%E7%BB%86%E5%88%99.pdf?v=20230301
libc符号表
https://github.com/push0ebp/sig-database
i春秋的智能自动挖洞机器人
https://github.com/thinkycx/rhg2018-robot
BCTF的Autopwn
https://github.com/0xaww/RHG-AutoPwn-Robot
网鼎杯题解
https://cn-sec.com/archives/1676819.html
符号信息 ...
off-by-one--Plaiddb
[off-by-one]–plaidctf 2015 plaiddb前言这个题做了很久,太累了,放暑假还是没得在学校学习效率高,不是不想学就是有其他的事情,准备做完这些堆题,开始转为re为主了,还是感觉PWN没什么钱途呀。
分析12345678[!] Could not populate PLT: invalid syntax (unicorn.py, line 110)[*] '/ctf/work/off_by_one/PLAiDB/PlaidDB' Arch: amd64-64-little RELRO: Full RELRO Stack: Canary found NX: NX enabled PIE: PIE enabled RUNPATH: '/tmp/ld-2.23.so'
不是很妙,因为防护全开了,但不是很影响,这些防护基本上只能防护防护栈溢出,对于堆溢出基本没什么用。
tips
这里有个小知识点,因为这个这个漏洞需要用到一些基于lib2.23的性质 ...
CTFwiki之基本ROP
CTFwiki之基本ROP现在才知道CTFwiki上有这么多的好东西,果断转换到这里来学,在这里能学到很多好东西。
基本 ROP - CTF Wiki (ctf-wiki.org)
这是官方给出的wp。
接下来开始写我自己对这些题的理解和收获。
ret2text原理
ROP的基本原理就是栈溢出,只是通过栈溢出,然后返回的地址不同罢了。这里就是返回回程序本来就有的函数。
由给出的题来解释这个原理。
题目
通过checksec和file命令查出该文件只开启了堆栈不可执行保护,是个32位的程序。
ida反汇编看出来,这里存在栈溢出漏洞。
接下来就是寻找该数组到返回地址的偏移是多少来控制返回地址。
其实这里是可以看出来偏移为多少的,但是ida算出来的偏移地址有时候是有问题的,最好是以gdb调试出来的返回地址为准。(这里的偏移地址就有问题,这里算出来是0x68,但是实际上并不是,貌似可能是ida的机制问题,没有去细细研究)
接下里就是通过gdb调试来调试出偏移地址。
1230x80486a7 <main+95> lea eax, [esp + 0x1c] 0x ...