20211918-晋伊甲-2021-2022(2)《网络攻防实践》第十次实践

一、实践内容

  • 什么是sql注入呢?
    所谓SQL注入,就是通过把SQL命令插入到Web表单递交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令,比如先前的很多影视网站泄露VIP会员密码大多就是通过WEB表单递交查询字符暴出的,这类表单特别容易受到SQL注入式攻击.当应用程序使用输入内容来构造动态sql语句以访问数据库时,会发生sql注入攻击。如果代码使用存储过程,而这些存储过程作为包含未筛选的用户输入的字符串来传递,也会发生sql注入。 黑客通过SQL注入攻击可以拿到网站数据库的访问权限,之后他们就可以拿到网站数据库中所有的数据,恶意的黑客可以通过SQL注入功能篡改数据库中的数据甚至会把数据库中的数据毁坏掉。做为网络开发者的你对这种黑客行为恨之入骨,当然也有必要了解一下SQL注入这种功能方式的原理并学会如何通过代码来保护自己的网站数据库
  • sql注入产生原因
    sql注入攻击是利用是指利用设计上的漏洞,在目标服务器上运行Sql语句以及进行其他方式的攻击,动态生成Sql语句时没有对用户输入的数据进行验证是Sql注入攻击得逞的主要原因。对于Java数据库连接JDBC而言,SQL注入攻击只对Statement有效,对PreparedStatement是无效的,这是因为PreparedStatement不允许在不同的插入时间改变查询的逻辑结构。
    如验证用户是否存在的SQL语句为:
    用户名'and pswd='密码
    如果在用户名字段中输入: 'or 1=1或是在密码字段中输入:'or 1=1

将绕过验证,但这种手段只对只对Statement有效,对PreparedStatement无效。相对Statement有以下优点:
1.防注入攻击
2.多次运行速度快
3.防止数据库缓冲区溢出
4.代码的可读性可维护性好
这四点使得PreparedStatement成为访问数据库的语句对象的首选,缺点是灵活性不够好,有些场合还是必须使用Statement。

  • sql注入原理
    SQL注射能使攻击者绕过认证机制,完全控制远程服务器上的数据库。 SQL是结构化查询语言的简称,它是访问数据库的事实标准。目前,大多数Web应用都使用SQL数据库来存放应用程序的数据。几乎所有的Web应用在后台 都使用某种SQL数据库。跟大多数语言一样,SQL语法允许数据库命令和用户数据混杂在一起的。如果开发人员不细心的话,用户数据就有可能被解释成命令, 这样的话,远程用户就不仅能向Web应用输入数据,而且还可以在数据库上执行任意命令了。

SQL注入式攻击的主要形式有两种。一是直接将代码插入到与SQL命令串联在一起并使得其以执行的用户输入变量。上面笔者举的例子就是采用了这种方法。由于其直接与SQL语句捆绑,故也被称为直接注入式攻击法。二是一种间接的攻击方法,它将恶意代码注入要在表中存储或者作为原书据存储的字符串。在存储的字符串中会连接到一个动态的SQL命令中,以执行一些恶意的SQL代码。注入过程的工作方式是提前终止文本字符串,然后追加一个新的命令。如以直接注入式攻击为例。就是在用户输入变量的时候,先用一个分号结束当前的语句。然后再插入一个恶意SQL语句即可。由于插入的命令可能在执行前追加其他字符串,因此攻击者常常用注释标记“—”来终止注入的字符串。执行时,系统会认为此后语句位注释,故后续的文本将被忽略,不背编译与执行。

  • XSS攻击
    概念:XSS攻击是指攻击者利用网站程序对用户输入过滤不足的缺陷,输入可以显示在页面上或者对其他用户造成影响的HTML代码,从而盗取用户资料、利用用户身份进行某种动作或者对访问者进行病毒侵害的一种攻击方式。
    实质:跨站脚本攻击本质上是一种将恶意脚本嵌入到当前页面中并执行的攻击方式。通常黑客通过“HTML注入”行为篡改网页,并插入恶意JavaScript(JS)脚本,从而在用户浏览网页时控制浏览器的行为。

产生原因:网站对用户提交的数据过滤不严格,导致用户提交的数据可以修改当前页面或者插入一段脚本。

XSS攻击通常在用户访问目标网站时或者之后进行某项动作时触发并执行

根据攻击代码存在的地点、是否被服务器存储及存在的形式和效果可分三类:
反射型XSS:浏览器—服务器交互
将用户输入的数据通过URL的形式直接或未经过完善的安全过滤就在浏览器中进行输出,导致输出的数据中存在可被浏览器执行的代码数据(黑客通常需要通过诱骗或者加密变形等方式,将恶意代码的链接发送给用户,用户触发后才能攻击成功)

