일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |
- 백준
- tlqkf
- 파이썬
- 6566
- pwnable
- pwnable.kr
- SQLiteConstraintException
- kotlin
- cmd1
- 페니빙
- 액션바 필요없숴
- Docker
- 블록체인
- java.lang.IllegalStateException
- col -1 from CursorWindow
- 10814
- Make sure the Cursor is initialized correctly before accessing data for it.
- python
- 애너그램 그룹
- 쏘큩
- Couldn't read row 0
- 클라우드가 뭐야
- 클라우드란?
- cmd2
- 포너블
- 나이순 정렬
- Drive-By-Download
- pwable.kr
- UNIQUE constraint failed
- 코틀린
- Today
- Total
목록SECURITY/pwnable (16)
푸르미르
About 38 challenge 38번 문제는 100스코어의 비교적 낮은 스코어의 문제이다. 문제를 보면 “LOG INJECTION” 크게 적혀있고, 아래 간단한 입력 폼이 있다. login 과 admin 두개의 버튼이 존재하는데, login 은 폼의 submit 을 요청하고, admin은 페이지를 admin.php 로 리다이렉트 한다. 리다이렉트 된 페이지에서는 “log” 라는 짧은 메세지가 페이지에 출력되어있다. 이 후, 다시 이전 폼으로 돌아와서, 테스트 용도로 hax0r 이라 입력을 해보았다. 이 후, 다시 log 가 존재하는 페이지로 이동하니, 아래와 같은 로그가 생성되었다. log 생성 기준은 입력 시 아래와 같은 포맷으로 저장되는 것으로 유추된다. {요청 아이피}:{요청 값 = id} lo..
main 함수부터 보자. delete_env()함수를 대뜸 실행한다. 이 아이는 뭐하는 아이잉고.. delete_env()함수는 바로 위에 나와있다. 현재 저장되어있는 환경변수를 모두 삭제하는 함수인가보다. 이 함수를 실행하고 PATH 바꿔주고,, filter함수를 실행하는데, ㅎ 이 함수는 cmd1에서 했던 filter에서 조금 더 추가된 모습을 하고있다. strstr()함수를 통해 "=", "PATH", "export", "/", "`", "flag" 문자열들의 존재를 확인한다. 일단 cmd1에서 했던 방법에서 /bin/cat 명령어를 사용하여 flag를 조회하였는데, 여기 cmd2에서는 '/'이 필터링이 되기 때문에 불가능하다. 그럼 어떻게 하란말이야!!!!!!!!!!!!!!!!!!!!!!!!!!!..
cmd1.c 의 코드를 잘 살펴보겠다. main함수부터 보면, PATH를 /thankyouverymuch로 설정한다. 그리고 filter함수를 argv[1]인 아이를 매개변수로 전해주며 실행한다. 이 filter함수의 결과가 true(1)이면 프로그램 종료가 되고 그렇지 않으면(false, 0) system( argv[1] ); 명령을 실행한 후 프로그램 종료가 된다. 그렇다면 filter함수는 뭐하는 함수인가? filter함수에서, strstr함수는 매개변수로 들어온 아이(문자열)에서 "flag", "sh", "tmp" 이 3개의 문자열이 있을 경우 인덱스의 값을 리턴하지만, 존재하지 않을 경우, null갑을 리턴해주는 함수이다. 그런데 이 strstr함수의 리턴값이 0과 다를 경우, 즉 주어진 문자열..
cat lotto.c 중요한것은 play함수인데 눈빠지도록 play함수 코드를 살펴보자^^. 또 //calculate lotto score주석 이후의 코드를 보면, 루프문이 36번 돌게되는데, lotto[i]의 값이 submit[j]의 값과 같으면 match값이 1씩 올라간다. match값이 6이 될 경우 플래그가 출력된다. 만약 내가 submit배열에 111111을 넣으면 lotto배열에 1이 한개라도 있을 경우 match값이 6이 될 것이다. 로또 번호 하나만 맞추면 바로 끝나는 게임인듯하다. 일단 로또 번호를 int형이 아닌 char로 받는것이 이상하다. 무슨 연관이있을까? 구글링을 해보니 아스키 코드가 연관되어있는 것을 확인하였다. 내가 만약 1을 입력했을 경우 char로 인식되어지기 때문에 아스..
난 저번 문제 coin1도 못풀었는데,,... 일단 주어진 url로 들어가 코드를 확인해보자. cboard.cprogramming.com/c-programming/114023-simple-blackjack-program.html 호기롭게 rules를 보는것을 생략하고 1누르고 바로 play. 역시안되겠군! 룰을 보자. 오,,,..^^ 카톡으로 강습받고 다시 왔다. 오 이겼다. 재밌다. 그만하고싶다. 그런데 도대체 뭐가 문제지? 하고 배팅보다 훨신 큰 돈을 배팅해보았다. 내가 갖고있는 돈보다 큰 돈인 $1000000000000을 입력했는데 별 말이 없다...! 다시 게임한다고 했더니 나보고 이렇게 말한다. 나 이겼는데? 너가 파산이잖아 돈ㄴ내놔 이개자식아 아무래도 이상하다. 주어진 링크에서 코드 보는데 눈..
ssh로 접속하는 문제가 아니다. nc로 접속해보겠다. 게임을 하자고 한다. 하기싫ㄷ 0 ~ N 범위의 동전에서 무게가 9인 가짜 동전을 찾는 문제였다. 정상적인 동전은 10의 무게를 가지고 있고 0~N 범위에서 무게가 9인 동전을 찾으면 문제를 해결하는 방식으로 되어있었다. 총 C번까지 시도 이후에 답을 입력하면 문제가 해결되었고 총 100개의 문제를 해결하게 되면 reward를 준다고 되어있었다. (해석은 dongdd.tistory.com/145 블로그) 흠 색다르다. 조금만 더 생각해보고 그때 블로그 글을 다시 수정하여 작성하도록 하겠다.
접속 후 cat shellcode.c setresuid는 set real effective saved user id를 뜻하고 setresgid는 set real effective saved group id를 의미한다. system("/home/shellshock/bash -c 'echo shock_me'"); 이 코드는 /home/shellshock/bash 를 실행하고 'echo shock_me' 하라는 뜻 shellshock라는 공격 기법은 이번에 처음 알았는데, 알아보니까 환경변수에 코드를 삽입하여 예상치 못한 행위를 하는 공격 기법이다. 그래서 환경변수를 등록하여보자. x라는 환경변수를 등록 후 그 환경변수의 값을 출력해보았다. 환경변수의 값을 출력할 때 printenv를 사용하지 않고 x만 입력..
mistake.c 코드를 보자. main함수에서는 먼저 file discriptor로 보이는 변수를 선언해주고, open 함수의 반환값인 fd와 0을 비교하는 것 같다. 하지만 연산자 우선순위로 인해 open함수의 return값과 0을 비교한 뒤, 이 결과를 고려한 값이 fd에 들어가는 것으로 된다. 왜냐하면 비교연산자인 '
leg.c 파일을 함 보자 scanf를 사용해 key 값을 입력하고, 그 key값이 key1()+key2()+key3()과 동일하면, flag 파일이 open 되는 형식이다. 뜯어서 보자. c코드를 보았을 때, mov명령을 통해 pc값을 r3에 넣는 것을 확인 할 수 있다. 디스어셈블 코드를 보았을 때, mov를 통해 r3에 pc값을 넣은 후 r0에 r3값을 넣는 것을 확인 할 수 있다. 그렇다면 pc란 무엇일 까. pc는 레지스터 중 하나로 다음 인출될 명령어의 주소를 갖고 있는 아이이다. cpu는 하나의 명령을 실행할 때 다으마과 같은 과정을 거친다. 1. fetch - 메모리에서 명령어를 가져온다. 2. decode - 명령어 읽기 및 해독, 레지스터를 읽는다. 3. excute - 연산 수행, 주..
cat input.c 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 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 #include #include #include #include #include int main(int argc, char* argv[], char* envp[]){ printf("Welcome to pwnable.kr\n"); printf("Let's see if you know how to give input to program\n"..