분류 전체보기
-
[pwnable.kr][Toddler's Bottle] 6. randomWargame/pwnable.kr 2019. 7. 26. 16:51
ID: random, PW: guest로 접속한 후 파일을 확인해보니 random 파일과 flag 파일이 존재했다. random.c 파일로 소스코드를 확인해보았다. rand() 함수를 통해 생성된 난수를 random 변수에 저장하고, 사용자의 입력값을 key에 저장한다. 그리고 이 두 값을 XOR 연산한 값이 0xdeadbeef와 같으면 flag가 출력된다. rand() 함수는 난수를 생성해주는 함수이지만, 프로그램을 실행할 때마다 항상 같은 난수를 생성한다는 취약점이 있다. 따라서 rand() 함수가 생성한 난수값을 알아내면 문제가 해결될 것이다. random 값을 알아내기 위해 gdb를 실행하여 디스어셈블링해보았다. 위의 코드를 보면, rand 함수를 통해 생성된 난수는 [rbp-0x4]에 저장되고,..
-
[LOS] 19. xavis 문제 풀이Wargame/LOS (Lord of SQL Injection) 2019. 7. 24. 00:15
pw에 괄호, LIKE, regex가 필터링이 걸려있다. 또한 id는 admin으로 고정되어 있고, 이 admin에 대한 pw를 알아내면 문제가 해결된다. 먼저 pw의 길이를 length 함수를 통해 찾아본 결과, pw의 길이는 12였다. ?pw=' or length(pw)=12%23 평소 Blind SQL 인젝션 문제를 풀던 것처럼 ascii 함수와 substr 함수를 사용하여 pw를 구하려고 했으나, 아무리 프로그램을 돌려도 pw가 출력되지 않았다. 알파벳이나 숫자가 아닌 다른 문자인가 싶어서 0~9, a~z 범위 외의 다른 범위의 아스키코드 값으로도 찾아보았지만 나오지 않았다. 아무래도 알파벳, 숫자가 아닌 특수 문자가 사용된 것 같아서 pw를 hex로 변환한 값으로 비교해보았다. 먼저 hex로 변..
-
[SQL Injection] 필터링 우회 방법 모음EVI$ION/WEB HACKING 2019. 7. 22. 19:06
1. 공백 문자 우회 1) Line Feed (\n) - 커서(캐럿)를 다음 줄(현재 위치에서 바로 아래줄)로 이동시키는 개행 문자 - URL Encoding: %0a - ex) no=1%0aor%0aid='admin' 2) Tab (\t) - 커서를 한 tab만큼 이동시키는 문자 - URL Encoding: %09 - ex) no=1%09or%09id='admin' 3) Carrage Return (\r) - 커서(캐럿)를 줄의 맨 앞(왼쪽)으로 이동시키는 개행 문자 - URL Encoding: %0d - ex) no=1%0dor%0did='admin' 4) 주석 (/**/) - ex) no=1/**/or/**/id='admin' 5) 괄호 () - ex) no=(1)or(id='admin') 6) 더..
-
[LOS] 18. nightmare 문제 풀이Wargame/LOS (Lord of SQL Injection) 2019. 7. 22. 18:06
주석 처리에 사용되는 --와 #이 모두 필터링 목록에 포함되어 있다. 괄호 역시 필터링 대상인데, 특이한 것은 ()만 필터링되고 (나 )를 따로 사용하는 것은 필터링이 되지 않는다는 점이다. 또한 pw의 길이가 6보다 크면 No Hack 문구가 출력된다. 길이 제한이 있기 때문에 or 1=1과 같은 인증 우회는 사용이 불가능하다. 따라서 길이 제한을 피하고 쿼리문이 참이 되게 하려면 pw가 참이 되도록 만드는 수밖에 없다. SQL에서 문자열을 숫자와 비교할 때, 숫자 없이 문자로만 이루어진 문자열은 0으로 자동 형변환된다. 또한 select id from table where pw=1=1와 같이 쿼리문을 작성하면, 1=1은 참이므로 전체 쿼리문은 참이 되어 정상적으로 실행된다. 이러한 점들을 이용하여, ..
-
[LOS] 17. zombie_assassin 문제 풀이Wargame/LOS (Lord of SQL Injection) 2019. 7. 22. 17:41
id와 pw에 addslashes 함수와 strrev 함수가 사용되었다. addslashes 함수는 싱글 쿼터('), 더블 쿼터("), 백슬래시(\), NULL 문자를 이스케이핑해주는 함수이고, strrev 함수는 인자로 받은 문자열을 순서를 뒤집은 상태로 반환하는 함수이다. ex) strrev("abcdefg"): gfedcba strrev 함수로 인해 GET 방식으로 전달된 id와 pw는 아래와 같이 변환된다. id=admin&pw=12 또한 addslashes 함수로 인해 싱글쿼터(')나 더블쿼터(')는 이스케이핑되어 앞에 백슬래시(\)가 추가되고, strrev 함수에 의해 순서가 뒤집힌다. 따라서 싱글쿼터(')를 인자로 주면 addslashes에 의해 \'가 되고, strrev 함수에 의해 '\가..
-
[LOS] 16. succubus 문제 풀이Wargame/LOS (Lord of SQL Injection) 2019. 7. 22. 15:08
id와 pw를 입력받을 때, 둘 다 싱글 쿼터(')를 필터링한다. 이전에 싱글 쿼터(')는 더블 쿼터(")로 우회할 수 있다고 했는데, 사실 이 방법은 쌍으로 사용할 때나 먹히는 방법이다. 즉, 싱글 쿼터(')가 하나 열려있는 상태에서는 더블쿼터(")로 막을 수 없다. ('admin" 이렇게 사용할 수 없다는 뜻) 이 문제에서는 id와 pw를 동시에 입력받으므로, 이를 이용해 싱글 쿼터(')를 우회해보자. 싱글 쿼터(') 앞에 백슬래시(\)를 입력하면 싱글 쿼터(')는 문자로 인식된다. 따라서, id='' and pw='' 에서 \를 입력하면, id의 닫는 싱글 쿼터(')가 문자로 인식되어 해당 싱글 쿼터(')가 제 기능을 하지 못하게 된다. 결국 pw의 여는 싱글 쿼터(')가 id의 닫는 싱글 쿼터('..
-
[pwnable] PLT와 GOTEVI$ION/SYSTEM HACKING 2019. 7. 19. 23:07
소스코드를 컴파일하면 오브젝트 파일이 생성되고, 이를 라이브러리와 연결시키는 링킹(Linking) 작업을 통해 최종적으로 실행 파일이 생성된다. 링킹 방식에는 Static Linking과 Dynamic Linking, 2가지 방식이 존재한다. Static Linking 방식은 실행파일 내에 필요한 라이브러리 내용을 모두 포함하여 파일을 생성한다. 실행파일 내에 모든 코드가 포함되기 때문에 라이브러리를 따로 연동하고 관리할 필요가 없다. 하지만 파일의 용량이 크고, 같은 라이브러리를 사용하더라도 해당 라이브러리를 사용하는 파일들은 라이브러리 내용을 모두 메모리에 매핑시켜야한다는 단점이 있다. 반면 Dynamic Linking 방식은 공유 라이브러리를 사용하기 때문에 Static Linking 방식과 달리 ..
-
[pwnable.kr][Toddler's Bottle] 5. passcodeWargame/pwnable.kr 2019. 7. 19. 22:35
문제에서 passcode 기반의 로그인 시스템을 만들었는데, 컴파일 시에 오류는 없었지만 경고가 있었다고 한다. 아마 이 경고 때문에 로그인 시스템에 취약점이 있는 듯하다. ID: passcode, pw: guest로 로그인한 다음 파일을 확인했더니 아래와 같이 3개의 파일이 있었다. passcode 파일을 실행해보았다. 실행하면 이름을 먼저 입력하고, passcode1을 입력할 수 있다. 그런데 passcode2는 입력하라는 문구가 있는데도 입력이 되지 않고 바로 checking으로 넘어갔다. 또한 passcode1에 숫자만 입력하면 Segmentation Fault가 일어났다. 원인을 알아보기 위해 passcode.c를 확인해보았다. main에서는 먼저 welcome 함수를 통해 사용자 이름을 입력받..