首页 > 数据库 >sql 注入的类型之 post 基于错误的注入(sqllib靶场less-11-12)(通过burpusite分析)

sql 注入的类型之 post 基于错误的注入(sqllib靶场less-11-12)(通过burpusite分析)

时间:2024-03-30 14:29:42浏览次数:40  
标签:11 ps 12 密码 语句 sql post 注入

   post注入和get注入一样,都是基于数据库没有对语句进行足够多的过滤,导致用户可以直接在url上执行sql语句。这两基本上没区别,但是基于post的注入在真实情况下会比get的多得多,最典型的post注入就是万能密码

万能密码

万能密码便是post注入的一种(也是sql注入),其原理也是因为后端没有进行好过滤,使得传入的sql语句被成功执行,使得用户即便输入的账号与密码错误也能成功执行。代码 ' or 1=1# 原理:

select * from stu where user='admin' where password='123'

这是一条标准的sql语句,基本上前端在登录框输入信息后,服务器得到响应,并向数据库中查找相应的user与password,都存在才可以正常登录。而万能密码便是添加上sql语句中的or来进行绕过(ps:前提,得存在sql注入的漏洞,这个只能试一试,不代表一定能成功),将or语句写入登录框后,数据库查询的语句代码如下,但是因为admin 与or 1=1 都在同一个

select * from stu where user='admin or 1=1' and password='123' 

字符串下,如果直接执行会把‘admin or 1=1’一整串当成账号登录,因此需要使or1=1逃逸出来,因此需要在前面加个‘  语句变成下面这样,使其成为一条or的sql执行语句,但是后面又会多出来个

select * from stu where user='admin' or 1=1' and password='123'

引号,sql中引号要成双成对的,所以通过一个注释符将后面全部注释掉,完成语句构造。

​
select * from stu where user='admin' or 1=1 #'password='123'

​

(ps:因为or 1=1 永远为真,所以要是存在sql漏洞执行or后便会当真,后续的密码通过注释也不再查看,直接登录。)

一个小例子 源自buuctf(一个ctf的靶场 BUUCTF在线评测 (buuoj.cn) 没事干可以去里面被折磨)

ps(放在密码处也可以,原理都一样)

post注入

1.less-11

通过docker登录靶场(本篇基于上一章的环境继续进行)(ps:这里我没写怎么搭建docker,可以看看别的佬咋搭的,当前阶段是学校任务罢了(有空一定写))

sql注入 sql-lib第一个(回显注入)-CSDN博客icon-default.png?t=N7T8https://blog.csdn.net/weixin_74182283/article/details/137102298?spm=1001.2014.3001.5501

