SQL注入实战详情

admin 2025年1月2日10:23:13评论11 views字数 2165阅读7分13秒阅读模式

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

1.最简单的SQL注入

查看源代码,登录名为admin

SQL注入实战详情

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

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

得到我的座右铭(flag)

SQL注入实战详情

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

查看源代码,访问url:

SQL注入实战详情

构造页面并访问

返回正常

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

SQL注入实战详情

判断字段数

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

SQL注入实战详情

判断回显点

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

SQL注入实战详情

查询数据库名为mydbs

SQL注入实战详情

查询数据表为sae_user_sqli3

SQL注入实战详情

查询字段名为id,title,content

SQL注入实战详情

查询字段内容

得到

SQL注入实战详情

3.防注入

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

成功报错,找到注入点

SQL注入实战详情

构造语句

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

SQL注入实战详情

构造语句

得到

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

SQL注入实战详情

确定字段长度:

确定显示位:

得到数据库:

SQL注入实战详情

得到列名:

SQL注入实战详情

得到字段:

SQL注入实战详情

4.到底能不能回显

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

构造payload:

查询数据库名:

SQL注入实战详情

查询数据表名:

SQL注入实战详情

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

SQL注入实战详情

查询flag:

SQL注入实战详情

5.邂逅

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

构造payload:

查询注入点:

页面报错

SQL注入实战详情

查询列数:4列

SQL注入实战详情

查询显示位:3

SQL注入实战详情

查询数据库:mydbs

SQL注入实战详情

查询表名:article,pic

SQL注入实战详情

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

SQL注入实战详情

查询数据(flag):

SQL注入实战详情

将图片后缀改为

访问url:

得到flag

SQL注入实战详情

6.ErrorBased

本题考查mysql的报错注入

查询数据库名:mydbs

SQL注入实战详情

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

SQL注入实战详情

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

SQL注入实战详情

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

SQL注入实战详情

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

SQL注入实战详情

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

SQL注入实战详情

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

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

SQL注入实战详情

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跑也比较慢

SQL注入实战详情

8.SQL注入通用防护

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

在cookie处构造字段

回显正常

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

SQL注入实战详情

查询字段数目

最后得到字段数目是3。

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

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

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

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

查询flag,IamFlagCookieInject!

SQL注入实战详情

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'<trash>这样的字符串,那么sql语句就会变为select * from users where usrid="XXX" and password=''or'<xxx>'。如此就可以绕过了。

提供一个字符:ffifdyop

md5后,276f722736c95d99e921722cf9ed621c

可以伪造成

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

从而成功绕过,得到Flag:

payload:

SQL注入实战详情

 

 

原文始发于微信公众号(儒道易行):【网络安全实验室】SQL注入实战详情

 

免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2025年1月2日10:23:13
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   SQL注入实战详情https://cn-sec.com/archives/3581608.html
                  免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉.

发表评论

匿名网友 填写信息