dvwa之sql注入学习(不同级别)
2018-03-24 13:33
489 查看
dvwa之sql注入学习(不同级别)
级别:Low
从页面上看到,有一个可以提交查询内容的地方我们可以通过以下步骤判断这里是否存在注入点① 输入1 提交
②输入1' 提交
③输入1 and 1=1 提交
④输入1 and 1=2提交
由上可以看出是存在注入点的, 我们猜测sql查询语句是这样的: select First name的列名 and Surname的列名 from 表名 where id的列名 ='我们输入的id'
我们看一下这里的源码 果然真的是这样,没有任何过滤
<?php
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(
'<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"
]);
}
?>那么我们首先爆出它的库试试,用单引号让id闭合输入 1' union select1,database()#提交
可以看出目前使用的数据库为dvwa,接下来我们爆表试试输入 1' union select1,table_name from information_schema.tables where table_name='dvwa'#
可以看到有两个表,我们爆一下users的列,输入1' union select1,column_name from information_schema.columns where table_name='users'#
可以看出有好多的列,但是重要的应该是user列和password列,我们爆出这两列的字段内容输入 1' union select1,concat(user,password) from users#
级别:Medium SQL Injection Source
这个级别我们可以看出,这是通过一个下拉表的方式提交数据的,
而且我们提交一个数据后发现URL如下
http://localhost/DVWA-1.9/vulnerabilities/sqli/#
所以不是get型注入,应该是把提交的数据存放到post数据中了
我们可以用hackbar试一下或者用burpsuite抓包试一下。先用hackbar试一下吧
添加post数据如下 点击run
得到返回的页面如下:
则我们就可以在这里添加注入语句了
添加post数据如下:
获得当前数据库为dvwa
使用burp suite
但是我们执行这句话时却报错了:id=2 union select1,table_name from information_schema.tables wheretable_name='dvwa'#&Submit=Submit
Low版本的就可以注入,中等的就不可以注入了,这是为什么呢?打开源码看一下:
Medium SQL Injection Source
<?php
if( isset( $_POST[ 'Submit' ] ) ) {
// Get input
$id = $_POST[ 'id' ];
$id = mysql_real_escape_string($id );
// Check database
$query = "SELECT first_name,last_name FROM users WHERE user_id = $id;";
$result = mysql_query( $query ) or die( '<pre>' . mysql_error() .'</pre>' );
// Get results
$num = mysql_numrows( $result );
$i = 0;
while( $i < $num ) {
// Display values
$first = mysql_result( $result, $i, "first_name" );
$last = mysql_result( $result,$i, "last_name" );
// Feedback for end user
echo "<pre>ID: {$id}<br />First name: {$first}<br/>Surname: {$last}</pre>";
// Increase loop count
$i++;
}
//mysql_close();
}
?>
发现有这样的一句话:$id = mysql_real_escape_string($id );
这句话是干什么用的呢?百度了一下知道
mysql_real_escape_string函数是实现转义 SQL 语句字符串中的特殊字符,如输入单引号’则处理时会在其前面加上右斜杠\来进行转义,如果语句错误则输出相应的错误信息。其中受影响的字符如下:
\x00 \n \r \ ' " \x1a
那我们换这样的注入方式 只要不用’就行
id=2 union select 1,table_name from information_schema.tables wheretable_schema=(select database())#&Submit=Submit
High级别
发现就直接爆出来了 和low级别方法差不多,这里就不一一爆字段了
相关文章推荐
- DVWA-1.10全级别教程之File Inclusion(学习笔记)
- 《11招玩转网络安全》之第四招:low级别的DVWA SQL注入
- DVWA系列之2 low级别SQL注入
- DVWA平台的sql注入学习
- DVWA上传漏洞实践(不同级别)
- 通过DVWA学习SQL注入漏洞
- DVWA系列之3 medium级别SQL注入
- 通过DVWA学习SQL注入漏洞
- Android Training学习笔记之适配不同的设备
- 学习不同类型的知识要用不同的方法
- (转)log4j(三)——如何控制不同级别的日志信息的输出?
- innodb存储引擎中不同sql在不同隔离级别下锁的比较
- Python logging管理不同级别log打印和存储实例
- 不同年龄段的孩子如何开始学习编程
- 【JQuery学习笔记二】利用JQuery完成不同的文档和节点操作!
- Minigui学习--画不同图形
- FLTK学习-9-相同窗口不同内容显示切换
- 将Log4j按不同级别输出到不同文件【是网上别的童鞋的一篇帖子,但我改了点东西,就属于翻译吧^_^】
- 零起点学习Linux菜鸟级别视频