일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 화이트 해커를 위한 웹 해킹의 기술
- promise메서드
- 앙버터마카롱
- graphql react native
- 잠실새내
- 운정 소바동
- 홍대 토라비
- graphql 400
- 신촌 소문난집
- graphql
- 지보싶 신촌점
- graphql with RN
- graphql mutation error
- apolloclient
- 고르드
- 금별맥주
- 홍대 예술
- useMutation error
- 비동기배열
- 예쁜술집 예술
- 화이트해커를 위한 웹 해킹의 기술
- 도그존
- typescript
- 잠실새내 도그존
- 홍대 카페 장쌤
- promise처리
- apollo react native
- 토라비
- 비동기배열처리방법
- graphql with reactnative
- Today
- Total
목록wargame 풀이 (61)
yehey's 공부 노트 \n ο(=•ω<=)ρ⌒☆
id: gate pw: gate strcpy의 BOF 취약점을 이용해서 공격을 하자 buffer를 넘치게 해서 ret 값을 쉘코드 시작 주소로 바꿔줄 것이다. 쉘코드를 환경변수에 등록해야하는데, bash 쉘을 띄우는 것 뿐만 아니라 권한 상승까지 포함한 쉘 코드를 등록해주어야 한다. \x31\xc0\xb0\x31\xcd\x80\x89\xc3\x89\xc1\x31\xc0\xb0\x46\xcd\x80\x31\xc0\x50\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\x50\x53\x89\xe1\x89\xc2\xb0\x0b\xcd\x80\x31\xc0\xb0\x01\xcd\x80 setreuid(geteuid(), getreuid()), exit(0)까지 포함시킨 쉘코..
LOS 11번 (golem) 이번에도 blind sql injection을 이용해서 문제를 해결해야한다. 정확한 pw를 알아내서 전달해야 golem이 해결된다. 이번에는 or, and, substr, =을 필터링하고 있다. 따라서 이를 우회해서 사용해야한다. or -> || and && substr mid = like, 이제 preg_match를 우회하면서 admin의 pw를 얻어내는 코드를 작성해보자 먼저 pw의 길이를 알아내고, 동시에 pw도 구해보자 import string import requests my_cookies=dict(PHPSESSID="h03l2gldvrnepic1mmqtgs0nj6") #쿠키 값 idLength=0 url="https://los.rubiya.kr/chall/golem..
18번 풀이 이번에는 대놓고 SQL injection을 이용하라고 하는 것 같다. view-source 버튼을 이용해서 해당 페이지의 소스코드를 보았다. 그 중에서도 SQL injection 공격에 필요한 부분만 가져와봤다.
17번 풀이 이번에도 소스코드를 보여주는 버튼이 없어서 F12를 눌러 페이지 코드를 확인해보았다. 우리가 입력해 전송한 pw가 unlock의 결과가 같을 때 17번 문제가 해결되는 듯 하다. unlock 변수는 직접 계산하기에는 양이 너무 많고 숫자 또한 깔끔하지 않을 것 같다. 그러니 console 창에서 계산하자. 해당 스크립트를 복사해서 계산식만 빼고는 다 지우고 전송하면 결과를 얻을 수 있다. unlock 변수에는 7809297.1이 저장된다. 따라서 pw 입력란에 7809297.1을 입력해서 전송해주면 문제가 해결된다!
14번 문제 이번에는 source code를 보는 버튼도 없고 입력란만 있다. 그래서 F12를 눌러서 페이지를 확인해보았다. 다음과 같은 페이지 코드가 나왔고 입력을 하고 click 버튼을 누르면 ck()함수가 실행된다. 이중에서 ck함수를 좀 더 분석해보았다. //ck() code function ck(){ var ul=document.URL;//해당 url을 가져와서 ul에 저장 ul=ul.indexOf(".kr");//".kr"이 처음으로 나오는 index를 ul에 저장 ul=ul*30;//ul*30을 ul에 저장 if(ul==pw.input_pwd.value) { location.href="?"+ul*pw.input_pwd.value; } //ul과 사용자 입력pw 가 같아야 함 else { al..
SELECT id FROM prob_skeleton where id='guest' and pw='{$_GET[pw]}' and 1=0; 위와 같은 SQL 쿼리문이 있다. solve 조건은 id=='admin'이기 때문에 pw에 id='guest'를 거짓으로 만들고 id를 'admin'으로 만드는 쿼리문을 입력해야한다. 하지만 pw 뒤에 1=0이 and 연산으로 더해져 있다. 1=0은 항상 거짓이기 때문에 쿼리문 전체가 거짓이 된다. 따라서 1=0을 없애주어야 하는데, 1=0이 pw 뒤에 위치하기 때문에 pw에 입력할 쿼리문의 마지막에 주석처리를 해주면 pw에 입력한 쿼리문까지만 실행되고 1=0이 주석처리될 것이다. ?pw=1'||id='admin'%23 (%23이 주석처리)
8번 풀이 (troll) id='admin' 일때 solve가 실행된다. 그런데 admin이 입력되면 HeHe를 출력하면서 solve가 실행되지 못하게 끊어낸다. 또, 작은 따옴표를 사용하지 못하게 해서 쿼리문을 수정할 수는 없다. 따라서 admin을 입력하면 안되는데,,,admin을 입력해야한다... 1번째 preg_match문에 /i는 대소문자를 구분하지 않는다는 뜻이다. 그래서 admin을 Admin으로 입력하면 preg_match에는 걸리지 않지만 id를 불러올 때에는 admin으로 인식한다. 9번 풀이 (vampire) 8번과 굉장히 유사하다. 그런데 이번에는 strtolower이 있어서 Admin이라고 입력해도 모두 소문자로 바꾸어주는 작업을 하기 때문에 같은 방법으로는 우회할 수 없다. 이번..
이번에는 or과 and를 사용하지 못하게 하고 있다. 또, SQL 쿼리문이 2개가 보이는데, 하나는 id='guest'이고, 나머지 하나는 id='admin'이다. pw를 전달하면 1번째 쿼리문을 실행하고 같은 pw 값으로 2번째 쿼리문까지 실행한다. solve는 입력한 pw와 id='admin'의 pw가 같을 때 실행되고 addslashes로 인해 쿼리문은 전달되지 않아 정확한 admin의 pw를 파라미터로 전달해야한다. id가 존재할 때 Hello+id가 화면에 출력되는 것을 이용해 Blind SQL injection 공격을 통해 admin의 pw길이와 pw를 순서대로 알아내보자 우선 admin의 pw 길이를 얻는 코드는 다음과 같다. (python) import string import reques..
id: level19 pw: swimming in pink 이번에도 hint를 읽어보자 gets 함수에는 BOF 취약점이 존재하니 이를 이용하고 이번에는 setreuid 함수가 존재하지 않는다. 즉 attackme를 실행하고 쉘을 띄워도 level19로만 실행이된다. 따라서 이번에는 setreuid 기능을 포함하고, 쉘을 띄우는 쉘 코드를 이용해야한다. setreuid+ 쉘을 띄우는 쉘 코드(47bytes): \x31\xc0\xb0\x31\xcd\x80\x89\xc3\x89\xc1\x31\xc0\xb0\x46\xcd\x80\x31\xc0\x50\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\x50\x53\x89\xe1\x89\xc2\xb0\x0b\xcd\x80\x3..
id: level18 pw: why did you do it hint를 읽었더니 attackme 파일의 코드가 나왔다. 좀 많이 길어서 주석을 달아보았당 //attackme code #include #include #include #include void shellout(void); int main() { char string[100]; int check; int x = 0; int count = 0; fd_set fds; //구조체 선언 printf("Enter your command: "); fflush(stdout);//표준 출력버퍼 비움 while(1) { if(count >= 100) printf("what are you trying to do?\n"); if(check == 0xdeadbeef..