近况

博客越来越长草了。但是咱也实在没什么可以写的啊_(:з)∠)_

现在感觉就是,明明没在学啥,却越来越累了。

游戏也不想打,代码也不想写,课也不想上,琴也不想练。

一切都没意思。也许是五月病来了的症状吧.

虽说话是这样说,但是还是会断断续续的摸鱼一些东西的。

不过果然,对于一个理科生,突然去读文科的东西实在还是痛苦啊。

目前担心的就是中国民族民间音乐外国名族民间音乐心理学,这三科会不会挂科了。中国民乐还好,进了现代,好歹还是会了解些的。后面两个就真的恐怖了,都是背。

Tags: none

自用sublime配置

二话不说,先上图
TIM图片20190428233231.png
首先肯定是配置文件

{
    "detect_indentation": false,
    "font_size": 8,
    "ignored_packages":
    [
        "Vintage"
    ],
    "index_exclude_patterns":
    [
        "*/node_modules/*"
    ],
    "tab_size": 4,
    "translate_tabs_to_spaces": true
}

这个node_modules不注释的话,cpu占用贼高。

[
    {   
        "keys":["alt+a"],
        "caption": "SublimeREPL: Shell",
        "command": "run_existing_window_command", "args":
        {
            "id": "repl_shell",
            "file": "config/Shell/Main.sublime-menu"
        }
    }
]

这东西唯一的缺点就是没有tab补全,哭唧唧。

使用的插件有

  • Anaconda 用于检测和补全Python语法
  • SublimeTextTrans 用于窗口透明
  • Localization 用于汉化界面
Tags: none

赛后马后炮---canary+字符串泄露+ROP构造

分析

二话不说,直接拉到IDA,然后F5走起。

之后我们跟进
main.png

recvid.png

很明显,这个是接收ID的,其中sub_400ABE函数应该就是接收函数了。我们看一看
recv.png
果然,大概意思就是两个参数,一个字符串地址,一个接收的长度。然后for长度,用read接收字符,遇到n就break。

之后跟进第二个函数,是接收文本的,发现上面的recv长度可控。
大概逻辑就是接收文本长度,然后接收文本,然后把文本返回
recvstory.png

然而因为接收的长度是严格按照我们输入的大小来控制的,在接收函数那似乎并不能溢出。
但是!看到第一个参数s。我们这个参数是一个字符串地址,往这里写入的长度是我们可以控制的,那么,这个s的内存是在哪里申请的呢?
我们往上找,在接收story长度的那里
mems.png
size.png
看到了这个20ull
只要我们输入的长度大于这个20ull,理论就能覆盖返回地址。

虽说这里判断接收的size,如果>128,就默认是1024ll,但是我们看小于0,并没有判断大小
if.png
所以我们只需要在前面加个符号就能绕过判断了。
典型的ROP,之后就是我们要获取到libc地址。

代码直接使用了printf(%s),就是和明显的字符串泄露了
在此之前,先用checksec分析一下。
TIM截图20190412003915.png
发现开启了canary。这时候就需要泄露canary地址了

打开IDA/gdp,给printf下断点,执行。然后查看栈。

找到xor ebp,ebp

TIM截图20190412004130.png

数一数距离printf的栈顶有多远,这里是15,也就是cannary的地址了。

接下来得构造ROP调用system来执行我们的代码,就得用ROP构造了,不过在此之前我们得先找到libc的地址来构造。

因此我们先找个函数来计算libc基地址。到时候再更具基地址查找版本,再查找system函数的偏移就行了。

首先我们先用ldd来查看libc,got地址或者直接使用pwntools的elf功能。

大致思路就是这样,好困我先睡觉去了,明天找时间再写

代码

Tags: none
文章总数:129篇 分类总数:3个