第十次作业 Web应用程序安全攻防


实验要求

SEED SQL注入攻击与防御实验

我们已经创建了一个Web应用程序,并将其托管在www.SEEDLabSQLInjection.com。该Web应用程序是一个简单的员工管理应用程序。员工可以通过此Web应用程序查看和更新数据库中的个人信息。此Web应用程序主要有两个角色:管理员是特权角色,可以管理每个员工的个人资料信息。员工是一般角色,可以查看或更新自己的个人资料信息。完成以下任务:

  1. 熟悉SQL语句: 我们已经创建了一个名为Users的数据库,其中包含一个名为creditential的表。该表存储了每个员工的个人信息(例如,eid,密码,薪水,ssn等)。在此任务中,您需要使用数据库来熟悉SQL查询。
  2. 对SELECT语句的SQL注入攻击:上述Web应用存在SQL输入漏洞,任务是在不知道密码的情况下登陆该Web应用程序。
  3. 对UPDATE语句的SQL注入攻击:通过员工的更新个人界面实施UPDATE语句的SQL注入攻击。
  4. SQL对抗:修复上述SQL注入攻击漏洞。

二、SEED XSS跨站脚本攻击实验(Elgg)

为了演示攻击者可以利用XSS漏洞做什么,我们在预先构建的Ubuntu VM映像中设置了一个名为Elgg的Web应用程序。在本实验中,学生需要利用此漏洞对经过修改的Elgg发起XSS攻击,攻击的最终目的是在用户之间传播XSS蠕虫,这样,无论是谁查看的受感染用户个人资料都将被感染。

  1. 发布恶意消息,显示警报窗口:在您的Elgg配置文件中嵌入一个JavaScript程序,以便当另一个用户查看您的配置文件时,将执行JavaScript程序并显示一个警报窗口。
  2. 弹窗显示cookie信息:将cookie信息显示。
  3. 窃取受害者的cookies:将cookie发送给攻击者。
  4. 成为受害者的朋友:使用js程序加受害者为朋友,无需受害者干预,使用相关的工具了解Elgg加好友的过程。
  5. 修改受害者的信息:使用js程序使得受害者在访问Alice的页面时,资料无需干预却被修改。
  6. 编写XSS蠕虫。
  7. 对抗XSS攻击。

实验过程

SEED SQL注入攻击与防御实验

熟悉SQL语句

启动apache服务

service apache2 start

查看user表

use Users;
show tables;

查看员工信息

select * from credential;

对SELECT语句的SQL注入攻击

关闭PHP提供了自动对抗SQL注入的机制,并重启apache

vim /etc/php5/apache2/php.ini
将“magic_quotes_gpc = on”修改为“magic_quotes_gpc = off”
service apache2 restart

访问www.sqllabmysqlphpbb.com登录界面,用户名键入“admin'#”,密码为空

可以看到我们已经成功绕过登录

对UPDATE语句的SQL注入攻击

登录Alice的账号

在NickName那里输入语句

', salary='500000' where EID='10000';#

可以看到Alice的工资已经被修改

先登录Boby账号查看工资

Alice修改的界面的nickname输入语句

', salary='1' where name='Boby';#

可以看到Boby的工资已经被成功修改

SQL对抗:修复上述SQL注入攻击漏洞

将unsafe_home.php中sql处理代码修改如下。我们使用了预处理代码,然后进行了参数的绑定,绑定了用户名和hash之后的密码。又进行了结果的绑定,这个时候参数值就可以包含转义字符和定界符了。

SELECT语句代码和数据放在一起,所以容易遭受攻击。下面我们进行代码的修改。

      $sql = "SELECT id, name, eid, salary, birth, ssn, phoneNumber, address, email,nickname,Password
      FROM credential
      WHERE name= '$input_uname' and Password='$hashed_pwd'";
      if (!$result = $conn->query($sql)) {
        echo "
"; echo ""; echo "
"; die('There was an error running the query [' . $conn->error . ']\n'); echo "
"; } /* convert the select return result into array type */ $return_arr = array(); while($row = $result->fetch_assoc()){ array_push($return_arr,$row); } /* convert the array type to json format and read out*/ $json_str = json_encode($return_arr); $json_a = json_decode($json_str,true); $id = $json_a[0]['id']; $name = $json_a[0]['name']; $eid = $json_a[0]['eid']; $salary = $json_a[0]['salary']; $birth = $json_a[0]['birth']; $ssn = $json_a[0]['ssn']; $phoneNumber = $json_a[0]['phoneNumber']; $address = $json_a[0]['address']; $email = $json_a[0]['email']; $pwd = $json_a[0]['Password']; $nickname = $json_a[0]['nickname'];

当我们再次使用“Alice'#”的方式去绕过登录时,发现无法进入并且报错。

将unsafe_edit_backend.php中的代码修改为下

if($input_pwd!=''){
    // In case password field is not empty.
    $hashed_pwd = sha1($input_pwd);
    //Update the password stored in the session.
    $_SESSION['pwd']=$hashed_pwd;
    $sql = $conn->prepare("UPDATE credential SET nickname= ?,email= ?,address= ?,Password= ?,PhoneNumber= ? where ID=$id;");
    $sql->bind_param("sssss",$input_nickname,$input_email,$input_address,$hashed_pwd,$input_phonenumber);
    $sql->execute();
    $sql->close();
  }else{
    // if passowrd field is empty.
    $sql = $conn->prepare("UPDATE credential SET nickname=?,email=?,address=?,PhoneNumber=? where ID=$id;");
    $sql->bind_param("ssss",$input_nickname,$input_email,$input_address,$input_phonenumber);
    $sql->execute();
    $sql->close();
  }

当我们继续使用', salary='100' where name='Boby';#去修改Boby的工资时,发现整个字符串都被打印在了NickName中,修改工资却没有成功。

SEED XSS跨站脚本攻击实验(Elgg)

发布恶意消息,显示警报窗口

访问www.xsslabelgg.com,使用Alice的用户名alice和密码seedalice登录

点击edit profie,在Brief description中写入代码


使用Boby的账号访问Alice的主页,看到xss弹窗,攻击成功

弹窗显示cookie信息

将填入的代码改为


使用Boby的账号访问Alice的主页可以看到弹窗

窃取受害者的cookies

使用JavaScript将cookies发送到攻击者机器的5555端口


在终端中开启监听

nc -l 5555 -v

使用boby的账户登录并且查看Alice的账户profile就能够得到boby的cookie信息

成为受害者的朋友

在Alice的about me中添加Javascript代码(这里要使用edit HTML模式)


用boby访问alice的主页,boby就会自动加alice为好友。

修改受害者的信息

同样在about me中构造的js程序



用boby访问Alice的profile,即可成功修改boby的profile

编写XSS蠕虫



通过boby访问Alice的profile发现这段代码已经被成功的复制

对抗XSS攻击

我们利用管理员账户进行登录,找到Account->administration->plugins,并且找到插件HTMLawed关闭它。

查看Alice的profile,看看有没有效果了。可以看到,这个时候XSS攻击已经没有效果了,Alice中的代码被当作about me显示出来了。

心得体会

学习到了web攻击以及攻击防范的基本原理

相关