반응형 전체 글87 Lord of SQL Injection : Dragon[20] [Level 20. Dragon] Sol → ?pw='%0Aand pw='' or id='admin id = 'guest' 이후에 주석이 달려있는데, id가 admin이어야 통과된다. 따라서 주석을 무효화시킬 수 있는 방법에 대해 고민해보아야 한다. [모의해킹_이론] - SQL Injection : 로그인 Case 별 인증 우회 위의 포스팅에서 로그인 로직을 케이스 별로 5가지를 살펴보았는데, 그중에 마지막 케이스가 바로 개행(Enter)을 넣어 주석을 방어하는 방식이었다. SQL Injection에서는 주석을 넣어 SQL 구문 일부를 무력화시키는 방식이 자주 사용되는데, Enter로 인해 구문이 다음 줄로 넘어간다면 이 주석은 힘을 잃게 된다. 따라서 %0A(Enter)를 통해 구문을 두 줄로 나누고,.. 2021. 12. 22. File Download 공격 ① 파일 다운로드 취약점이란? File Download 취약점은 파일 다운로드 시 사용자로부터 특정 파일 정보를 입력받지만 이 입력값을 검증하지 않을 경우에 발생할 수 있는 취약점이다. fileOpen('/upload/' + $_GET['fileName']); 위와 같이 경로와 이름을 통해 특정 파일에 접근해서 다운로드를 하는데, 이 값들을 조작한다면 임의의 파일을 다운로드할 수 있게 된다. 파일 다운로드 취약점은 파일 업로드 취약점과 공격 방식도, 대응 방안도 비슷하다. 우선 공격 대상 서버에 있는 파일을 불러오는 LFI와 비교를 해보자. LFI는 파일 경로를 조작하여 해당 서버에 있는 파일을 확인하는 공격이었는데, /etc/passwd 같은 파일이 아닌 php 코드는 include가 파일을 실행해버리.. 2021. 12. 21. Php로 웹 개발하기 : 문의 게시판(2) 문의 게시판 페이지를 만들어서 마이페이지에 연결하고, 이전 포스팅에서 만들었던 문의글 작성 기능을 문의 게시판에 연결해주자. [qna_board.php] Number Title 문의하기 2021. 12. 20. Lord of SQL Injection : Xavis[19] [Level 19. Xavis] Sol → ?pw=우왕굳 우선 BlindSQL을 사용하기 위해 자동화 코드를 돌렸고, 비밀번호의 길이는 12가 나왔다. 그런데, 비밀번호를 하나씩 구하는 코드가 잘 돌아가지 않았다. 그래서 직접 pw =' or id = 'admin' and ascii(substring(pw, 1, 1)) > 0 # 을 넣어보았는데, Hello admin이 뜨지 않았다. 잉? 그래서 < 0을 넣었는데 이것도 Hello admin이 뜨지 않았다. 혹시나 해서 = 0을 넣으니 Hello admin이 떴다. 기존에는 아스키 값을 1에서 127 사이로 제한해두었었는데, 제한을 벗어나는 값이 비밀번호에 사용된 것 같다. 그래서 최솟값을 0으로 변경하고 다시 자동화 코드를 돌려보니, 1부터 12까지 .. 2021. 12. 19. File Upload 공격(3) 두 차례에 걸쳐 File Upload 공격과 몇 가지 대응 방안의 우회 방안까지 알아보았다. 마지막으로, File Upload 공격에 대한 추가적인 내용과 LFI, RFI 그리고 근본적인 대응 방안에 대해 알아보자. ⓛ 만약 파일 업로드 기능이 없다면? 웹 페이지에 파일 업로드 기능이 없다면 File Upload 공격을 사용할 수 있을까? 결론부터 말하자면, 웹에서 해당 기능을 제공하고 있지 않더라도, 업로드 공격을 할 수 있는 방법이 있다. 웹 디렉토리 및 파일을 스캔하는 도구인 dirbuster를 사용하면 웹 서버에서 사용하고 있는 파일 이름을 찾을 수 있다. 일반적으로 로그인 페이지는 login.php, 게시판 페이지는 board.php로 이름 짓듯이, 사람들이 사용할 법한 이름을 리스트로 만들어둔.. 2021. 12. 18. Lord of SQL Injection : Nightmare[18] [Level 18. Nightmare] Sol → ?pw=')=0;%00 패스워드가 6을 넘어가면 안 되고 #도 사용할 수 없다. 하지만 #나 -- 대신 %00(null)를 사용할 수 있다. 우선 이것저것 넣어보기 시작했다. pw=')or('1는 길이가 7이라서 안된다. 그래서 일단 MySQL을 켜서 여러 가지 시도를 해보았다. or 대신 한 글자만 쓸 수 있는 연산자를 찾다가 &을 넣어보았다. 근데 ('')&('1')을 넣었더니 login_id 일부가 뜨는 것을 볼 수 있었다. 그래서 select를 사용해서 ('')&('1') 값이 무엇인지 확인해보았다. 왜 각 값을 0으로 인식하는지 궁금해서 select 문을 사용해서 ('')만 따로 출력해보았다. select로 확인해보니 ('')는 아무 값도 출력이.. 2021. 12. 17. 이전 1 2 3 4 5 6 7 ··· 15 다음