98, 1/5 회원가입  로그인  
   turttle2s
   angr 질문

http://www.hackerschool.org/HS_Boards/zboard.php?id=QNA_Reversing&no=127 [복사]


angr를 이용해 필요한 입력값을 찾는 스크립트를 짜고있습니다.

타겟 소스는 아래와 같습니다.
==================================================================
// gcc -o t1 t1.c -m32 -fno-stack-protector -mpreferred-stack-boundary=2 -no-pie -fno-pic
#include <stdio.h>
#include <stdlib.h>

int main(int argc, char *argv[]){
  int canary;
  char buff[0x50];

  scanf("%d", &canary);
  if(canary == 0xdeadbeef){
    read(0, buff, 0x100);
  }

  return 0;
}
==================================================================

canary에 0xdeadbeef를 입력하고 read()에서 0x100만큼 입력받아 스택 버퍼 오버플로우가 발생하는 시나리오를 기대하고 아래 스크립트를 작성했습니다.




==================================================================
import angr, claripy

proj = angr.Project("./t1", load_options={"auto_load_libs":False})
input1 = [claripy.BVS("input1_%d" % i, 8*1) for i in range(0,4,1)]   # canary input
input2 = [claripy.BVS("input2_%d" % i, 8*1) for i in range(0,0x100,1)]    # buff input
input_data = claripy.Concat(*input1 + [claripy.BVV(b'\n')] + [*input2])

def debugging(state):
    print("[*] before mem_write")
    print("[*] ip: ", hex(state.ip.args[0]))
    print("[*] input: ", state.posix.dumps(0))
    print("[*] callstack")
    print(state.callstack)

st = proj.factory.call_state(0x8049172, stdin=input_data)
st.inspect.b('mem_write', when=angr.BP_BEFORE, action=debugging)
simgr = proj.factory.simulation_manager(st)

while len(simgr.unconstrained) == 0:
    simgr.step()

print('Done')

ust = simgr.unconstrained[0]
print('input: ', ust.solver.eval(input_data, cast_to=bytes))
==================================================================

위 스크립트를 실행하면 잘 돌다가 특정 지점에서 멈춰버립니다.
멈춘 당시에 디버깅 함수에서 출력한 내용은 아래와 같습니다.

==================================================================
[*] before mem_write
[*] ip:  0x8100008
[*] input:  b':000\n\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'
[*] callstack
Backtrace:
Frame 0: 0x8049172 => 0x8049050, sp = 0x7ffeff98
Frame 1: 0x0 => 0x0, sp = 0xffffffff
==================================================================
제가 봤을 때, 문제점은 다음과 같습니다.

1. 첫 4바이트를 바꾸면서 계속 시도하는걸 기대했지만, 위 입력을 마지막으로 더이상 mem_write 이벤트가 발생하지 않음.
2. ip가 비정상적인 값인데 unconstrained 상태로 되지않음.
3. 입력값을 만들기 위해 claripy.Conat을 사용했는데 여기서 잘못 사용했을 가능성이 있음.


어떻게 해결해야할지 모르겠네요..

  Hit : 308     Date : 2021/04/24 01:41
[불법/스팸글로 신고하기]



    
turttle2s 일단 ip가 왜 저렇게 되는지 모르겠지만 심볼릭한게 아니라면 unconstrained 안뜨는게 정상이긴 하네요 2021/04/24  
turttle2s 타겟 코드 자체가 문제가 있네요. int 형이라 deadbeef 입력을 하는 곳에서 문제가 생겨 제대로된 입력을 넣어도 비교를 못하네요 2021/04/24  
98   angr에서 스택 주소 구하기[2]     turttle2s
05/24 292
97   아스키 범위 밖 페이로드 전송 시, 0xc2가 붙는 현상[7]     turttle2s
05/11 377
  angr 질문[2]     turttle2s
04/24 307
95   리버싱 핵심원리를 공부하다가 막혔습니다.     aaasss445
06/12 907
94   quickbms 의 원리가 궁금합니다.     sa0814
05/10 645
93   콜스택에 아무것도 없을 경우에는 어떻게 해야하나요..[2]     mij9929
01/14 719
92   ollydbg 64bit 실행 불가 왜 이런거죠? ㅠ[4]     4ru4ka
04/24 1853
91   변수 선언시 스택에서의 위치[4]     turttle2s
11/13 1071
90   코드엔진 Basic 02에서     healer
04/08 1082
89   win32 api 및 진로..?[2]     user0
02/26 2158
88   메모리 주소 변경 되는 문제에 관해 질문합니다.[2]     jjunici
12/17 2146
87   ida에서 분석할 때,,,[3]     vngkv123
11/30 1222
86   리버싱-디스어셈블리-디버거에 문의좀..     leonardo6
10/13 1488
85   dumpcode 헤더파일 말인데요..[1]     ys200209
07/20 1366
84   리버싱 __security_cookie[3]     healer
07/17 2048
83   단순 리버싱 관련 질문[8]     ewqqw
06/11 1841
82   elf 바이너리 패치 질문...[2]     vngkv123
06/07 2019
81   IDA hexray로 보았을 때...[2]     vngkv123
05/29 1682
80   디스어셈블된 코드들 중에서..[2]     vngkv123
05/14 1678
79   게임 보안 (싸인코드, X-Trap, 게임가드) 분석 법률 궁금합니다![4]     셜록38
03/17 2769
1 [2][3][4][5]

Copyright 1999-2021 Zeroboard / skin by Hackerschool.org / Secure Patch by Hackerschool.org & Wowhacker.com