---
# System prepended metadata

title: 12/3 低レイヤ勉強会

---

# 12/3 低レイヤ勉強会

## 今月の報告会について
- 今月は低レイヤが発表と技術的トピックスを発表します(先月が高レイヤだったので)
- 発表者は1年生から出したいと思います
    - 技術的トピックスの内容は小俣が準備します
    - 発表内容・方法については2-3年生の先輩方にぜひ相談してください

## 来年度の低レイヤの活動について
- 来年度低レイヤとして何をやりたいか現1年生中心に今から考えておいてほしいです
    - 2年生はすでにやらせてもらっているので(OS)、1年生の案を重視します
    - ただ2年生もまだ現役なのでプロジェクトに協力できます

- 候補
    - マルウェア解析(水澤)
        - アナライジング・マルウェア

- 案の例
    - CTFの延長
        - バグバウンティ
        - 毎月いろんなCTFへの積極的参加＆戦績公開
            - https://ctftime.org/event/list/upcoming
    - モノづくり系
        - Linuxカーネルからオリジナルのディストリビューションを作る
            - ディストリビューション:Ubuntu, KALI,...
            - Linuxカーネルに肉付けしてOSにする
        - OS(引継ぎ)
            - OS自作入門 を参考にやってます
    

## 今月の勉強会の進め方
- 今月はPythonスクリプトの書き方と、先月で詰まったところを解説します
    - 「ASLRの回避」当たりで詰まったので、「セキュリティコンテストチャレンジブック」を参考に改めて説明しようと思います
- Pythonスクリプトについて、今まで pwntoolsを使っていましたが、処理がブラックボックスになっているところが結構あるので、なるべく標準機能を使うようにしていきます

- 以下のコードをベースに使っていきます。
- 処理に関しては、基本問題サーバーにつなぐと"Please insert your ID and Password ..."など文字列の入力が促されるところからはじまるので、scanfやgetsで確保される分の変数領域を適当な文字で埋めて、その次に関数のメモリアドレスを書き、読み込ませて実行させる「スタックオーバーフロー」が基本です
```a.py
import socket
import time
import os
import struct
import telnetlib

# connect はサーバーに接続するための関数。
def connect(ip, port):
    return socket.create_connnection((ip.port))


# p(x)とu(x)は4バイト数字データを文字列に変換。
# 例: \x78\x56\x34\x12 とかくところを p(0x12345678)と書けるようになる。
def p(x):
    return struct.pack('<I',x)

def u(x):
    return struct.unpack('<I',x)[0]


def interact(s):
    print('--------- interactive mode ----------')
    t = telnetlib.Telnet()
    t.sock = s
    t.interact()
    
s = connect('127.0.0.1', 4000)  # CTFの問題サーバーのアドレスとポート




# ここに処理をいろいろ書いていきます




interact(s) # s = connect でサーバーにつないでコードを送った後、直接操作できるようにする。
```

- 問題のソースコードはこれです
各自コンパイルしておいて下さい


```a.c
#include <stdio.h>
#include <string.h>

int main(int argc, char *argv[]){
    char msg[]="Hello\n";
    char buf[32];
    write(1,msg,strlen(msg));
    read(0,buf,128);
    return 0;
}
```