[转载] 从正在运行的Linux进程中dump出内存内容

[转载] 从正在运行的Linux进程中dump出内存内容,第1张

最近看到有个CTF题感觉挺有意思,就团盯晌是从一个bin中找到一个secret key,然后用来签名session cookies用来怼一个使用go的Web服务器。通常这种类型题的flag都比较直接。可以直接用strings怼这个bin就可以了,然而这次的这个题目中的bin不同,因为有太多杂碎(noise)要过滤了。于是在此我就来展示一下如何用一些基本的Linux命令配合gdb从进程中dump出内存中的信息。

先file一下,

发现是64位的Linux可执行文件

然后strings一下,

发现字符串太多,还是先不看,再研究深一点吧。

然后先运行一下程序,

然后再另一个终端找到这个进程的PID

然后cat一下它的内存(太长不看TLDR)

似乎太多了有点可怕,但是不用害怕。

然后启动gdb,将改进程attach到gdb上。

然后就是gdb命令

解释一下语法:

然后就是用strings命令找出刚才dump出的文件的字符串,我喜欢最少10个长度的字符串(-n 10)来过滤掉一些无用的信息(noise)。

结果如下:

可以看到好像有个hash值,为了不泄露CTF题的答案,我已经把hash值改了。

总结

好了,你已经找到运行的进程的PID,dump出了那个进程的内存内容,然后用gdb,strings命令找出了有用的数据。

以上翻译自:

https://colin.guru/index.php?title=Dumping_Ram_From_Running_Linux_Processes

Let’s get your hands dirty

Down to business

于是我也想试一下啊,然而我想找一个执行命令之后不退出的进则空程还蛮难的,最终我想到了apache,然而必须要有客户端与apache建立TCP长连接,如果是那种5xx的错误,比如这个,

就会发现TCP连接建立之后马上又断开了。

于是只能弄一个TCP长连接吧。返回200的那种应该可以。

结果发塌锋现还是不行。

于是通过htop漫无目的地找吧,于是还是找apache的主进程吧。

通过htop发信apache的主进程的PID为6900,

于是

(注意:要以root的身份启动,否则可能没有权限。)

然后gdb就开始调试6900进程了,一顿输出啊,几秒之后到达gdb的命令行。

然后dump出heap中的内容。

然后在/root目录找到了那两个dump出来的文件,

从任意一个dump中找出10个字符以上的字符串吧。

————————————————

原文链接: https://blog.csdn.net/caiqiiqi/article/details/72807952

dumpfile的意思是垃圾文件。

A complete memory dump file is rarely required.

通常很少需要完全内存转储文件。

The system could not get file retrieval pointers for the dump file.

系统未能为转储文件获得文件检索指针。

Dump文件是进程的内存镜像。可以把程序的执行状态通过调试器保存到dump文件中。Dump文件是用来给驱动程序编写人员调试驱动程序用的,这种文件必须用专用工具软件打开,比如使用WinDbg打开。稿型

其中的/ma参数表示dump文件应该包含进程的完整信息,包括整个用户态的内存,这样dump文件尺寸会比较大,信息非常全面。如果不使用/ma参数,保存下来的dump文件只包含了部分重要资料,比如寄存器和线程栈空间,文件尺寸会比较小,无法分析所有的数据。

在Windbg中,通过File→Open Crash Dump菜单可以打开dump文件进行分析。打开dump文件后,运行调试命令看到山薯的信息和状态,就是dump文件保存时进程的状态。逗敬者通过dump文件能够方便地保存发生问题时进程的状态,方便事后分析。

dump还是oracle及SQL数据库中导出的数据文件。可以备份数据,并可以实现后期的导入。

dump文件是一个进程或者系统在某弯携一个给定的时间的快照。

dump文件是用来稿隐给驱动程序编写人员调试驱动程序用的,这种文件必须用专用工具软件打开。

dump文件中包含了程序运行的模块信息、线程信息、堆栈调用信息、异常信息等数据。

在服务器运行我们的Java程序时,是无法跟踪代码的,所以当发生线上事故时,dump文件就成了一个很关键的分析点。

这里介绍两种方式,一种是主动的,一种是被动的。

主动生成dump文件。首先要查找运行的Java程序的pid。

使用top命令:

然后使用jmap命令生成dump文件。file后面键闹厅是保存的文件名称,1246则是java程序的PID。


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/yw/12419661.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-23
下一篇2023-05-23

发表评论

登录后才能评论

评论列表(0条)

    保存