2019/12
[pwnable.xyz] add write up
[pwnable.xyz] add write up
2019.12.28pwnable.xyz 세번째 문제 add 이다. 실행하면 인자 3개를 받고 어떤 값을 출력한다. 필자가 만든 명령어로 elf 파일 안에 사용자 정의 함수 list 를 보면 총 4개가 있는 것을 볼 수 있다. 그 중 main과 win 함수가 눈에 띄인다. ubuntu:~/environment/ctf/pwnable.xyz/03_add $ func challenge b handler b main b setup b win ubuntu:~/environment/ctf/pwnable.xyz/03_add $ (elf 파일에 사용자 정의 함수 출력하기) [Find user defined functions] elf에 사용자 정의 함수 찾기 CTF 문제를 풀때 ELF 파일을 GDB로 분석할 때가 있는데, 어떤 사용자 정의..
[pwnable.xyz] sub write up
[pwnable.xyz] sub write up
2019.12.28pwnable.xyz 두번째 문제 sub 이다. 바이너리 파일을 다운 받은 뒤 실행하면 아래와 같이 동작하는 것을 볼 수 있다. ubuntu:~/environment/ctf/pwnable.xyz/02_sub $ ./challenge 1337 input: 1 1 ubuntu:~/environment/ctf/pwnable.xyz/02_sub $ ./challenge 1337 input: 1337 1337 ubuntu:~/environment/ctf/pwnable.xyz/02_sub $ 이 바이너리에 main 함수 및 사용자 정의 함수의 존재 여부를 확인하기 위해 필자가 만들어 놓은 명령어로 확인해 보면, main 함수 및 사용자 정의 함수가 존재하지 않는 것을 볼 수 있다. ubuntu:~/environme..
[Find user defined functions] elf에 사용자 정의 함수 찾기
[Find user defined functions] elf에 사용자 정의 함수 찾기
2019.12.27CTF 문제를 풀때 ELF 파일을 GDB로 분석할 때가 있는데, 어떤 사용자 정의 함수들이 있는지 알기 위해서 objdump 명령어를 사용하는 경우가 있다. objdump 명령어를 이용하면 간략하게 볼 수 없기 때문에 이를 간략하게 보기위해 c로 만들어 보았다. #include #include char *str_replace(char *orig, char *rep, char *with) { char *result; // the return string char *ins; // the next insert point char *tmp; // varies int len_rep; // length of rep (the string to remove) int len_with; // length of with (..
[pwnable.xyz] Welcome write up
[pwnable.xyz] Welcome write up
2019.12.26pwnable.xyz 사이트의 첫번째 문제 Welcome 문제이다, Excute 우선 실행해보면 아래 처럼 출력이 되는 것을 볼 수 있다. ubuntu:~/environment/ctf/pwnable.xyz/01_welcome/image/challenge $ ./challenge Welcome. Leak: 0x7fb7e0f42010 Length of your message: 1 Enter your message: 1 Analyze peda-gdb로 이번 문제를 분석해보겠다. main 함수를 보려고 하니 찾을 수가 없다. 리눅스에서 main 함수의 주소를 찾기 위해서는 __libc_start_main 에 대해서 알아야 한다. main 함수 찾기 아래 사이트를 보면 설명이 잘 되어 있다. main startu..
[PHP] How To Prevent SQL injection attack via secure code
[PHP] How To Prevent SQL injection attack via secure code
2019.12.08php언어를 통해 SQL injection 공격을 막기 위해 안전한 코드를 짜야한다. 우선 mysqli 함수를 통해 DB에 접근하기 위한 코드는 아래와 같다. 위 코드를 db.php 파일이라고 정의하고, 이 파일을 include 하여 사용한다. mysqli의 PDO는 prepare라는 함수를 가지고 있다. 이것을 이용하여 안전하게 DB에 접근하여 값을 가져오거나 등등의 작업을 할 수 있다. INSERT 아래 예제는 user라는 테이블에 id와 pw를 Insert 하는 과정을 나타낸 것이다. 우선 $mysqli 변수를 쓰기 위해 db.php 파일을 include 하고 prepare 함수를 사용한다. 만약 prepare 함수에서 query에 에러 발생 시 $mysqli->error를 통해 에러를 출력한다. ..
[PHP] password_hash와 password_verify로 패스워드 안전하게 관리하기
[PHP] password_hash와 password_verify로 패스워드 안전하게 관리하기
2019.12.08DB에 패스워드를 안전하게 저장하기 위해서는 단방향 해시 함수를 사용하게 된다. 이유는 DB가 외부로 유출 되었을 때, 패스워드의 평문을 알아내기 어렵게 하기 위해서 이다. php에서 사용자의 패스워드를 해시 해주는 password_hash() 함수와, 사용자가 입력한 패스워드랑 해시된 패스워드를 비교해주는 password_verify() 함수가 있다. password_hash() password_hash()는 2개의 인자가 필요하다. 첫번재 인자는 해시할 패스워드, 두번째는 암호 알고리즘이다. Return 값은 해시 과정에서 에러 발생 시 false, 성공하면 문자열의 해시 값을 준다. password_hash ( string $password , int $algo [, array $options ] ..