분류 전체보기 145

[Pwnable.kr] Unlink

#HeapOverflow #unlink Heap 공부를 본격적으로 다시 해보고자 이 문제로 시작했다. Heap 병합과정을 통해 생기는 리얼 Unlink 취약점은 아니고, 구조체를 직접 구현해놓고 Unlink 가 이루어지는 과정을 함수로 구현해놓았다. 보급형 Unlink 취약점 ? 이라고 할 수 있을 듯하다. 우선 청크 구조체는 이렇게 생겼다. fd, bk, 버퍼 요소가 들어있다. 크기는 16바이트 씩이다. main 함수에서 사용되는 것은 A, B, C 요소이다. 그 후, 바로 아래 코드와 같이 A, B, C 를 이중연결리스트 로 만든다. 그리고 남은 main 함수 로직은 이러하다 A 가 들어있는 스택주소 leak 시켜줌 A 의 주소 leak 시켜줌 gets 함수로 A 의 buf 에 무제한으로 쓴다. un..

[IDA] Hex-Rays Code Skip 현상

#IDA #Hex-Rays IDA 디컴파일러를 쓰면 종종 발견할 수 있는 디컴파일을 안해주고 코드 스킵을 하는 현상에 대해서 알아보기로 하자. 크게 중요한 부분은 아닌데, 그냥 궁금증에 찾아본다. IDA Pro - Hex-Rays skips code 이 질문글에 달린 답변들을 종합해보면, IDA 6.8 ~ 7.2 까지는 디스어셈블리에서 문제가 있는 부분은 디컴파일 하지않고 스킵 한다고 한다. 예를 들면, 질문글에서 해당 오류는 stack pointer 관련 오류로 IDA Error : positive_sp_value_has_been_found 해당 docs 에서 조치방법도 확인할 수 있다. 그리고 위 링크를 통해서 여타 다른 에러도 볼 수 있으니 참고하자.

[C++] STL 사용 시, 일반 반복문과 반복자 사용의 시간 차이

1822번: 차집합 위 문제를 풀면서 시간제한이라는 벽에 봉착하였다. 문제는 그냥 두 집합을 비교해서 A집합에만 있는 요소들을 추출해내는 것이다. 처음에는 O(N^2) 의 시간복잡도를 갖는 일반 2중 for 문으로 해결하려 하였으나... input 값의 범위는 0 ~ 2147483647 인지라 시간초과가 안일어날 수가 없었다. 도저히 O(N^2) 밑으로 내릴 방법을 찾을 수가 없었는데, C++ 에도 Python 의 Dictionary 같은 것이 존재한다는 것을 알았다. map STL C++ 에서는 map 자료구조라고 하는데 vector 와는 내장함수가 유사하며, 기능은 Python 의 Dictionary 와 같다. 아무튼... 이 map 을 이용해서 O(N) 의 코드를 만들었는데 왜인지 시간초과가 뜬다?..

<C++ study> 2020.09.02

[Pwnable.xyz] note

note #got_overwrite #BOF 바로 들어가보자. 파일은 일반 ELF 파일이다. 별다른 점은 없다. main 함수를 보면 메뉴번호를 고를 때 read_int32 함수를 통해 번호를 전달받는다. 이는 얼마안가서 취약점을 촉발시키는 매개가 되는데, read_int32 함수를 알아보자. 이 함수를 보자마자 눈여겨봐야겠다고 느낀게 문자열 형태의 숫자 를 atoi로 정수 로 바꿔주고 있었기에 얼마나 큰 수를 입력해도 검증과정없이 정수로 바꿔주는 과정이 조금 이상해보였다. 뭐 결론적으론... 좋은 발견이었지만. 그리고 1번 메뉴를 선택하면 edit_note 함수로 들어오는데 모습은 이렇다. 이 부분에서 read_int32 함수의 좋은 기능을 활용할 수 있는데, 일단 s 는 전역배열로 선언되어있는 32바..

구글 애드고시 합격후기

