• day4


    pwnable

    leg

    本题是arm架构的汇编代码,该程序调用key1,key2,key3三个函数并将它们返回值的和与key做对比,相同则得到flag。

    首先观察3个函数的返回值分别是什么,在arm架构中,返回值通常存储在r0寄存器中,在key1()中可以看到r0最终存储的是0x00008cdc处的pc值,即0x00008cdc+8;在key2()中可以看到r0首先存储的是0x00008d04处的pc,本应该是0x00008d04+8,但往上可以看到在0x00008d00处使用了bx命令跳转到下一条指令使得工作模式变为了Thumb,这个状态下pc表示当前指令地址加4,而之后用add指令再次加4,所以key2()的返回值为0x00008d04+4+4;再看key3(),存储的是函数的返回地址0x00008d80。算出和以十进制输入即可得到flag。

    mistack

     由于操作符优先级别的关系,所以代码  fd=open("/home/mistake/password",O_RDONLY,0400) < 0  中fd最终的值并不是文件标识符,而是0,即标准输入流。所以本题直接输入buf2使得其与buf相等即可,其中有小小的异或加密,再次异或一次即可

    shellshock

     shellshock是2014年被曝出的bash远程命令漏洞,该漏洞的原因是bash环境变量中若有函数则函数体{}之后的语句也会在初始化环境变量时执行,所以我们直接重新定义环境变量并添加上cat flag打印flag:

    env x='() { :;}; /bin/cat /home/shellshock/flag' ./shellshock

    coin1

    开放端口的一个小游戏,每次给定一定数量的硬币,其中有一个假硬币,其余为真硬币。假硬币的重量的个位是9,而真硬币都是10的倍数,每次可以选择要称重的硬币序号,然后程序会返回它们的总重量,当唯一选择的硬币正好是假硬币时则游戏胜利,要求在30秒内赢一百次这样的游戏。30秒内进行一百次游戏说明必须通过程序来完成操作,本题的实质还是网络编程。使用二分法即可。代码如下:

    import socket
    import re
    
    HOST = ('127.0.0.1')
    PORT = 9007
    ADDR = (HOST, PORT)
    csocket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    
    def send_coin(start, end):
        data_send = [str(c) for c in range(start, end)]
        data_send = ' '.join(data_send)
        csocket.send(bytes(data_send+'
    '))
        print 'send:' + data_send
        return True
    
    def main():
        csocket.connect(ADDR)
        re_start = re.compile(r'^N=(d*)sC=(d*)$')
        re_ok = re.compile(r'^(d*0)$')
        re_bad = re.compile(r'^(d*9)$')
    
        while True:
            data = csocket.recv(1024)
            print data
            start_match = re_start.match(data)
            ok_match = re_ok.match(data)
            bad_match = re_bad.match(data)
    
            if start_match:
                start1 = 0
                end1 = int(start_match.group(1))
                end2 = (start1 + end1) / 2
                start2 = 0
                send_coin(start2, end2)
            elif ok_match:
                start1 = end2
                end2 = (end1 + start1) / 2 + (start1 + end1) % 2
                start2 = start1
                send_coin(start2, end2)
            elif bad_match:
                start1 = start2
                end1 = end2
                end2 = (start2 + end2) / 2 + (start2 + end2)%2
                send_coin(start2, end2)
    
        csocket.close()
        return 0
    
    main()
  • 相关阅读:
    滑动窗口与选择搜索
    R-CNN,SPP-NET, Fast-R-CNN,Faster-R-CNN, YOLO, SSD, R-FCN系列深度学习检测方法梳理
    GD和SGD区别
    AlexNet、VGG、NIN、GoogLeNet、ResNet
    目标检测中的precision,recall,AP,mAP计算详解
    转:图像分类、物体检测、物体分割、实例分割、语义分割
    卷积网络CNN中各种常见卷积过程
    卷积网络中的通道(Channel)和特征图
    人工智能之卷积神经网络(CNN)
    科技文献检索(一)——课程介绍及信息素养
  • 原文地址:https://www.cnblogs.com/amlkhlwd33/p/9417030.html
Copyright © 2020-2023  润新知