일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- package.json
- 유클리드_알고리즘
- 호이스팅
- 웹 프레임워크
- 개인정보보호위원회
- 국가인적자원개발컨소시엄
- 마감임박
- 한국정보보호산업협회
- 가명정보처리
- package-lock.json
- Writeup
- 곱셈 암호
- node.js
- 무료교육
- 덧셈 암호
- 확장 유클리드 알고리즘
- pwnable.tw
- 백엔드입문
- 백엔드
- 개인정보안전성
- 포너블
- function scope
- 개인정보보호교육
- 동적타이핑
- arrow function
- 개인정보보호
- 모듈러 연산
- 디오판투스 알고리즘
- 한국정보보호산업협회기자단
- 한국산업인력공단
- Today
- Total
짱짱해커가 되고 싶은 나

☞ Start ! 이번에는 Code injection 문제다. 타겟 프로세스에 코드 조각을 넣고 이 코드를 실행했을 때의 결과를 보는 것이다. health 값이 클릭할 때마다 1씩 감소할 건데, 클릭할 때 health가 2 증가하게 만들면 성공! 먼저, 값이 들어 있는 주소를 찾는다. 그리고 이 값이 hit me를 하면 -1된 값으로 쓰이니까, what writes를 눌러서 해당 코드를 확인한다. 보면 예상한대로 sub 가 잘 들어있다. show disassembler로 코드를 자세히 보면, 다음과 같이 값이 들어있는 곳에 -1을 해주고 있다. 이제 여기서 add, 2로 해주거나 sub, -2로 해주면 될 것이다. 코드를 넣기 위해서는 ctrl+A를 눌러서 Auto assemble을 실행시켜준다. tem..

☞ Start ! 이번에는 포인터에 관한 문제다. pointer랑 값을 바꿀 수 있는 버튼이 2개가 있다. 포인터를 5000으로 만들면 된다. 우선 value를 갖는 주소를 찾은 뒤, 이번에는 find out what access the address를 사용한다. (포인터니까) 보면 edx에 eax를 넣는데 이걸 통해서 edx가 포인터 주소임을 알 수 있다. 헥사값이니까 헥사 설정하고 포인터 주소를 검색한다. adrress를 2번 누르면 정보를 바꿀 수 있는데, 여기서 pointer를 체크하면 된다. 위에서 포인터 설정을 hex로 해줬기 때문에 5000의 hex 값인 0x1388을 넣어줘야한다. 만약에 type에 hex를 설정하지 않았다면 그냥 5000으로 해도 된다. change pointer를 누르고..

☞ Start ! 이번 문제는, code finder 문제다. 값을 바꾸는 코드를 찾아서 값이 바뀌지 않도록 고정시키면 된다. 먼저, 현재 값을 갖고 있는 주소를 찾는다. Find out what writes to this address를 누르게 되면, 이 주소에 어떤 값이 쓰일 때 작동하는 코드를 보여준다. heat로 값이 변경되면서, 그 때 사용된 코드가 뜬다. (코드를 누르면, 밑에 각 레지스터에 저장된 값을 볼 수 있다) 이 코드를 보면 [eax]에다가 edx값을 넣는 걸 볼 수 있다. 즉, eax는 이 값을 갖고 있는 주소고, edx는 값이다. show disassembler를 하면 디스어셈블된 코드를 보여준다. 여기서 값을 바꾸는 코드에서 replace with code that does no..

☞ Start ! 이번에는 health와 ammo 값이 있고, 정확한 값을 알 수 있는데 변수 타입이 float과 double이다. 각 값을 5000으로 만들면 된다. 먼저, health를 찾아보자. vlaue type을 float을 설정하고 값을 찾으면 된다. hit me를 누르니, 혼자 반응하는 것을 볼 수 있다. 더블도 마찬가지로 진행하면 된다. 참고로 100같은 값은 많이 갖고 있으니까, 처음 시작할 때 hit me나 fire로 값을 바꾼 채로 검색하면 더 수월하다.

☞ Start ! 이번에는 Unkown initial vlaue 문제다. 말그대로 아까는 health 값을 정확하게 알 수 있어서 그 값을 가진 address를 뽑아 볼 수 있었는데, 이번에는 health 값이 몇인지 알 수 없는 것이다. (여기서는 status bar 라고 한다 ㅎ) 문제를 보면 status bar 값은 0에서 500 사이이고 이 값을 5000으로 만들면 된다. 상태 바를 보면 현재 꽉 차 있으니까 500이고, 숫자이니까 4byte라고 추측할 수 있다. (※ 새로운 Step으로 왔을 때는 항상 New Scan!을 눌러주는 것을 잊지 말자) 치트 엔진에서는 다음과 같이 unkown initial value를 스캔할 수 있다. 무슨 값을 초기에 갖는지 모르지만, 4byte의 타입이다라고 설..

☞ Step 2 Exact Value Scannig에 관한 문제다. 밑을 보면 heat me 버튼이 있고 그 옆에 100이라는 숫자가 써있다. 이 100이 체력인것! 그래서 heat를 하면 체력이 랜덤한 값으로 줄어든다. 문제는 이 health 를 1000으로 만들어주면 된다. 현재 찾고자하는 것은 Health를 저장하고 있는 변수(?) 다. health의 값을 알고 있으니 이 값을 갖는 주소를 뽑아오면 된다. 숫자 값이니 4byte일 것이라고 추측하고, Scan Type을 Exact Value로 한 뒤, value를 넣고 Scan을 하면 된다. Scan을 하면 값이 100인 여러 주소들이 뜬다. heat를 찾기 위해 튜토리얼에서 heat me로 health값을 바꾸고, Next Scan을 해주자. Ne..

☞ START!! 먼저, Open process를 통해서 튜토리얼 프로세스를 치트 엔진에 붙혀야한다. 밑에 초록색으로 보이는 아이콘을 누르거나, File > Open process 를 누르면 된다. 누르면 현재 컴퓨터에서 실행 중인 프로세스 목록들이 다 뜬다. (애플리케이션, 프로세스, 윈도우) 살짝 당황했던게 카카오톡 단톡방 이름들도 떠서 놀랬다 ㅋㅋㅋㅋ 어쨌든, 튜토리얼에 해당하는 프로세스를 눌러서 open을 하면 된다. 그리고 튜토리얼에서 Next 버튼을 누르면 끝!

* Background 퍼징 기술들은 독립적인 경우가 많아서, 기술들을 결합하는데 많은 시간이 걸린다. 기술을 결합하면 타겟에 대한 버그를 기본 설정을 유지한채로 더 빨리 찾을 수 있다. 하지만, 이렇게 결합된 새로운 도구를 평가하기는 어렵고, 퍼징 끼리 호환이 가능하지 못할 수도 있다. 이런 문제의 solution의 open source은 AFL++이다. AFL++은 최근의 퍼징 연구들을 하나의 사용 가능한 tool로 통합하는 기술을 제안한다. -> AFL++을 사용하여 통합된 기술들에 대해 서로를 비교하며 평가할 수 있으며, 각 기술이 target에 얼마나 의존적인지를 측정할 수 있다. AFL++의 core는 AFL의 forked 버전이다. AFL을 기반으로 한 이유는, AFL의 관리가 잘 되지 않았..