#애드고시 #애드센스 #구글 최근에 휴가 후 예방적 격리 기간동안 PC를 만질 수 없어서 무언가 재미있는 것을 찾아보다가 아는 분으로부터 구글 애드센스에 대해 듣게 되었다. 블로그를 계속 써왔지만, 이런거에 대해선 문외한이었기에 한 번 입문해볼까 하여 시작하게 되었다. 애드센스 시작방법은 뭐 검색하면 널려있다. https://www.google.com/adsense/ 여기서 계정만들고 ... 잘 시작하면 되는 것 같다. 여기서 스크립트 링크 얻어서 블로그에 등록시키면 AI가 애드센스를 등록시켜도 될지 말지 판단하는 일명 애드고시 가 시작되는데... 필자는 검토받는데에 한 3주가량 쓴거 같다. 보시다시피 알겠지만 게시글은 알찬지 아닌지는 모르겠지만... 개수는 별로 없어뵈는데 아마 블로그 생성한지가 좀 기..

<사는이야기> 2020.07.02

2020 상반기 정보보호병 사는이야기 - 1

필자는 우선 1월13일 입대자로 어느덧 입대 반년을 바라보고있다. 약 1달간의 훈련소를 마치고 정보통신학교에서의 후반기교육을 받는데 사실 배우는건 크게 어려운건 없다. 그냥 훈련소에서 힘들었던거 조금 충전한다는 생각으로 자대배치 날까지만 기다렸었다. 아무래도 정보보호병이 예전같진 않은지 내 기수의 정보보호병들은 나를 포함해서 군단아니면 사단으로 빠졌다. (예전같았으면 국직, 육직 부대로 자주 빠지는 편이었다.) 나름 그래도 면접 1등 먹어놓고 높은 부대 가기를 약간은 기대했었는데 애석하게도 우리나라 부대의 대부분은 사단 또는 군단이었고 나 또한 수많은 평범한 정보보호병 중 한 명이었을뿐이다. 그래도 사단에서 정보보호병으로써의 삶이 그렇게 나쁘지않았다. 오히려 나는 내가 원한 군생활인 것 같아서 좋았다. ..

<사는이야기> 2020.06.28

[Pwnable.xyz] Game

Game #Pwanble.xyz #Game 오래간만에 포너블 문제를 풀어보았다. 문제 소개로는 감이 안온다. 바이너리를 까보자. 그냥 수학문제 푸는 것 같아보인다. 분석을 해보자. 핵심만 분석해보자면, init_game() 함수에서 현재 문제풀이 상태와 문제푸는 사람 이름을 적어두고 play_game() 함수를 저장하는 cur구조체 를 초기화 한다. 이름은 최대 16바이트, 문제풀이 점수는 8바이트, play_game() 함수를 저장하는데에 8바이트를 써서 구조체는 총 32바이트이다. [play_game()] main() 함수에서 1번 Play Game을 선택하면 cur구조체 안에 있던 play_game() 함수가 실행된다. 이 함수는 별다른 기능은 없고, urandom 파일에 의해 나온 정수 2개를 랜..

[사지방] 사지방에서 원격뚫기

#apache_guacamole #docker #사지방 원격 뚫기 #사지방 #사이버지식정보방 * apache guacamole 이란? guacamole에 대해 쉽게 말하자면 html5를 이용하여, rdp나 ssh 등의 여러 통신을 80(HTTP), 443(HTTPS) 포트를 사용하는 웹 서비스를 통해 연결해주는 서비스라고 볼 수 있다. 이렇게 되면 guacamole을 구축해놓은 서버가 일종의 '프록시 서버' 가 되어 대신 3389(rdp)나 22(ssh)에 연결해주고 그에 대한 데이터를 클라이언트에 쏴준다고 보면 된다. . . . * 구축 방법 1. 로컬 리눅스 서버에 직접 구축하기 로컬에_구축하는방법 필자는 rdp를 이용하기 위해 18.04 우분투 서버에 로컬로 구축했으나 freerdp와 우분투 18...

<사는이야기> 2020.05.30
반응형