게시글
질문&답변
2024.04.10
? 플레이스 홀더 문자
안녕하세요. Prepared Statement는 SQL 인젝션의 대응방법입니다. 이 방법은 아직 우회 기법은 없습니다.(물론 취약하게 코딩할 경우 제외) 만약 이 방법이 우회가 된다면 전 세계적으로 큰 이슈가 되겠죠.ㅎ 말씀하신대로, 해당 웹 서비스에서 모든 입력 값에 대해 Prepared Statement 처리를 하면 안전합니다. 그러나 Prepared Statement가 적용될 수 없는 경우도 있습니다.(이부분은 강의에서 설명을 드렸습니다.) 모든 웹 서비스의 모든 입력 값에서 Prepared Statement로 처리가 되면 모든 웹 서비스는 SQL 인젝션에 안전하기 때문에 SQL 인젝션이란 기술은 의미가 없게 됩니다. 그러나 그렇게 될 수는 없습니다. SQL 인젝션은 웹 서비스의 범주에서만 가능한 공격이 아니며 데이터베이스와 연동 되어 있는 모든 어플리케이션에서도 가능합니다. 또한 웹 서비스를 개발하는 개발자들이 경우에 따라선 Prepared Statement를 사용하지 않는 경우들도 있습니다.
- 0
- 1
- 133
질문&답변
2024.03.27
mysql case when 구문이용
mssql의 경우는 연결 연산자가 +이기 때문에 +로 가능합니다. like '%'+(case when 1=1 then 'test' else 'aaaaaa' end)+'%' mysql의 경우는 이런 구문 만들지 못합니다. concat의 경우는 title like '%' and concat(~~~~ 이런 형태만 가능하며, like '%문장%' 이안에서는 활용하지 못합니다.
- 1
- 1
- 73
질문&답변
2024.03.21
접근 제어 로직 구현 실수 관련해 질문있습니다.
일반적으로는 안전하다고 볼 수 있지만 세션이 파일로 저장되는데 웹 디렉터리 상에 있어서 웹으로 볼수있거나 DB에 저장되는데 SQL 인젝션 공격으로 세션을 탈취할 수 있거나 등... 이런 다양한 경로를 통한 잠재적 위협은 존재합니다. JWT 경우도 안전하게 설계를 한다면 안전하다고 볼 수 있구요.
- 1
- 1
- 50
질문&답변
2024.03.21
섹션 1 5번째 강의 질문
UNION 구문 없이 단독 SELECT 구문으로 두개의 컬럼 1,2를 반환을 하게 되면 두개의 컬럼이 반환되기 때문에 구문 에러가 발생되게 됩니다. 구문 에러가 발생되면 SQL 구문이 실행되지 않기 때문에 저희가 의도한 행위를 하지 못하게 됩니다. 따라서 구문 에러 없이 case when 구문을 통해 에러를 발생 시켜야 되는데 그 방법이 union을 통한 방법입니다. 이유는 구문 실행을 해야 다중 레코드인지 알 수 있기 때문 입니다.
- 1
- 1
- 59
질문&답변
2024.03.21
www.wgw.co.kr에 접속이 안됩니다.
hosts 파일 혹은 vhost 설정 다시 확인해보시고 아파치 재기동, 윈도우 재부팅을 해보실래요?
- 1
- 1
- 45
질문&답변
2024.03.21
Time-based MSSQL 질문
CASE WHEN 구문은 SELECT, UPDATE, INSERT 등의 구문 없이 단독 사용될 수 없습니다. 그러나 IF문은 SELECT 절 없이 단독 사용이 가능합니다. 그리고 WAITFOR DELAY은 SELECT 절에 사용될 수 없지만, IF 문에 사용 가능합니다. 따라서, MSSQL에서 타임베이스 공격 시 IF문 + WAITFOR DELAY 조합되서 사용이 됩니다.
- 1
- 1
- 63
질문&답변
2024.03.18
질문이 있습니다. 기존 질문 글들을 다 읽어보아도 안됩니다.
잘 해결 되었다니 다행이네요! 저도 질문 읽어보고 재기동을 안해서 그런것 같은데 라 생각했는데 그부분이었네요 ㅎㅎ
- 1
- 3
- 167
질문&답변
2024.03.18
php 버전 호환 문제
연우님, 저에게 메일 한통만 보내주세요.ㅎ
- 1
- 1
- 74
질문&답변
2024.03.18
SQL이나 XSS 실습 서버
연우님, 저에게 메일 한통만 보내주세요.ㅎ
- 1
- 2
- 107
질문&답변
2024.03.18
mysql 연결연산자 질문드립니다.
안녕하세요. 이부분을 설명할까 고민하다가 넣지 않고 스스로 풀? 과제처럼 생각하긴 했었습니다.ㅎㅎ mysql에서는 다른 dbms와는 다른 성향을 가지고 있습니다. 'test'='te'+'st' 구문을 해석해보면, mysql에서는 +는 연결 연산자가 아닌 산술 연산자 입니다. 따라서, 'te'+'st'에서 산술연산을 위해 'te'와 'st'는 숫자로 형 변환을 하려고하고 하지만 'te'와 'st' 형변환을 할 수 없기 때문에 0이 반환됩니다.('0', '1' ... 이런 문자는 형변환이 됨) 결국 0+0이 되어 결과는 0입니다. 그러면 , 'test'=0 이런 구문이 완성되는데, 여기서도 비교 연산자에서 피연산자1은 문자형, 피연산자2는 숫자형이기 때문에 우선순위가 높은 숫자형 기준으로 피연산자1은 형변환이 발생됩니다.(이부분은 규칙 같은거) 그러나 'test' 또한 형변환 실패를 하게 되여 0이 반환되어 결국 0=0 이기 때문에 참이되는 기이한(?) 결과가 반환 됩니다. 따라서 mysql에서 실습한 것이 결과가 참이 되었던 것입니다. 그러면 질문하신 mysql과 mssql을 어떻게 구분하냐? 이부분은 mssql은 'test'='te' 'st' 이렇게 요청하면 에러가 발생됩니다. 그러나 mysql은 정상 결과가 반환됩니다. 따라서 +를 통한 결과가 잘나왔다면, 공백을 통해 식별하는 방법도 있습니다. 또 다른 방법으론 len 함수를 이용하는 것 입니다. idx=100+and+len('test')=4 이렇게 요청을 했는데 참 결과가 나오면 mssql, 나오지 않으면 mysql이 됩니다. 이유는 len 함수는 mssql 함수이기 때문입니다.
- 1
- 2
- 126