登录页面,可以直接使用万能密码('or 1=1#) 查看情况

直接成功登录(ps:很多真实环境都可以靠这个直接进去,想挖edu的看到有个输入框就可以去输一下)

至于判断数据库,表,字段数量,字段名的话都可以靠最基本判断字段的方法进入,和之前基本上没差,不过对于这种post注入可以在搜索框里面进行尝试,但要把or 1=1这个给去掉,不然直接就登进去了。(ps:'这个单引号和注释不能去,得靠他们构建sql语句进行查询)

上面两个图可以看出,这表只有两个字段,附上代码:

查数据库名和版本:-1' union select database(),version() #

查表:-1' union select 1,group_concat(table_name) from information_schema.tables where table_schema=database() #

查字段:-1' union select 1,group_concat(column_name) from information_schema.columns where table_name='users' #

最终数据:-1' union select 1,group_concat(username,0x3a,password) from users #

(ps:这个0x3a是一个十六数,转为ascill吗值后代表的是:(冒号),可以更好分割用户名和密码)

但是,通常情况下,这种搜索栏通常都会做一个限制,正常情况下是没法输入这么多数据来查看信息的(虽然万能密码进去了也不怎么用查),所以,这个时候就可以通过bp抓包来对其信息进行分析。(ps:如果他有过滤这些关键字就另当别论)

通过burpusite进行抓包分析(kali自带,这里先不讲具体如何使用(因为准备在另一篇讲),有兴趣的先看看别的佬)

进入kali后,将抓到的数据通过ctrl+r(或者右键选则) 加入到repeater模块(这模块叫重放器,可以显示更改代码后服务器所响应的页面,但数据不会进入服务器,可以拿来用作验证漏洞是否存在或者木马是否上传之类的)

而后可以把查表查库的语句输入进去,得到相应的数据

Post注入(less-12)

上述讲的是一个最平常的最大众的万能密码的使用,下边来个稍微有点限制的,首先,快乐万能密码(ᕑᗢᓫ∗)˒

寄了

判断有没有潜在的get注入点(虽然这是个靶场,但也可以按照正常思维进行测试),发现全部都有回显,sql语句没有执行,那这可能表明html页面上不太好发现,所以抓个包看看

随便输入一串账号密码,发现发送的数据没有任何回显,页面也只有一个fail的提示。这时,由于万能密码已经测试过了,get也测试过了都没有成功,那么普通人正常情况下有那么以下几种选择(1.直接退出页面(这种思想通常不应该存在)2.使用一些更加新鲜的方法进行注入点的测试3.使用sqlmap硬来(在后面))

通常像这种破破烂烂的界面是很容易出货的,(并且这是个靶场,一定有货)所以可以使用我前面一章给的小思路,用一些其他符号来找(这里的url是get方法实现,那咱在bp环境下,把符号写在这种uname后面的账号就行了)

ps:可能还有其他字符能测试,但我不知道୧⍤⃝

这里附上一个没找到和找到的截图,可以看到这变在输入一个反斜杠\的时候,出现了一个报错,(sql的报错从synatx后面开始看就行了) 发现这个提示似乎是因为在设计数据库的时候,他采用的的sql语句似乎是一个通过")来进行闭合的数据,发现问题后,可以对万能密码进行更改看看是否可以进行连接。

根据上面所说的万能密码的原理,根据发现的报错信息,将’改成了报错中看到的"),让or进行逃逸,通过测试成功登录了该页面。可以再看一下代码验证以下(因为该环境基于上篇,使用docker搭建的,所以搭建docker的虚拟机可以直接查看源代码)

ps(别觉得前面就一定得是空的,咱万能密码没这么矫情)

可以发现这里是通过一个php代码编译的,并且其中的数据也是使用"与()进行的闭合(ps:没看懂可能得先去学一下php¯\_(ツ)_/¯) 确定这玩意是个uname=("xxx")这样的闭合方式。

基于post注入的sqlmap使用方法

有两种方法(ps:可能还有更多,但我就会这两个)

1.在桌面上创建一个后缀为txt的文本 2.将repeater内的数据(这个RAW下的)全部复制到文本里面。(这样子存储速度会快一点,但要是啥没复制到可能会出问题)

2.右键repeater后面的空白处,按下面的方法进行保存(这样子存储会慢一点,但因为数据是直接从bp全部复制的,不会出现复制漏或者别的情况)

两种保存方法的使用:

1.(通过手动复制的方法使用) 先看一下数据长啥样,cat xx.txt 查看数据是否完成,而后根据

sqlmap -r "/home/kali/Desktop/77.txt" -p uname :其中 -r 表示读取文件 后面那个则是文件存放路径(也就是保存后的txt文件)其中,-p 则是指定需要探测的地方(这里可以看一下cat展示的文件,其中有uname和passwd)这里指专门对uname进行是否存在注入点的判断。根据回复信息,发现此地存在注入点。

ps(sqlmap -r "/home/kali/Desktop/77.txt" -p uname --technique -E (这样也行,这个technique是指定选中哪种注入(布尔,报错,盲注等等),而-E 则表示指定检测报错注入。不加这个technique是默认全部方法进行探测的,我通常不加。【除非啥指定情况】,但是如果确定了哪种注入类型,加上这个会快很多。))

爆破数据得到表,后续就根据此前(第一篇)的操作进行数据拿取

2.(直接保存bp文件的使用)启动sqlmap进行探测 ,这种探测方法其实就是上文所说的硬来,在不确定是否存在sql注入的情况下(比如一些不是登录框,但和数据库有交互的地方【比如搜索栏】),无法判断注入点,可以直接把post包(通过第二种方式复制得到的)放到sqlmap中让它进行检测。(不建议使用,因为有时候确实页面里存在sql注入,但需要通过手动修改一些参数才能发现,虽然sqlmap强大,但这种硬来不是说只要有就能查出来的,而通过sqlmap查询后没有发现注入点,就会产生这个地方没问题的假象。所以这种应该把能想到的东西全部尝试完没辙再测试)(ps:如果sqlmap硬扫没扫到,但通过手动更改参数后发现注入点,丢进来的话应该还是能扫到的)

基础的post注入就完事辣

标签:11,ps,12,密码,语句,sql,post,注入
From: https://blog.csdn.net/weixin_74182283/article/details/137133841

相关文章

  • 《C++ Primer 第五版 中文版》第12章 动态内存【阅读笔记 + 个人思考】
    《C++Primer第五版中文版》第12章动态内存【阅读笔记+个人思考】12.1动态内存与智能指针12.1.1shared_ptr类静态内存包括:初始化只读数据段,初始化读写数据段,未初始化数据和常量数据段。详细在下面博客总结:Linux系统下C++程序运行时的内存布局及存储内容,生......
  • spring boot 配置文件值注入
        利用配置文件将属性注入到bean程序里面去,下面是各个情况的总结:    首先我先新建一个bean(beans.User类)来完成演示:packageorg.example.springbootdemo.beans;importlombok.Data;importorg.springframework.boot.context.properties.ConfigurationPro......
  • Windows12安装Docker
    环境及工具(文末提供)DockerDesktopInstaller.exe(官网)一、查看windows相关配置查看是否开启相应的功能,如果没有需要开启,然后重启电脑打开任务管理器(CTRL+SHIFT+ESC)->选择性能->CPU->虚拟化,确认是否已启用二、开始安装(我这边已经安装完成)三、可能遇到的问题St......
  • SQL Server 附加数据库提示5120错误
    SQLServer附加数据库提示5120错误怎么样是不是跟你的错误是一样的,心里是不是有点小激动?T_T终于有办法了!!!! 第一步先关掉你的SQLserver然后在菜单上找找到SQLSERVER右键选择“以管理员运行” 第二步给你的数据库文件所在文件夹给上“读取,写入”的权限。在附加数据库......
  • debian12 linux root能用lightdm登陆xfce桌面,普通用户不能用lightdm登陆xfce桌面,闪
    Fn+Ctrl+F3,进入tty,发现登陆普通用户后再使用startxfce4可以直接进桌面下面参照https://forums.opensuse.org/t/normal-user-can-not-login/50756http://linux.it.net.cn/m/view.php?aid=6499有多种办法原因可能是用在自己账户下命令行sudostartx导致~/.Xauthority文件......
  • 递推 1166:求f(x,n)
     #include<iostream>#include<cmath>usingnamespacestd;intmain(){ floatx,n,b=0; cin>>x>>n; b=sqrt(1+x); for(inti=2;i<=n;i++){ b=sqrt(i+b); } cout<<b; return0;}1166:求f(x,n)时间限制:1000ms    ......
  • 第11章 使用类——运算符重载(一)一个简单的运算符重载示例(Time类对象的加法)
    本文章是作者根据史蒂芬·普拉达所著的《C++PrimerPlus》而整理出的读书笔记,如果您在浏览过程中发现了什么错误,烦请告知。另外,此书由浅入深,非常适合有C语言基础的人学习,感兴趣的朋友可以自行阅读此书籍。运算符重载我们先了解下函数重载的概念,函数重载,也叫函数多态,指的是用......
  • P8312 [COCI2021-2022#4] Autobus floyd最短路
    [P8312COCI2021-2022#4]Autobus-洛谷|计算机科学教育新生态(luogu.com.cn)思路:nnn数据范围很小可以用Floyd算法。注意:最多坐......
  • 【MySQL系列+sql注入-1】
    ......
  • 3121002754 刘栋 《需求规格说明书》
    这个作业属于哪个课程<软件工程2024-双学位>这个作业要求在哪里<团队作业2——需求说明文档>这个作业的目标完成需求文档目录团队作业2-需求说明文档需求说明面向用户分析功能性需求预期用户数量系统价值gitcode链接时间安排原安排表校正后安排感想团队作业2-......