Wargame, CTF (113) 썸네일형 리스트형 LOS(rubiay)_xavis query : {$query}"; $result = @mysqli_fetch_array(mysqli_query($db,$query)); if($result['id']) echo "Hello {$result[id]}"; $_GET[pw] = addslashes($_GET[pw]); $query = "select pw from prob_xavis where id='admin' and pw='{$_GET[pw]}'"; $result = @mysqli_fetch_array(mysqli_query($db,$query)); if(($result['pw']) && ($result['pw'] == $_GET['pw'])) solve("xavis"); highlight_file(__FILE.. LOS _Dark_eyes query : {$query}"; $_GET[pw] = addslashes($_GET[pw]); $query = "select pw from prob_dark_eyes where id='admin' and pw='{$_GET[pw]}'"; $result = @mysql_fetch_array(mysql_query($query)); if(($result['pw']) && ($result['pw'] == $_GET['pw'])) solve("dark_eyes"); highlight_file(__FILE__);?>소스코드 if, case, when, sleep, benchmark가 필터링 되어있어조건문과 Time based blind injection이 불가능함error가 발생해도 error내용을 .. LOS _Iron_golem 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 LOS _Dragon query : {$query}"; $result = @mysql_fetch_array(mysql_query($query)); if($result['id']) echo "Hello {$result[id]}"; if($result['id'] == 'admin') solve("dragon"); highlight_file(__FILE__); ?>소스코드 딱히 문제 풀이에 방해될만한 필터링은 존재하지 않음하지만 쿼리문, id='guest'의 뒤가 #으로 한줄 주석으로 처리되어 있음 한줄 주석이란게 중요한데%0a는 줄바꿈으로 개행문자임그래서 한줄 주석인 #을 우회 가능query -> select id from prob_dragon where id='guest'# and pw='''and pw=''는 주.. LOS _Xavis query : {$query}"; $result = @mysql_fetch_array(mysql_query($query)); if($result['id']) echo "Hello {$result[id]}"; $_GET[pw] = addslashes($_GET[pw]); $query = "select pw from prob_xavis where id='admin' and pw='{$_GET[pw]}'"; $result = @mysql_fetch_array(mysql_query($query)); if(($result['pw']) && ($result['pw'] == $_GET['pw'])) solve("xavis"); highlight_file(__FILE__); ?>Xavis.. Basic_BOF#2 gdb로 본 함수 정보를 봐서 v5가 함수포인터로 선언되고 char형 s에 fgets로 133바이트만큼 입력을 받고 v5를 실행 입력한 값을 bof시켜 v5를 덮어서 원래의 v5가 아닌 shell함수를 실행 시켜야 하는 것 같음 fgets이후에 함수 호출하는 부분으로 v5()를 호출하는 부분인거 같음 이제 입력값으로부터 v5값의 offset을 구함 main+59에 bp를 걸고 pattern 찾기' offset = 128 잘 됨 Basic_BOF#1 char형 변수와 int형 변수를 하나 선언 int형변수값을 67305985로 초기화 fgets로 s에 45바이트만큼 입력 받음 첫 if문에서 int형 변수의 값이 변했고 -559038737가 아니면 You are on the right way 출력 두번째 if문에서 int형 변수가 정확히 -559038737이면 쉘을 실행시킴 입력은 s만 받고 int형 변수는 건드리는 부분이 없고 제목을 봐서 buffer overflow를 이용해서 입력받은 s를 넘치게해 int를 원하는 값으로 바꿔야함 gdb로보니 원하는 값은 0xdeadbeef인거 같음 일단 s에서 int형 변수까지의 거리를 구함 int형 변수의 위치는 ebp-0xc s의 위치는 ebp-0x34 0x34 - 0xc = 0x28(40byte) offse.. heap2 구조체 auth에 32바이트 name과 auth가 있음 실행 후에 fgets로 입력을 받고 'auth '면 auth이후에 값을 auth->name에 저장 'reset'이면 free(auth) 'service'면 service이후의 문자를 저장 'login'이면 auth->auth의 값이 0이아니면통과 0이면 불통 문제가 좀 애매함 UAF(Use After Free)취약점을 원하는 것 같은데 auth를 malloc할 때 auth구조체 만큼 동적할당 하는 것이 아니고 4바이트만 할당해서 딱히 free를 안해도 클리어 됨 일단 UAF는 동적할당을 한뒤에 free()를 하면 메모리에서 사라지는 것이 아님 free를 하고 같은 크기의 동적할당을 하면 free된 메모리를 씀 auth 1234로 구조체를 동적할당으로.. 이전 1 2 3 4 ··· 15 다음