20211917 2021-2022-2 《网络攻防实践》第十周作业
一、知识点总结
知识思维导图
- SQL注入(SQL Injection)
未完成 Web应用程序的输入验证
执行恶意指令和被攻击者植入的代码
敏感信息泄露、权限提升或未经许可访问系统
1.1 分类
按照攻击的对象,可以分为:
SQL注入攻击恶意读取、修改和操纵数据库
PHP插入或 ASP插入攻击,用于安装,执行 Webshell之类的恶意脚本
Shell注入攻击在 Web服务器上恶意地执行 OS命令
其它注入攻击: LDAP注入,邮件命令注入,空字节注入;SSI注入、 XPath注入、 XML注入、 XQuery注入等
1.2 SQL注入攻击原理
原理:通过使用不完全输入确认的 Web应用数据层的安全性缺陷,为 Web应用程序的输入参数,例如一个动态页面的输入参数、表单的输入和输出等,输入一个经过仔细设计的 SQL查询指令,以避免进行验证,这样就可以获得访问权限。
攻击方式:绕开身份验证,获取非法的使用权限;猜出后台数据库的所有信息注入可以利用数据库的存取流程进行权限提取等操作
1.3 SQL注入攻击工具
sqlmap
sqlmap是 SQL注入的自动化工具,它的主要作用是对 SQL注入的 URL进行扫描、挖掘和利用,目前已有的 SQL SQL、 MYSQL、 ORACLE、 POSTGRESQL等。SQLMAP使用了 SQL盲式推理、 SQL查询查询、堆式 SQL盲注等四种 SQL注入技术。它具有丰富的特征和选择,如:数据库指纹、列举、数据库抽取、存取目标档案;并且执行执行任意的指令以获得完整的操作权限。
SPIKE Proxy工具可以让用户自定义插入的字符串,并自动地进行 SQL注入测试。
mieliekoek.pl
以网页映象工具所产生的输出作为输入,发现包含表单的网页;允许在组态档中更改注入字串
Wposion
能够发现 SQL注入缺陷的动态 Web文档
Pangolin(穿山甲)
Pangolin是一款用于 Sql注入试验的(国产)安全软件,可以在一系列简单的操作中,使攻击测试的结果最大化。
1.4 SQL注入攻击防范措施
参数编码机制使用类型安全
所有从外部输入的用户信息都要经过完整的检验
用存储过程、预编译 SQL或 ADO命令对象替代动态 SQL语句
增强 SQL数据库服务器的组态和连接
- XSS跨站脚本攻击
2.1 XSS攻击技术原理
网络应用中有 XSS跨站脚本的缺陷,它允许攻击者将恶意 HTML或者 JavaScript代码插入到网页中,从而在用户浏览时分析并执行。因此能够获得用户敏感信息、客户端渗透攻击
执行 XSS攻击的要求有两个:
一、需要将恶意代码植入网页
二、浏览器可以顺利地执行这些恶意代码
2.2 XSS攻击类型
XSS持久弱点
缺陷类型: Web应用允许用户在页面上键入和永久地保存和显示
攻击模式:攻击者使用跨站漏洞构造恶意代码,对大量使用者造成威胁
应用: blogger/twitter/wiki/wiki等
XSS不能持续的弱点
使用者的输入将生成 XSS回馈到使用者,并与社交工程相结合。
2.3 XSS跨站攻击防范措施
服务器方面的防御——限制,拒绝,净化。
输入确认:尽可能严格地检查和筛选用户提交的数据
输出清理 HTMLEncode ()方法
排除风险的输入
客户安全
在访问未信任的站点时,增加浏览器的安全性
关闭 Cookie或将其设为唯读
加强安全意识和良好的阅读习惯
二、实验过程
设置试验环境
配置 DNS,并添加 URL,使用 sudo vim/etc/hosts
通过 sudo su命令进行权限设置/etc/apache2/站点验证/000-default.co nf
熟悉SQL
启动mysqld_safe。mysql- u root- pseedubuntu登陆 mysql控制台,用户名为 root,密码为 seedubuntu (注意,在此之前没有空格)
用户;装载用户数据库,显示;在用户数据库中查看表格
select * from credential;查看credential表中信息,包括所有用户信息(id、name、salary等信息)
实践一:SQL注入攻击
插入攻击 SELECT语句
SQL注入攻击 Web页面
SQL注入攻击命令行
插入攻击 UPDATE语句
更改个人帐户资料
更改他人帐户资料
更改他人帐户的口令
插入攻击 SELECT语句
首先,您可以在/var/www/SQLInjecton目录下对safe_home.ph p/unsafe_home.ph p. ph p. ph p. ph p文件.
SQL注入攻击 Web页面
你可以通过 firefox来访问www.SEEDLabSQLInjection.com,然后到网上查找,通过这个文档的提示, admin是一个可以被使用的已经存在的用户名称。最后使用一个单引号,用#注释的方式登陆,以验证与密码相匹配的声明,这样就可以了。
成功登录
SQL注入攻击命令行
curl是一个开放源码的文件传送工具,它使用了 URL语法,以命令行的形式运行。它在 Unix、多种 Linux发行版中得到了广泛的使用,而且有 DOS、Win32、Win64的移植版。获取网页使用这是最容易的方式
可以通过 curl来传送 HTTP请求,要求代码中的加密部分,'符号对应16进制27,#代表16进制23。
例如,登录 Alice的用户,在终端上键入 curlhttp://www.seedlabsqlinjection.com/unsafe_home.php?用户名= Alice%27%23可以看到 Alice的某些信息
如以下所示,使用 Web页面登陆,可以看出,攻击已经成功
插入攻击 UPDATE语句
攻击 UPDATE声明的结果要比 SELECT声明更糟糕,因为攻击者可能会修改数据库
根据文档的提示, PHP的一部分是在 unsafe editbackend.ph p文件中(主要参考 sql语句)
使用以上的方式登陆 Alice帐户,然后选择编辑概要文件。我们现在只知道 nickname是 Alice,其他的都不能填,所以我们用#来代替后面的句子,然后用 nickname来构建 nickname,', salary='50000' where name=' Alice';#
Sql语句
UPDATE默认 SET的名称='', salary='1' where名称=' Alice';#。email='$input_email',…
Alice的 Salary是20000,从上图可以看出,她已经修改到了50000。
用相同的方式,你可以在 Alice的账号上更改其他账号的信息,比如把 Boby的 Salary变成1;“, salary=1, where name=' Boby';#.登陆 admin帐户,查看每个人的个人资料,可以发现 Boby的 salary已经被修改了。
更离谱的是,我们可以修改 Boby的密码,让他可以登陆他的账号(Boby在工作中挣扎).同样的, nickname字段的值是', Password='522b276a356bdf39013dfabea2cd43e141ecc9e8' where Name='Boby'。
首先要用SHA1算法对密码进行加密,在声明中写入密码,然后用我们设定的口令登陆。
使用select * from credential where名称=' Boby';命令查询 Boby信息
实践二:XSS跨网站攻击
1.实践配置
配置文件部分与SQL注入攻击一起完成了
Elgg是一款很流行的开放源码 web软件,它在处理 XSS的问题时采取了很多步骤。但是在实际操作中删去了部分应对措施,使得 Elgg容易受到袭击
HTTP头 Live:实际上,你必须构建一个 HTTP要求,它可以捕捉并解析 HTTP要求。
安装 LiveHTTPHeader
点击右上方的图示,左边会出现“小工具栏”,然后选中 HTTP标题。
通过 Firefox访问http://www.xsslabelgg.com,其中包含了用户名称和口令。
发出用于显示警报视窗的恶意信息
试验步骤:将 JavaScript软件嵌入到 alice帐号中的 Elgg概要中,另外一个 Boby用户可以查看 alice的数据, JavaScript程序会被执行,并且会出现一个提示框(Boby的报复)
首先,登陆帐号,进入个人界面
选择左边的编辑概要文件,然后按照文件的提示将 XSS的攻击代码插入到 Brief描述中,即 JavaScript 《script》 alert ('xss');《/script》
单击 Save将显示一个提示框
- 发布用于显示 Cookie的恶意信息
同样地,修改的参数如下
显示一个提示框
- “窃取”受害人电脑中的 Cookie
实验步骤:上次的试验中,攻击者写了一个恶意的 JavaScript代码,它可以输出用户的 cookie,但只有使用者自己才能看到,而攻击者却看不到;该试验实现了攻击者对 cookie的捕获。具体的做法是构建一个带有恶意的 JavaScript代码,然后把它的 src属性作为攻击的对象。当 JavaScript被插入 img标签,浏览器试图从 src域中的 URL时, TTP GET请求被攻击,并且在这个请求之后添加 cookie。
下面是编辑 Brief描述, IP地址是127.0.0.1,端口号码是5555。
在 SEED (伪装成攻击者)中,通过 netcat工具来监听5555的设置,可以监听 cookie
- 成为受害者的朋友
试验步骤:为了给受害人增加一个好友,你需要知道,一个合法的使用者是怎样给 Elgg增加一个好友的。特别是,我们必须知道,当一个人加入了一个朋友之后,他会向他的服务器发送什么信息。HTTP头 Live工具可以捕捉 HTTP请求信息。当我们知道添加 friend HTTP请求的时候,你就可以编写一个发送同样 HTTP请求的恶意 Javascript程序。
以 Samy为攻击者,攻击 Alice,让 Samy成为他的朋友
首先,通过 HTTP头 Live获取 HTTP消息,从上面可以看出,该请求是 POST,请求的地址是:http://www.xsslabelgg.com/action/friends/add,后面是 friend=,&__elgg_ts=,&__elgg_token=三个参数
Samy的 friend=47、elgg_ts、 elgg token (识别)参数都来自于 WebBrower的 Console,它们分别为elgg.security.to ken._elgg ts;还有elgg.security.to ken.__elgg_token;
编写Javascript代码(alice自动添加Samy)
上面的代码应该放在 Samy的个人资料页的“About Me”中,然后用 HTML格式进行编辑,首先选定一个图案,然后粘贴(这个错误多次,询问了其他同学)。
登陆 Alice帐号,进入 Samy的个人页面(模仿受害人的行为),在 Alice的主页上,可以看到 Samy在右边的朋友名单中的照片。
有一件非常奇妙的事情,我用 Samy的身份浏览了一下我的个人页面,发现我也可以成为我的朋友了
- 修改受害者主页
实验步骤:和上次一样,受害者在登录 Samy的网站后,会对受害者的页面进行修改,了解 HTTP POST的要求,并编写恶意的 JavaScript。
当您选择编辑概要文件时,您可以利用 HTTP Header Live工具捕捉 HTTP Reader Live的内容。
编写Javascript代码(修改alice的profile)
您自己写的内容主要有三个参数:内容, senurl, samyGuid
上面的代码放在 Samy的个人资料页的 About Me中,用 HTML格式进行编辑.
- 编写 XSS蠕虫
实验步骤:以上实验中的恶意 JavaScript程序不能自行扩散,现在我们要写一条蠕虫,让其它使用者在浏览被感染的网页时,也会受到 XSS的感染。最好的办法就是把自己的蠕虫复制到受害人的个人资料里,使其成为攻击者并进行自我传播。
构建基于文字提示的蠕虫代码
➁ 在 worm当前区块中,所有的代码都是通过 innerHTML标签来获得的
③函数将字符串编码成 URI部件
将上述代码加入到上一问的代码中
首先,作为 Alice进入 Samy的个人页面,被病毒感染
作为 Boby进入 Alice的个人页面,受到蠕虫感染
三、学习中遇到的问题及解决
问题一:Apache启动错误
Apache2的引导错误,您可以根据提示打开 journalctl- xe的 bug。在000-default.co nf文件中显示错误,在配置文件中输入错误,更改后正常
问题二:更改 UPDATE声明的其它使用者口令
错误:构造 nickname域的值是',密码=' alice haha', where名称='Boby'
使用选择* from credential where名称=' Boby';命令查询 Boby信息
可见,所显示的口令为明文,而正确的输出则为SHA1加密后的密文。所以,构建指令的口令必须是经过加密的密文
四、学习感想和体会
这一章我们将会学到 SQL插入和 XSS的脚本,这是我认为最有意思的练习。这个实验的步骤是逐步进行的,它对了解的知识的原则要好于以前的练习。
在XSS实践中“自动添加朋友”的实验逻辑有点绕,想了半天才弄清楚了攻击过程(被alice\samy\boby一会登录一会访问搞晕了)
想开学了...
参考资料:
Linux mysql查询用户
网络攻防技术与实践课程11-Web应用的攻击及防御技术