【网络安全实验室】SQL注入实战详情

如果额头终将刻上皱纹,你只能做到,不让皱纹刻在你的心上

1.最简单的SQL注入

查看源代码,登录名为admin

最简单的SQL注入,登录名写入一个常规的注入语句:

密码随便填,验证码填正确的,点击登录

得到我的座右铭(flag)

2.最简单的SQL注入(熟悉注入环境)

查看源代码,访问url:

构造页面并访问

返回正常

返回出错,说明存在SQL注入

判断字段数

页面返回正常,说明有三个字段

判断回显点

我们可以在如图所示位置进行查询

查询数据库名为mydbs

查询数据表为sae_user_sqli3

查询字段名为id,title,content

查询字段内容

得到

3.防注入

本关尝试使用宽字节注入,添加单引号会出现空白页,没有报错,使用

成功报错,找到注入点

构造语句

页面正常回显,说明or语句执行成功可以注入!

构造语句

得到

另外一种方法是像上一关一样操作,只是需要构造语句

确定字段长度:

确定显示位:

得到数据库:

得到列名:

得到字段:

4.到底能不能回显

经过测试,只有start参数有作用,num参数并没有作用。

构造payload:

查询数据库名:

查询数据表名:

查询列名:(由于分号被过滤了,只能将表名转换成16进制)

查询flag:

5.邂逅

加宽字节注入,因为无回显,所以用burp注入

构造payload:

查询注入点:

页面报错

查询列数:4列

查询显示位:3

查询数据库:mydbs

查询表名:article,pic

查询列名:id,picname,data,text

查询数据(flag):

将图片后缀改为

访问url:

得到flag

6.ErrorBased

本题考查mysql的报错注入

查询数据库名:mydbs

查询数据表名:log,motto,user

查询motto表的下的列名:id,username,motto

查询id字段的值:0,1,2,100000

查询username字段的值:admin,guest,test,#adf#ad@@#

查询motto字段的值:mymotto,happy everyday,nothing

对比两次注入的结果,发现username字段比motto字段多一个结果,这说明flag可能就在被隐藏的结果中

再次构造语句,直接查询第四个值,得到notfound! 根据提示flag不带key和#

7.盲注

本题使用延时盲注

判断当前数据库名长度为5,页面没有延时,说明数据库长度为5

判断库名第一个值为m,页面没有延时,说明数据库第一个值为m

以此类推,数据库名为mydbs

判断表名第一个表的第一个值为l,页面没有延时,说明第一个表的第一个值为l

以此类推,数据表名为log,motto,user

判断motto表中第一个字段的第一个值是i,页面没有延时,users表中第一个字段的第一个值是i

以此类推,数据表motto中的字段值为id,username,motto

判断motto表中第一个内容的第一个值为m,页面没有延时,motto表中第一个内容的第一个值为m

以此类推,得到flag

延时注入太慢了,sqlmap跑也比较慢

8.SQL注入通用防护

本题提示过滤了GET/POST,所以我们猜测是否可以进行cookie注入,使用burp抓包

在cookie处构造字段

回显正常

回显错误,说明此处存在数字型SQL注入

查询字段数目

最后得到字段数目是3。

查询显示位,得到显示位是2,3

查询数据库名,得到数据库名为mydbs

查询表名,得到在当前数据库中的表有sae_manager_sqli8,sae_user,sqli8

查询sae_manage_sqli8表中的字段,得到了id,username,password这3个字段

查询flag,IamFlagCookieInject!

9.据说哈希后的密码是不能产生注入的

查看关键源

"select * from 'user' where userid=".intval($_GET['userid'])." and password='".md5($_GET['pwd'], true) ."'"

对传入的userid使用了intval()函数转化为数字,同时将password使用md5()函数进行转化。这就是一个典型的MD5加密后的SQL注入。

其中最主要的就是md5()函数,当第二个参数为true时,会返回16字符的二进制格式。当为false的时候,返回的就是32字符十六进制数。默认的是false模式。具体的差别通过下面这个代码来看。

md5('123') //202cb962ac59075b964b07152d234b70

md5('123',true) // ,�b�Y[�K-#Kp

只要md5(str,true)之后的值是包含了'or'这样的字符串,那么sql语句就会变为select * from users where usrid="XXX" and password=''or''。如此就可以绕过了。

提供一个字符:ffifdyop

md5后,276f722736c95d99e921722cf9ed621c

可以伪造成

select * from user where userid='1' and pwd = ''or'6É]™é!r,ùíb'

从而成功绕过,得到Flag:

payload:

本文poc、工具、源码加圈获取

1、本圈主要分享:攻防及SRC实战经验分享、代码审计漏洞详情及代码、最新漏洞详情及原创漏洞利用工具、免杀手法及工具代码、问题解答等。
2、圈主出身于深信服深蓝攻防实验室、新华三攻防实验室,连续5年多次获得国家级、省级、地市级、行业级护网攻击队前三名。
3、漏洞盒子总榜前五十名、补天总榜前五十名、去哪网SRC总榜前五十名。
4、获得50+CVE通用漏洞编号、100+CNVD通用漏洞证书。
5、CSDN、公众号、博客、先知社区、SecIN、FreeBuf粉丝量10000+。
6、前1-50名: 25¥,50-100名: 50¥,100-150名: 75¥,依次类推.....!

知识星球

纷传

文笔生疏,措辞浅薄,望各位大佬不吝赐教,万分感谢。

免责声明:由于传播或利用此文所提供的信息、技术或方法而造成的任何直接或间接的后果及损失,均由使用者本人负责, 文章作者不为此承担任何责任。

转载声明:儒道易行 拥有对此文章的修改和解释权,如欲转载或传播此文章,必须保证此文章的完整性,包括版权声明等全部内容。未经作者允许,不得任意修改或者增减此文章的内容,不得以任何方式将其用于商业目的。

相关推荐
开心工作室_kaic25 分钟前
springboot548二手物品交易boot代码(论文+源码)_kaic
前端·数据库·vue.js·后端·html5
SRC_BLUE_1726 分钟前
攻防世界 - Misc - Level 1 | Banmabanma
网络安全·ctf
Java知识日历1 小时前
【内含例子代码】Spring框架的设计模式应用(第二集)
java·开发语言·后端·spring·设计模式
尘浮生3 小时前
Java项目实战II基于微信小程序的家庭大厨(开发文档+数据库+源码)
java·开发语言·数据库·微信小程序·小程序·maven
网络安全Ash3 小时前
全国知名网络安全赛事西湖论剑·杭州网络安全技能大赛启动报名
网络·安全·web安全
Java知识技术分享4 小时前
spring boot通过文件配置yaml里面的属性
java·spring boot·后端
一休哥助手4 小时前
深入解析Spring Boot项目的类加载与启动流程
java·spring boot·后端
丁总学Java4 小时前
定义一个名为 MyCache 的 Spring 配置类
java·spring
m0_634601664 小时前
2025.1.2
java·服务器·数据库