LOB orc -> wolfman id : orcpw : cantata 코드입니다. 아까와 다른 점이 있다면 똑같이 환경변수를 초기화 해주지만 이번에는 버퍼도 0으로 초기화를 해줍니다. 따라서 쉘코드를 버퍼안에 못 넣겠네요. 그렇다면 ret뒤에 공간을 이용하면 가능하지 않을까요. 일단 분석을 하기위해서 tmp라는 폴더를 만들고 옮겨서 분석하겠습니다. 어셈블리 코드입니다. 중요한 부분만 보도록 하겠습니다. 스택프레임을 44만큼 형성하고 있습니다. ebp-40부터 strcpy하는군요 따라서 메모리구조는 i(4) | buf(40) |sfp | ret 이 되겠습니다. 저희는 ret뒤에 공간을 이용할 것이니 주소를 구해보도록 하겠습니다. 이렇게 해보겠습니다. 0000000이 보이시나요 버퍼가 0으로 초기화 된 모..
LOB goblin -> orc id : goblinpw : hackers proof 코드입니다. //egghunter 부분은 환경변수 기법을 막은 것 입니다.그리고 argv1의 47번째 글자가 \xbf가 아니면 종료가 됩니다. strcpy를 해주니 bof가 일어납니다. 분석을 해보겠습니다. 분석을 위해 tmp폴더로 파일을 cp하겠습니다. 어셈블리 코드입니다. 중요한 부분만 보도록 하겠습니다. 스택 프레임을 44만큼 할당 하고 있습니다. ebp-40부터 strcpy 하는 군요 따라서 메모리 구조는i(4) | buf(40) | sfp | ret 이 됩니다. sfp까지 44개를 채워주고 ret을 조작해주면 될 것 같습니다. 하지만 ret의 마지막이 \xbf여야 하니깐 스택을 이용해야 할 것 같습니다. Nop..
LOB cobolt -> goblin id : coboltpw : hacking exposed 코드입니다. 전 레벨과 달라진 점은 argv를 이용해서가 아닌 gets로 입력을 받군요. bof가 발생하는 군요. ret값을 조작하여 공격하면 될 것 같습니다. 바로 분석을 해보겠습니다. 분석을 하기 위해 tmp라는 폴더를 만들고 cp하겠습니다. 스택프레임이 16만큼 형성되어 있고 ebp-16 즉 esp부터 gets로 입력을 받습니다. 메모리 구조는 buf(16) | sfp | ret 이 되겠습니다. 저는 RTL기법으로 풀도록 하겠습니다. 먼저 system 함수의 주소를 구하도록 하겠습니다. 0x40058ae0입니다. 이제 /bin/sh의 주소를 구해보겠습니다. 주소를 구하는 코드입니다. 컴파일을 해주고 실행하..
LOB gremlin -> cobolt id : gremlinpw : hello bof world 코드입니다. 버퍼의 크기가 16인데 strcpy를 통해 bof가 가능합니다. bof를 이용해서 ret을 조작해주면 될 것 같습니다. 하지만 쉘코드를 스택프레임안에 넣을 수 없을 것 같습니다. 16이 너무 작아서 입니다. 그래서 환경변수 기법 또는 RTL기법으로 풀어야 할 것 같은데 저는 환경변수 기법을 이용해서 공격을 해보겠습니다. 먼저 분석을 위해서 tmp폴더를 만들고 cp하겠습니다. 어셈블리 코드입니다. 스택 프레임을 16만큼 형성하였습니다. ebp-16, 즉 esp부터 strcpy가 됩니다. 따라서 메모리구조는 buf(16) | sfp | ret 이 구조가 될 것 같습니다. ret을 쉘코드가 담긴 환경..
LOB gate -> gremlin id : gatepw : gate 코드입니다. 버퍼의크기는 356인제 argv[1]를 strcpy를 하니 버퍼오버플로우가 일어납니다. bof로 ret을 조작해주면 될 것 같습니다. RTL기법을 이용해서 풀도록 하겠습니다. 먼저 분석해보겠습니다. 분석을 위해 tmp라는 폴더를 만들고 복사했습니다. 어셈블리 코드 입니다. 스택프레임을 0x100 만큼 형성하고 있습니다. 0x100은 10진수로 256입니다. 따라서 메모리 구조는 buf 256 | sfp | ret 이 될 것 같습니다. 이제 시스템 함수의 주소와 /bin/sh의 주소를 구해보겠습니다. 0x40058ae0 입니다. 이제 /bin/sh의 주소를 구해보겠습니다. 주소를 구하는 코드입니다. 컴파일을 해주고 실행하면 ..
command injection을 공부하다가 좋은 문제가 있어서 풀이를 쓰게 되었습니다. 이 문제는 defcon 2015 예선문제 입니다. 원래 remote환경에서의 문제인데 저는 바이너리 파일을 구해서 제 서버에서 풀었습니다. flag파일은 제가 만들었습니다. babycmd를 실행해보면,4가지의 명령어를 실행시켜준다고 합니다. ping명령어가 잘 수행됩니다. dig 명령도 잘 수행 됩니다. 당연히 host 명령도 잘 수행됩니다. 이제 바이너리 파일을 분석하기 위해 ida를 이용해 보겠습니다. 여기서 쓰이는 함수들은 아마 저 명령어들을 실행시켜주는 함수겠죠? 좀 더 자세히 보기 위해 ping일 때 사용되는 함수인 sub_E35를 보겠습니다. 여기가 중요한 부분인 것 같은데요. sub_D65함수가 무엇인지..
1. NC 연결remote(IP, PORT) 형식으로 연결.IP는 str이고 port는 int형임에 주의p = remote("localhost",1234) 2. Local nc 다음으로 많이 쓰는 local 경우에는 process("PATH") 식으로 연결PATH도 마찬가지로 strp = process("./test") 3. ssh 젤 많이 안쓰이지만 pwnable.kr 쓸 경우 많이 나옴 ssh(username, IP, PORT, PASSWORD) 꼴로 연결, USERNAME, IP, PASSWORD 는 str PORT는 int PORT와 PASSWORD는 각각 앞에 port=, password= 를 붙힘. p = ssh("test", "localhost", post=1234,password="test..
FTZ level19pw : swimming in pink 레벨 19입니다. 먼저 hint를 보겠습니다. 간단합니다. setuid도 걸려있지 않고 그냥 gets로만 입력을 받네요. 버퍼오버플로우가 발생합니다. 그냥 setuid 걸어주고 쉘코드를 이용하면 될 것 같습니다. 먼저 분석하겠습니다. 분석하기 위해서 tmp폴더로 파일을 옮기겠습니다. gdb로 분석을 해주겠습니다. 보기편한 intel방식을 사용하겠습니다. main의 어셈블리 코드입니다. 스택프레임이 0x28만큼 구성되어있습니다. 0x28은 10진수로 40입니다. ebp-40부터 입력을 받습니다. 따라서 esp부터 입력을 받는군요. 그러면 buf 40 + sfp + ret 이렇게 될 것 같습니다. 그럼 bof로 sfp까지 덮어준 뒤 ret을 조작해주..
- stack reusing
- shellcoding
- glibc
- pwnable.tw
- fastbin
- SQLi
- fastbindup
- 해킹
- overflow
- srop
- FSB
- heap
- hacking
- exit
- pwable
- 본선가고싶다
- pwnable
- TLS
- fsop
- ebp change
- tcache
- codegate
- HackCTF
- oob
- rt_sigreturn
- Total
- Today
- Yesterday