Layer7(27)
-
SQL Injection II
전 SQL 인젝션 관련 글 Lord of SQL Injection - Darkknight ?no=0 or length(pw) like 8 length(pw)로 패스워드의 길이를 알아냈다. ascii와 substr을 필터링하고 있다. ?no=0 or id like \"admin\" %26%26 ord(mid(pw, {str(i)}, 1)) like {str(j)}-- - id가 admin이면서 pw에서 i번째 문자를 mid(substr)해서 ord(ascii)로 바꾼 뒤 j와 비교한다. substr 대신에 mid, ascii 대신에 ord를 쓰면 된다. Lord of SQL Injection - Bugbear substr, ascii, =, or, and, 공백, 싱글쿼터 모두 필터링하고 있다. subst..
2021.08.29 -
JavaScript, PHP
Webhacking.kr - 14 검은 화면에 입력란과 버튼 하나밖에 없다. 개발자 도구를 열어서 (F12) 소스코드를 살펴봤다. 입력란의 이름은 input_pwd로, 특정 문자열을 넣어야 할 것이다. 버튼의 속성으로는 onclick="ck()"가 쓰여있는데, 이는 버튼을 클릭했을 시 웹 페이지에 있는 자바스크립트 소스 코드 내에서의 ck 함수를 실행한다는 것이다. ck() 함수를 태그 밑에 찾아보았다. 아래와 같이 생겼다. ul이라는 변수에 페이지의 url을 저장한 뒤 url에서 .kr의 인덱스 번호를 찾는다. 즉 url이
2021.08.27 -
SSRF, HTTP Request Smuggling
SSRF 우리가 보내는 요청을 서버에서 특정 IP에서만 접속이 가능하도록 IP 필터링하여 지정된 페이지에 서버에서만 접근할 수 있도록 제한할 수 있다. 이때 IP를 우회하여 요청을 보내는 기법이 Server Side Request Forgery (SSRF) 취약점이다. 우리가 서버에게 요청을 보내게 되는데, 그 요청에서 서버가 다른 내부 서버 내의 파일이나 데이터를 가져오는 등 내부 서버를 이용한다. 즉, 조직 내부적으로 사용하는 서버의 경우 보안상의 이유로 IP 필터링과 같이 외부에서의 접근을 막아놓는 경우가 많다. 일반 사용자는 웹 서버에만 접근이 허용되는 경우가 많다. 정상적인 경우에는 Internal Server에 요청을 못 보내지만, 내부 서버에 접속이 가능한 웹 서버를 이용할 수 있다. 일반 ..
2021.08.23 -
SQL Injection
Dreamhack - simple_sqli POST로 userid와 userpassword를 파라미터로 받는다. userid가 admin이면 플래그를 리턴해 준다. 따라서 userid로 admin"--를 주게 되면 admin이 쿼리문이 다음과 같이 구성이 된다: select * from users where userid="admin"--"and userpassword="123" userpassword 부분이 주석 처리되므로 userpassword에 아무 값이나 넣는다. 프록시로 로그인 요청을 잡은 뒤 위와 같이 파라미터를 변조한다. 플래그가 나오는 것을 볼 수 있다. Lord of SQLI - Vampire str_replace 함수의 취약점을 이용한 문제다. admin이라는 스트링이 발견되면 ""로 치..
2021.08.18 -
XSS, CSRF, Command Injection
Dreamhack - XSS-2 페이지를 로딩했을 때 위와 같이 vuln, memo, flag라는 세 페이지가 있다. vuln 페이지에 가보면 파라미터로 태그가 전달되는 것을 볼 수 있으나 alert 창이 뜨지 않아 script가 실행되지 않은 모습을 볼 수 있다. 이때, 태그를 필터링하고 있다고 생각해볼 수 있다. 즉, vuln 페이지에서 XSS를 터뜨리면 된다. 이때 vuln으로 요청을 보내려면 flag 페이지를 이용해서 요청을 보내야 한다. check_xss 함수를 실행할 때 Cookie로 플래그를 넘겨주는 것을 볼 수 있다. check_xss에서는 read_url로 넘겨주고, read_url에서는 아래와 같이 처리한다: 즉, 플래그가 담겼지만 미사용 중인 Cookie 값을 Cookie로 설정한다...
2021.08.11 -
Proxy, Cookie
Dreamhack - Cookie login 페이지로 이동했다. 문제 파일에 두 계정이 주어져 있다. admin과 guest라는 계정이 있는 것을 볼 수 있다. guest라는 사용자는 guest를 비밀번호로 사용하고 있고, admin이라는 사용자는 우리가 모르는 웹 서버에만 존재하는 실제 플래그 값을 비밀번호로 한다. 그러나 우리는 이 플래그 값을 얻으려면 admin으로 로그인되어 있어야 한다. guest - guest 계정으로 로그인을 시도해 본다. 버프 스위트 프록시에 Intercept 기능을 켜서 웹 서버로 보내지는 요청을 가로채서 볼 수 있다. 로그인을 시도하면 아래 사진과 같이 두 개의 요청이 보내진다. 첫 번째 요청에는 사용자가 입력한 아이디와 비밀번호를 전달하고 있고, 두 번째 요청은 겉보기..
2021.08.09 -
Digital Forensic - Network
CTFD - DefCoN#22 #1 SMB 프로토콜로 보내진 파일들을 저장했다. 압축을 풀었다. %5cdocuments/Documents/Enter the WuTang 경로 내에서 track6.docx 파일을 열어봤다. 아래와 같이 내용이 base64로 인코딩된 것을 볼 수 있다. base64를 디코딩하여 문제에 대한 해답을 찾을 수 있었다. CTFD - DefCoN#22 #2 IRC 프로토콜로 보내진 패킷들을 TCP Stream으로 봤다. IRC 프로토콜이란, 채팅 프로그램들이 사용하는 메시지 전송 관련 프로토콜이다. 이를 분석함으로써 두 상대의 대화내용을 볼 수 있게 된다. 내용을 보니 base64로 암호화되어서 대화 내용을 base64로 복호화했다. 디코딩한 후 base32로 다시 디코딩을 해서 원..
2021.08.04 -
Buffer Overflow (Stack Canary, FSB)
Leak Stack Canary through Format String Bug Format String Bug를 이용하여 Stack Canary와 __libc_start_main을 leak 한 후 libc_base를 구하고 Stack Canary를 우회하여 RTL로 익스플로잇을 한다. Stack Canary란, 버퍼 오버플로우 공격을 막기 위해서 Buf와 RET 사이에 랜덤한 값을 심은 뒤 프로그램 실행 전과 실행 후의 상태를 비교한다. 만약 버퍼 오버플로우가 발생했을 경우 Buf부터 RET까지 모두 더미 값으로 채워지게 되어 카나리 값도 변하게 되는데, 이때 카나리 값이 실행 전과 비교해서 달라졌으면 프로그램을 강제 종료시키는 보호 기법이다. Stack smashing detected와 같이 뜨고 프로..
2021.08.02 -
Format String Bug
Exploit through Format String Bug Format String Bug를 이용하여 __libc_start_main의 주소를 leak 한 후, 이를 이용하여 libc_base를 구하고 RTL로 익스플로잇을 한다. ret addr에 있는 값을 leak 하려면 레지스터 rsi, rdx, rcx, r8, r9(5) + sfp 직전까지(0x10/8) + sfp(1) + ret(1) : %9$p 즉, %p를 했을 때 9번째 자리에 있는 것이 ret이다. (8로 나누는 이유는 스택에서 단위가 8바이트이기 때문) 실제로 %9$p를 입력했을 때 ret가 출력되는 것을 볼 수 있다. 이때 ret는 __libc_start_main이기 때문에 libc_base를 얻으려면 ret에서 __libc_start..
2021.08.01 -
Buffer Overflow (ROP)
Buffer Overflow 공격 문제 풀이 이 글은 Buffer Overflow 공격 문제를 풀이한다. 이 취약점의 원리에 관해서 Buffer Overflow 취약점 글을 참고하기 바란다. Dreamhack basic_rop_x86 system은 프로그램 실행 중에 사용되지 않은 함수이므로 PLT를 이용한 호출은 불가능하다. 따라서 이미 호출한 read함수의 주소가 GOT에 들어가 있어 write를 호출할 때 인자로 read@got를 주어 read의 주소를 leak 한다. read의 실제 주소를 얻으면 libc에서의 read의 offset만큼 빼주면 libc base를 얻을 수 있고, libc base에 system의 offset만큼 더해주면 system의 실제 주소를 얻을 수 있다. RET에 writ..
2021.07.31 -
Buffer Overflow (RTL, PLT&GOT)
Buffer Overflow 공격 문제 풀이 이 글은 Buffer Overflow 공격 문제를 풀이한다. 이 취약점의 원리에 관해서 Buffer Overflow 취약점 글을 참고하기 바란다. PLT & GOT 바이너리를 Dynamic Linking, 즉 동적 링킹을 사용한다면 함수를 실행시키기 위해 PLT와 GOT이 사용된다. 함수를 호출하게 되면 그 함수의 PLT와 GOT가 생기지만, 이 둘의 주소는 고정되어 있다. PLT는 Procedure Linking Table의 약자이며, 라이브러리에 속해 있는 함수를 호출할 때 GOT에 점프해서 함수의 실제 주소를 구한 뒤 RIP를 그 주소로 바꾸어 함수를 실행시키는 역할을 한다. PLT는 바이너리와 함수를 연결해 주는 역할을 하며 이때 GOT를 참조한다. G..
2021.07.14 -
NAT
사설 IP란, 사설 네트워크에서만 사용이 가능한 IP주소로, 인터넷에서 인식되지 않는다. 보통 학교나 집, 공공 와이파이 등에 사용된다. 사설 IP가 필요한 이유는 사실은 2015년에 이미 사용이 가능한 IPv4 주소 공간이 모두 고갈되었다. 이를 극복하기 위한 방안으로 사설 IP주소가 등장하였다. 핸드폰, 컴퓨터와 같이 전 세계에 있는 모든 전자기기에 각각 하나의 IP 주소를 부여할 수 있는 만큼의 IP 주소가 존재하지 않으므로 사설 IP를 사용해야 한다고 할 수 있다. 따라서 사설 IP를 사용하면 IP 주소의 낭비를 줄일 수 있다. 예를 들어, 학교와 같은 한정된 공간 내에서 네트워크를 구축한다고 가정하자. 교내에 있는 모든 컴퓨터에 고유한 공인 IP 주소도 부여할 수 있지만, 그렇기에는 전 세계적으..
2021.07.13