SQL Injection

복습을 하던 도중 SQLi 대응 방안 중 prepared statement에 대해 공부는 했는데 실습하는 부분을 누락시켰음을 알게 되었다. 되게 어렵거나 눈에 띄는 변화가 있는 것은 아니지만 그래도 SQL 인젝션 공격에 가장 효과적으로 대응할 수 있는 방어 대책이다 보니 그냥 넘기기는 조금 힘들다. 취약하게 사용하고 있었던 로그인 폼에서 SQL문이 들어가는 일부분을 따왔다. $query = "select * from users where username = '$username' and password='$userpass'";$result = mysqli_query($mysqli,$query);$array = mysqli_fetch_array($result);위와 같이 사용하면 사용자의 입력이 구문에 영향..
공격이 성공한다면 굉장히 막대한 피해를 입힐 수 있는 SQL 인젝션 공격. 어떻게 대응할 수 있을까? Prepared StatementSQLi 대응의 기본이자 정석인 방법이다. Prepared Statement는 원래부터 SQL 인젝션을 막기 위한 시큐어 코딩이 아니었고, 속도를 향상시키기 위해 나온 방법이었다. 일반 Statement는 DB에 요청할 때마다 쿼리를 컴파일하여 새로 생성한 후 실행하는 방식인데 이는 대량의 코드를 전부 컴파일해야 하는 성능상의 문제와 함께 공격자는 이를 이용하여 파라미터에 입력값을 조작하여 원하는 의도대로 실행되게끔 한다는 문제가 있었다.Prepared Statement는 외부의 입력값을 제외한 나머지 부분을 미리 컴파일하고 입력값만을 매개변수로 바인딩하여 쿼리를 생성한다..
WebGoat는 취약점을 테스트할 수 있는 애플리케이션이라고 한다. 이론 공부하고 실습을 여러 번 해봤으니 문제를 좀 풀고 싶어서 설치해봤다. 내 실력에 도움이 됬으면 좋겠다!! 더불어 재미도 보구 ㅎㅎ아래에서 다운 받을 수 있다. Releases · WebGoat/WebGoatWebGoat is a deliberately insecure application. Contribute to WebGoat/WebGoat development by creating an account on GitHub.github.com   2-5번 문제는 기본적인 DCL/DDL/DML 등을 묻고 있었음 -> 패쓰문제가 요구하는 것은 테이블의 모든 유저를 조회하라는 것이었다.select * from user_data where ..
Time Based SQL Injection 공격은 시간 지연을 이용하여 쿼리가 참인지 거짓인지 판별하는 공격이다. 결과는 항상 동일하게 나오므로 결과를 보고 공격의 성공 여부를 결정하는 것이 아닌 시간 지연이 되는지를 보고 성공 여부를 결정한다. 시간을 지연시키는 대표적인 함수인 sleep() 함수를 대부분 이용하여 Time Based SQLi를 시도한다.sleep 함수를 이용했을 때 참/거짓에 따른 반응 차이이다. 결과는 동일하나 참인 쿼리에서는 1초가 지연되는 모습을, 거짓인 쿼리에서는 바로 0초만에 처리해버리는 모습을 볼 수 있다. 지연이 발생하면 쿼리가 참이라는 것을 이용해 정보를 조금씩 취합한다. 과정이 Blind SQLi랑 굉장히 유사한 점이 많다.실습 과정을 넣어보려고 하였으나 캡쳐 화면으..
Blind SQLiBlind SQLi는 SQLi 취약점이 있는 곳이라면 어디서든 사용이 가능하다. 다만 그만큼 노력과 시간이 많이 들기 때문에 Union SQLi와 Error SQLi를 고려할 수 없는 상황에서 사용하는 것이 좋다. Blind SQL Injecragdo11.tistory.com이론은 이쪽 Blind SQLi는 기본적으로 노력이 꽤나 들어가는 작업이기 때문에 실수하지 않도록 조심하면서 천천히 해보자!먼저 SQLi 취약점이 있는지 확인해주고먼저 기초적인 틀을 잡아준다. 처음부터 바로 공격에 들어가는 것도 가능하지만 괄호가 많이 들어가다 보니 빠뜨리는 실수를 하기도 해서 이렇게 하는게 편하고 좋다. 조건식이 참이 아닐 때의 과정도 봐준다. 참 거짓에 따른 반응 차이를 알았으니 이제 본격적으로 ..
Blind SQLi는 SQLi 취약점이 있는 곳이라면 어디서든 사용이 가능하다. 다만 그만큼 노력과 시간이 많이 들기 때문에 Union SQLi와 Error SQLi를 고려할 수 없는 상황에서 사용하는 것이 좋다. Blind SQL InjectionBlind SQLi는 조건문의 참과 거짓에 따라 응답 결과가 다르게 나오는 것을 이용해서 정보를 조금씩 모은다. Step 1. SQL Injection Point 찾기먼저 SQL 인젝션이 있는지 없는지 조사한다. Step 2. 참과 거짓의 응답이 다른 조건문 삽입ragdo11' and ('1'='1') and '1'='1 / ragdo11' and ('1'='2') and '1'='1페이로드를 만들어 그 안에 계속 넣다보면 싱글 쿼리나 소괄호 개수가 맞..
Error Based SQLiSQL 에러가 보이는 곳에 사용하는 Error Based SQLi이다.  Error Based SQL Injection논리적 에러를 이용한 SQL 인젝션이다. or 보다는 and 구문을 사용한다.db 종류에 따라 에러를 유발하는 함수가 다르니 그때ragdo11.tistory.com이론은 위의 게시글! Error Based SQLi는 SQL 에러가 외부에서 보이는 곳에 사용할 수 있는 취약점을 이용한 공격이다. 예를 들면 이런 상황이라 할 수 있다. 아이디에 싱글 쿼터를 집어넣어봤더니 에러가 아래에 뜨는 상황이다.이를 이용하여 일부러 에러를 내면서 DB 내의 정보들을 화면에 출력시키는 방식을 Error Based SQLi의 공격 방식이라 할 수 있겠다!실습 파트에서 써봤던 up..
SQL 에러가 보이는 곳에 사용하는 Error Based SQLi이다.  Error Based SQL Injection논리적 에러를 이용한 SQL 인젝션이다. or 보다는 and 구문을 사용한다.db 종류에 따라 에러를 유발하는 함수가 다르니 그때마다 검색해서 사용한다. 예시에서 사용할 함수는 mysql/mariadb에서 사용하는 updatexml 함수이다. (extractvalue 등 사용할 함수는 많다.) Step 1. SQL Injection Point 찾기먼저 SQL 인젝션이 있는지 없는지 조사한다. Step 2. Error Based SQL Injection payload 준비ragdo11' and updatexml(null,concat(0x3a,(select 'sarabande')),null)..
ragdo11
'SQL Injection' 카테고리의 글 목록