![thumbnail](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FCjDBH%2Fbtq4qEtasOV%2Fkrc22BSS2AEubjtc89Hki0%2Fimg.png)
[Heap exploitation] Heap Overflow
2021. 5. 8. 14:11
Hacking/Pwnable
Heap Overflow #include #include int main(void) { FILE* fd = fopen("secret","r"); char* input = malloc(40); char* secret = malloc(40); fread(secret, 1, 40, fd); fclose(fd); read(0, input, 100); // Overflow! printf("%s\n", input); } 두 개의 heap 메모리인 input 과 secret 을 할당한 뒤, secret 파일을 읽어서 두번째로 할당했던 secret 영역에 저장한다. 그 후 input 영역에 입력 값을 받고 출력시켜주는 코드이다. 이때 read 함수에서 취약점이 터진다. input 으로 할당한 메모리 크기는 40 바이트..
![thumbnail](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FtsF9o%2Fbtq4cf1C9lC%2FcEHEeYzn7UMHDR0IaLpgH0%2Fimg.png)
[Pwnable] Heap3
2021. 5. 6. 01:17
Hacking/Pwnable
Free free chunk는 bin이라는 freelist 구조체를 통해 관리 * freelist: 동적으로 메모리를 할당하고 해제할 때 메모리 관리의 효율을 높이기 위해 할당되지 않은 영역을 관리하는 연결 리스트 메모리 해제 : 해제하려는 영역을 freelist에 추가 / 메모리 할당 : freelist에 추가된 영역을 제거하고 해당 영역을 사용 -> 할당자는 할당 요청을 충족시키기 위해 적합한 청크를 bins에서 신속하게 찾아서 재할당한다. -> bins의 종류에는 Fast bin, Small bin, Large bin, Unsorted bin이 있다. -> 이는 malloc_state구조체(Arena_Header)에서 확인 가능하다. malloc_state구조체(Arena_Header) struct..
![thumbnail](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FCGEl4%2Fbtq3v8WLnqc%2F8s8Iq9mVp3K8ifBOSHF5F1%2Fimg.png)
[Pwnable] Heap2
2021. 5. 5. 22:09
Hacking/Pwnable
Chunk Malloc에 메모리 할당을 요청하면 넓은 메모리의 영역("힙")을 다양한 크기의 덩어리("chunk")로 나눈다. 32bit에서는 해당 청크가 8byte 단위로 할당이 되고, 64bit에서는 16byte 단위로 할당된다. 일반적으로 malloc()을 호출하고 반환되는 주소를 이용하여 데이터를 입력하게 되는데, 사실 반환되는 주소는 청크의 시작부분이 아닌 페이로드의 주소이다. 페이로드바로 위에 meta-data를 포함하는 청크 헤더가 존재한다. 이 헤더에서 현재 청크의 사이즈가 몇인지, 인접한 청크의 사이즈는 얼마인지가 들어있다. Chunk는 크게 3가지 타입을 가진다. - In-use chunk : 애플리케이션에서 할당받아서 사용중인 덩어리 - Free chunk : 응용프로그램에서 시스템에..
![thumbnail](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Foo170%2Fbtq4dcQnK4r%2FqjgzbdxRTxjU0CbtsSbUaK%2Fimg.png)
[Pwnable] Heap1
2021. 5. 5. 17:18
Hacking/Pwnable
Memory Allocator 힙 익스플로잇을 구현하기 위해서는 메모리 관리를 위해 사용되는 Allocator에 대한 이해가 필요하다. - dlmalloc, ptmalloc2, jemalloc, tcmalloc, libumem, 등 다양한 종류의 메모리 할당자가 있다. 여기서는 GNU C Library의 메모리 할당자인 ptmalloc2에 대해 설명하겠다. - ptmalloc2는 dlmalloc 코드를 기반으로 하며 멀티 스레드에서 사용되도록 확장되었다. ptmalloc2 (2.23) ptmalloc2은 동일한 시간에 2개의 스레드가 malloc을 호출할 경우, 메모리는 각각의 스레드가 분배된 힙 영역을 일정하게 유지하고, 힙을 유지하기 위한 freelist data structures 또한 분배되어 있..
![thumbnail](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FQT9pf%2Fbtq3YLT3114%2FG4tJnAWoUN4jRNDaWJn5Zk%2Fimg.png)
[Webhacking.kr] 12번
2021. 5. 4. 00:48
Wargame/Webhacking.kr
자바 스크립트 문제 Js 부분이 난독화 되어있음. 구글링을 통해 aaencode 를 통해 암호화된 것을 확인함. var enco=''; var enco2=126; var enco3=33; var ck=document.URL.substr(document.URL.indexOf('=')); for(i=1;i
![thumbnail](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fdof0Hy%2Fbtq37AXOOV4%2Fv3QP84OESk2ZM3Y5J4i0Nk%2Fimg.png)
[Webhacking.kr] 11번
2021. 5. 4. 00:26
Wargame/Webhacking.kr
정규 표현식 문제 Php 부분을 살펴보면 get 방식으로 받은 ‘val’ 값과 정규표현식이 같을 경우 solve(11) 가 실행된다. 정규 표현식(Regular Expression)은 문자열을 처리하는 방법 중의 하나로 특정한 조건의 문자를 '검색'하거나 '치환'하는 과정을 매우 간편하게 처리 할 수 있도록 하는 수단이다. http://tcpschool.com/php/php_regularExpression_basic 정규 표현식 $pat 을 분석하면 다음과 같다. https://regex101.com/ Code Meaning Example [1-3] 1과 3사이의 수 1 [a-f]{5} (A-f 사이의 수)* 5 aaaaa _.* '_' 문자와 임의의 문자(.) 0개 이상 $_SERVER[REMOTE_A..
![thumbnail](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcUbTNB%2Fbtq35DVdR7R%2FZo4G8jr3jyMu7rkpGhnUKk%2Fimg.png)
[Webhacking.kr] 10번
2021. 5. 4. 00:19
Wargame/Webhacking.kr
웹개발자도구 앞에 있는 O를 클릭하면 조금씩 1px만큼 움직인다.. 소스코드를 확인하니 다음과 같다. This.style.left==1600이 되면 어느 디렉터리로 이동하는 것 같다. Left 값을 1599로 바꾸고, O를 클릭해보았다.
![thumbnail](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fben6UU%2Fbtq36rNMBW5%2FKmf9kZScDKkcrbsCagk321%2Fimg.png)
[Webhacking.kr] 8번
2021. 5. 4. 00:16
Wargame/Webhacking.kr
sql injection 문제 소스 코드를 보면 특정 HTTP_USER_AGENT 인 id 값을 가져와 $ck에 저장한다. 그리고 $ck 값이 존재하고 "admin" 일 경우 solve() 가 실행된다. $ck 값이 존재하지 않을 경우엔 insert 문을 통해 agent, ip, id 값들을 추가한다. -> 버프 스위트를 이용해 "admin" 을 추가하면 될 것 같다. User-Agent 에 a','1','admin'),('b 를 추가하였다. 이는 실제 INSERT 문에서 다음과 같이 동작할 것이다. INSERT INTO chall8(agent,ip,id) VALUES('a', '1', 'admin'), ('b', '{$ip}', 'guest') F5로 새로고침을 한 뒤, User-Agent 를 아까 a..