일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- Pwnable
- 드림핵
- rev-basic-1
- off_by_one_001
- sint
- CodeEngn
- rev-basic-7
- pwnable.kr
- rev-basic-6
- Dreamhack
- 코드엔진 베이직 13
- L15
- basic_exploitation_001
- rev-basic-2
- L17
- sd카드 리더기
- out_of_bound
- RCE
- L18
- rev-basic-0
- Basic
- off_by_one_000
- rev-basic-3
- coin1
- rev-basic-5
- L16
- basic_exploitation_000
- rev-basic-4
- 포너블
- 코드엔진 베이직
- Today
- Total
목록Pwnable (26)
서브웨이
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/p5Knx/btqG6fpOsMY/SvkmkOpgk0c2zzSOoK5rz1/img.png)
리눅스 터미널에서 환경변수를 조작하는 문제인가봅니다. 한번 봅시다. 평범하네요. 그럼 일단 소스코드를 봅시다. #include #include int filter(char* cmd){ int r=0; r += strstr(cmd, "flag")!=0; r += strstr(cmd, "sh")!=0; r += strstr(cmd, "tmp")!=0; return r; } int main(int argc, char* argv[], char** envp){ putenv("PATH=/thankyouverymuch"); if(filter(argv[1])) return 0; system( argv[1] ); return 0; } 매우매우 짧습니다. 빠르게 읽어봅시다. 대충 읽어보니 PATH 환경변수를 /thanky..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/bHPGda/btqGZIrJyDA/ikKGtwc7ullMOMkMqWiHP1/img.png)
프로그래밍을 공부해본 사람이라면 누구나 한번쯤은 만들어 봤을법한 로또 프로그램에 관한 문제인가보네요. 접속해봅시다. 이러한 파일들이 있습니다. 일단 소스코드 먼저 봅시다. #include #include #include #include unsigned char submit[6]; void play(){ int i; printf("Submit your 6 lotto bytes : "); fflush(stdout); int r; r = read(0, submit, 6); printf("Lotto Start!\n"); //sleep(1); // generate lotto numbers int fd = open("/dev/urandom", O_RDONLY); if(fd==-1){ printf("error. te..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/xuCyg/btqGPO69EpC/TnXRUKtJXPqL6UjhP5gSg0/img.png)
뭔가 이번에도 스크립트를 짜서 게임을 해야하는 것 같네요.... 일단 접속해봅시다. 일단 게임을 몇판 플레이 해보니 별거 없습니다. 워낙 좋아하는 게임이라 일단 처음에는 게임을 한번 즐겨보자 싶어서 해봤는데 50000달러까지 불렸었네요ㅎㅎ 그럼 한번 소스코드를 봅시다. 문제에 나온 주소로 들어가니 800줄에 가까운 코드가 나옵니다... 일단 읽어봅시다. 코드를 첨부하기엔 너무 길어서 핵심만 보여드리겠습니다. 쭈우욱 읽다보니 이상한 부분이 하나 있습니다. int betting() //Asks user amount to bet { printf("\n\nEnter Bet: $"); scanf("%d", &bet); if (bet > cash) //If player tries to bet more money t..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/ooBBj/btqGRQhJu1N/3n2u7HwYhDWZSdQvkKv9fK/img.png)
아이가 게임을 하고싶답니다. 일단 접속해보죠. 게임이 진짜 게임일 줄은 몰랐네요... 대충 읽어보니 코인중에 가짜 코인이 하나 있고 진짜코인은 무게가 10, 가짜는 무게가 9랍니다. 그래서 무게를 비교해가면서 정해진 횟수 안에 가짜코인을 찾는것을 100번 반복하는데 이것을 1분안에 해야합니다. 그냥 스크립트를 짜라는 얘기네요. 일단 해봅시다. 그냥 간단하게 반반씩 나눠가며 확인을 하면 되지 않을까 싶습니다. # coding: utf-8 from pwn import * r = remote('pwnable.kr',9007) r.recvuntil("- Ready? starting in 3 sec... -") for k in range(100): r.recvuntil("N=") num = int(r.recvun..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/UiiEh/btqGH24Ky2F/3HI3K63FfqUndWKKR937u1/img.png)
bash에 대해 뭔가 놀라운 소식이 있답니다. 참고로 bash는 쉘의 종류 중 하나 입니다. 리눅스, mac OS에서 기본으로 사용하는 쉘이기도 합니다. 일단 접속해봅시다. 이런 파일들이 있습니다. 일단 플래그와 shellshock 파일을 소유한 그룹이 shellshock_pwn으로 같다는 것을 유의하시면 됩니다. 일단 소스코드를 봅시다. #include int main(){ setresuid(getegid(), getegid(), getegid()); setresgid(getegid(), getegid(), getegid()); system("/home/shellshock/bash -c 'echo shock_me'"); return 0; } 일단 코드는 상당히 짧습니다. 먼저 setresuid는 rea..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/84k2P/btqGD9CB01V/7DmzN8DvbR4vDVC3rUDwNk/img.png)
자 읽어보니 뭔가 실수에 관한거랍니다. 힌트도 있습니다. 연산의 우선순위를 생각하라네요. 일단 접속해봅시다. 이렇게 4개의 파일이 있네요. 일단 소스코드부터 봅시다. #include #include #define PW_LEN 10 #define XORKEY 1 void xor(char* s, int len){ int i; for(i=0; i 0)){ printf("read error\n"); close(fd); return 0; } char pw_buf2[PW_LEN+1]; printf("input password : "); scanf("%10s", pw_buf2); // xor your input xor(pw_buf2, 10); if(!strncmp(pw_buf, pw_buf2, PW_LEN)){ pr..