存储型XSS:浏览器—服务器—数据库交互(可直接产生大范围危害,具有较强的稳定性)
web应用程序将用户输入的数据信息保存在服务端的数据库或者其他文件形式中,网页进行数据查询展示时,会从数据库中获取数据内容,并将数据内容在网页中进行输出展示,只要用户访问具有XSS攻击脚本的网页时,就会触发攻击

  • SEED SQL注入攻击与防御实验
    我们已经创建了一个Web应用程序,并将其托管在www.SEEDLabSQLInjection.com。该Web应用程序是一个简单的员工管理应用程序。员工可以通过此Web应用程序查看和更新数据库中的个人信息。此Web应用程序主要有两个角色:管理员是特权角色,可以管理每个员工的个人资料信息。员工是一般角色,可以查看或更新自己的个人资料信息。完成以下任务:
    熟悉SQL语句: 我们已经创建了一个名为Users的数据库,其中包含一个名为creditential的表。该表存储了每个员工的个人信息(例如,eid,密码,薪水,ssn等)。在此任务中,您需要使用数据库来熟悉SQL查询。
    • 对SELECT语句的SQL注入攻击:上述Web应用存在SQL输入漏洞,任务是在不知道密码的情况下登陆该Web应用程序。
    • 对UPDATE语句的SQL注入攻击:通过员工的更新个人界面实施UPDATE语句的SQL注入攻击。
    • SQL对抗:修复上述SQL注入攻击漏洞。
    SEED XSS跨站脚本攻击实验(Elgg)
    为了演示攻击者可以利用XSS漏洞做什么,我们在预先构建的Ubuntu VM映像中设置了一个名为Elgg的Web应用程序。在本实验中,学生需要利用此漏洞对经过修改的Elgg发起XSS攻击,攻击的最终目的是在用户之间传播XSS蠕虫,这样,无论是谁查看的受感染用户个人资料都将被感染。
    • 发布恶意消息,显示警报窗口:在您的Elgg配置文件中嵌入一个JavaScript程序,以便当另一个用户查看您的配置文件时,将执行JavaScript程序并显示一个警报窗口。
    • 弹窗显示cookie信息:将cookie信息显示。
    • 窃取受害者的cookies:将cookie发送给攻击者。
    • 成为受害者的朋友:使用js程序加受害者为朋友,无需受害者干预,使用相关的工具了解Elgg加好友的过程。
    • 修改受害者的信息:使用js程序使得受害者在访问Alice的页面时,资料无需干预却被修改。
    • 编写XSS蠕虫。
    • 对抗XSS攻击。

二、实践过程

  • SEED SQL注入攻击与防御实验
    先打开MySQL

    选择库,之后查询所有表



    打开网站 SEEDLabSQLInjection.com,其对应的文件地址在/var/www/SQLInjection
    通过vim查看对应的原代码:

    vim /var/www/SQLInjection/unsafe_home.php
    $input_uname = $_GET[’username’];
    $input_pwd = $_GET[’Password’];
    $input_uname = sha1($input_pwd);
    $sql = "SELECT id, name, eid, salary, birth, ssn, address, email, nickname, Password FROM credential WHERE name= ’$input_uname’ and Password=’$hashed_pwd’";
    $result = $conn -> query($sql);
    if(id != NULL) {
    if(name==’admin’) {
    return All employees information;
    } else if (name !=NULL){
    return employee information;
    }
    } else {
    Authentication Fails;
    }
    其中,查询的逻辑语句是:
    SELECT id, name, eid, salary, birth, ssn, address, email,nickname,Password FROM credential WHERE name= ’$input_uname’ and Password=’$hashed_pwd’
    那么如果将其中的用户名改为Admin'#,密码改为任意值,这个查询语句就会变为:
    SELECT id, name, eid, salary, birth, ssn, address, email, nickname, Password FROM credential WHERE name= 'Admin' #''and Password='$hashed_pwd'

那么之后用户名输入:Admin‘#,密码随便输入,可以登录:

之后在命令行使用curl,来进行登录操作:
curl http://www.seedlabsqlinjection.com/unsafe_home.php?username=Admin'%23&Password=balabala
返回截图如下,攻击成功

之后以Alice为例,用“Alice’#”登录
在NickName这一栏里输入命令:salary='123' where EID='10000';#,直接就修改了工资.攻击成功

  • SEED XSS攻击实验
    访问目标网站:http://www.xsslabelgg.com 其中,用户名:alice,密码为 seedalice。

    发布恶意消息,显示警报窗口
    点击 Edit profile,在 brief description中输入如下代码:
    然后保存,出现警告。

    从受害者的机器上“窃取”Cookie
    输入代码:
    (本地seed的地址) 5678端口号

    成为受害者朋友
    点击:add friend添加朋友,并通过HTTP Header Live查看发送的数据内容

    可以看到请求的方式是POST,请求的地址:http://www.xsslabelgg.com/action/friends/add。
    所以可通过改编出如下的代码,以用于xss攻击自动添加好友),放到about me中

    修改受害者主页
    同上,需要知道修改简介会发送什么资源数据,因此点击Edit profile,并同时使用HTTP Header Live查看数据包。

    改编如下代码,自动攻击添加好友:
    再用bob去访问Alice,发现不行了:

    编写XSS蠕虫
    去看Bob,攻击成功

三、实验中遇到的问题及解决

原来的Ubuntu虚拟机没有User表;
通过vim /var/www/SQLInjection/unsafe_edit_backend.php语句,查看其源代码。其中的逻辑语句
SELECT id, name, eid, salary, birth, ssn, address, email,nickname,Password FROM credential WHERE name= ’$input_uname’ and Password=’$hashed_pwd’
原本的逻辑语句是存在问题的,原本的SELECT id并不全,不能跑通,后来补全后就行了。

四、实验感悟

通过本次实验,我又掌握了许多很实用的网络攻防技巧。

posted @ 2022-05-22 23:00  20211918-晋伊甲  阅读(33)  评论(0编辑  收藏  举报