전체 글 173

Codegate 2014 Nuclear

꽤 오래 걸렸던 문제 이 문제도 소켓이다. 1129번 포트(?)로 소켓을 연다 취약점 찾는데 좀 노하우(?)가 생긴 것 같다. recv나 scanf함수 같은걸 Xref해서 찾으면 빨리 찾더라. 취약점은 정말 금방 찾았다. start_routine 함수에서 buf는 ebp-0x20c에 있는데, 1298만큼 받으니까 바로 터진다. dummy 0x20c + 4 + eip이다. 그런데 fd까지 덮히므로, "Sorry.. we can't..." 문자열을 출력하기 위해 익스할 때는 fd를 4로 맞춰서 했다. 저 취약점을 트리거 하기 위해서는 메뉴에서 launch를 입력하면 되고, strcmp로 passcode와 cmd를 또 비교한다. 그렇다. 까나리가 없는 대신 passcode를 릭해야 하는 것이다. 어떻게 릭할지..

write-up/pwnable 2018.08.14

Codegate 2014 Angrydoraemon

까나리랑 NX가 걸려있다. 아래는 메뉴이다. 취약점은 4번 메뉴에서 터진다 y를 입력하면 sprintf와 write로 buf를 출력해주지만... 여기서 까나리 릭이 가능하다. buf는 0xa (10)바이트 이므로, buf에 "y" + "A"*9를 sendline으로 보내주면 까나리 마지막 바이트가 0x0a로 덮히고, 릭이 되고, smashing the stack이 발생한다. 그리고 다시 접속해서 "y" + "A"*9 + canary + "B"*0xc + EIP를 주면 EIP가 덮힌다. 이 문제도 소켓이므로.... 리버스 쉘을 따야한다. buf_global이 bss이고 크기가 넉넉하므로 여기를 이용하기로 한다. 1. read로 "sh >&4 0&4 0

write-up/pwnable 2018.08.09

Codegate 2017 babypwn

까나리랑 NX가 걸려있다. v2에서 스캔(recv)를 받으면서 취약점이 터진다.그런데 v3에 까나리가 있다.바로 다음줄에 puts가 있으므로 까나리 릭이 가능하다. "A"*28 넣고 sendline으로 보내면 0x0a까지 들어가므로, 까나리 한 바이트를 덮는다. 그러면 릭이 가능하다(널을 만날 때 까지 출력하므로)0x0a까지 넣어서 까나리 한 바이트를 덮는 것은... 까나리가 00으로 끝나기 때문에, 딱 v2의 크기인 28바이트만 넣으면 까나리 출력이 안 된다. 그런데 바이너리에 서비스(?)로 system함수의 plt가 있다. 까나리 맞추고 더미 준 다음에 bss에 "/bin/sh\x00" 올리고 system 불러주면 뚝-딱인데, 이 바이너리는 socket을 여는 바이너리이다...이렇게하면 서버에서 쉘이..

write-up/pwnable 2018.08.09

from 절에서 Injection으로 데이터 추출

select no, id from table 뭐 대충 이런 쿼리다 치고, table 부분에 인젝션이 가능하다고 하면 아래와 같은 쿼리로 데이터를 뽑아올 수 있다. (서브쿼리 이용) select no, id from (select no, pw id from table) a 서브쿼리의 결과도 테이블이므로, 이 테이블을 대상으로 select 하는 것 같다.alias는 테이블명 맞춰주기 위한 것이고 관련 문제 : http://websec.fr/level11/index.php 신기방기~

웹/SQLi 2018.07.28