【网络安全实验室】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¥,依次类推.....!

知识星球

纷传

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

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

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

相关推荐
总有刁民想爱朕ha2 分钟前
Windows Server 2019部署MySQL 8教程
数据库·windows·mysql
纪伊路上盛名在4 分钟前
记1次BioPython Entrez模块Elink的debug
前端·数据库·python·debug·工具开发
CryptoRzz4 分钟前
日本股票 API 对接实战指南(实时行情与 IPO 专题)
java·开发语言·python·区块链·maven
程序员水自流7 分钟前
MySQL数据库自带系统数据库功能介绍
java·数据库·mysql·oracle
旧梦吟10 分钟前
脚本网页 三人四字棋
前端·数据库·算法·css3·html5
谷哥的小弟11 分钟前
Spring Framework源码解析——RequestContext
java·后端·spring·框架·源码
小光学长15 分钟前
基于ssm的考研复习平台w0ws1848(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。
数据库
天远Date Lab17 分钟前
Java微服务实战:聚合型“全能小微企业报告”接口的调用与数据清洗
java·大数据·python·微服务
-大头.17 分钟前
数据库高可用架构终极指南
数据库·架构
Elastic 中国社区官方博客21 分钟前
Elasticsearch:构建一个 AI 驱动的电子邮件钓鱼检测
大数据·数据库·人工智能·elasticsearch·搜索引擎·ai·全文检索