sqli注入做题记录1


sqli注入专题


0x01 [强网杯 2019]随便注 1(堆叠注入)


ps:不是我就在想啊靶场是什么玩意啊,实战题都是什么牛马啊,我不理解并且大为震撼怎么会有这么多的注入姿势啊???
直接给出参考链接这个最全了
四个方法:
1、预编译拼接法
2、预编译进制法
3、更改表名法
4、handle特殊法
解释都在链接里了

0x02 [SUCTF 2019]EasySQL 1(堆叠注入)


每个小白看完wp都会觉得离谱的猜测代码做法,代码拼接后的逻辑我理解,这里主要记录下这种注入语句:select *,1||flag from Flag,还有第二种堆叠注入的方法要设置参数,也记录一下

sql_mode 设置了 PIPES_AS_CONCAT 时,|| 就是字符串连接符,相当于CONCAT() 函数
当 sql_mode 没有设置 PIPES_AS_CONCAT 时 (默认没有设置),|| 就是逻辑或,相当于OR函数

1;set sql_mode=PIPES_AS_CONCAT;select 1拼接完相当于select 1;set sql_mode=PIPES_AS_CONCAT;select 1||flag from Flag
具体做法看这篇博客

0x03 [GXYCTF2019]BabySQli 1


  • ps:这题蛮坑的,不看源码好难做啊,很多都过滤了页面没什么反应,连()都过滤丧心病狂

base32与base64编码的特点


base64中包含大写字母(A-Z),小写字母(a-z),数字0—9以及+/,通常有两个=;
base32中只包含大写字母(A-Z)和数字234567,通常有或没有三个=

联合注入的特性


在联合查询并不存在的数据时,联合查询就会构造一个虚拟的数据。但是也是个临时数据,刷新后不会保存。
我们构造payload:name=admin' union select 1,'admin',NULL#&pw[]=123这里会查询name=admin和pw=null的数据,但是数据库里很明显没有这样的数据,这时我们就可以临时创造
这样一个name=admin和pw=null的数据保存在数据库里,pw传一个数组md5加密会返回一个null就正好对应上了(当然不看源码我也不懂哪里有md5的提示)
关健代码:

if($arr[1] == "admin"){
	if(md5($password) == $arr[2]){
		echo $flag;
	}
}

老朋友函数:

mysqli_query(connection,query,resultmode);
connection	必需。规定要使用的 MySQL 连接。
query	        必需,规定查询字符串。
resultmode	可选。一个常量。可以是下列值中的任意一个:
                MYSQLI_USE_RESULT(如果需要检索大量数据,请使用这个)
                MYSQLI_STORE_RESULT(默认)
执行查找语句
——————————————————————————————
mysqli_fetch_row() 函数从结果集中取得一行,并作为枚举数组返回。

做题链接1
做题链接2

0x04 [GYCTF2020]Blacklist 1


  • ps:随便注的升级版
    这题过滤了很多东西:preg_match("/set|prepare|alter|rename|select|update|delete|drop|insert|where|\./i",$inject);把碰到这些关键词的背后也全部注释,这是个强过滤,注入基本不能用了,这种时候就要考虑到堆叠注入:
    show databases; 获取数据库名
    show tables from databases; 获取表名
    show columns from table_name; 获取列名

handler语法


句柄:句柄(Handle)是一个是用来标识对象或者项目的标识符,可以用来描述窗体、文件等。
翻译成白话就是,句柄 相当于一个指针,是一个广义的指针,不是特定指向某一个形式(整数、数组、对象等)。

基本用法:

1、打开句柄
handler handler_table open;
2、查看数据
handler handler_table read first;
handler handler_table read next;
3、关闭句柄
handler handler_table close;

通过索引查看表:

1、创建索引
create index handler_index on handler_table(id);
2、打开句柄
handler handler_table open;
# 打开句柄并命名为 p
handler handler_table open as p;
2(1)指定索引,例如:
# 指定索引开始查看数据
handler p read handler_index = (2);
3、查看数据
# 获取第一行数据
handler p read handler_index first;
# 获取下一行数据
handler p read handler_index next;
# 获取上一行数据
handler p read handler_index prev;
# 获取最后一行数据
handler p read handler_index last;
4、关闭句柄
handler p close;

做题链接
handler语法


文章作者: 矢坕
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 矢坕 !
  目录