CTF个人总结指南(更新中)
XCTF总结:
-
查看源码
ctrl+U
F12
view-source:
Burpsuite -
robots.txt
-
扫描目录脚本:桌面dirsearch-master
命令:C:\Users\Yuen>python C:\Users\Yuen\Desktop\dirsearch-master\dirsearch.py -u http://111.198.29.45:50014/ -e * -
常见备份文件名
.git
.svn
.swp
.~
.bak
.bash_history -
注意cookie
-
有些页面需要达到条件才能拿到flag,可以试试查看前端代码,并修改
-
X-Forwarded-For:123.123.123.123/Referer:https://www.google.com
-
遇到登陆账号密码的,用bp进行爆破
-
常用一句话
- 命令执行
command1 & command2 :不管command1执行成功与否,都会执行command2
command1 && command2 :先执行command1执行成功后才会执行command2 ,若command1执行失败,则不执行command2
command1 | command2 :只执行command2(将上一个命令的输出作为下一个命令的输入)
command1 || command2 :command1执行失败,再执行command2(若command1执行成功,就不再执行command2)
- sqlmap爆破
(1)全爆
sqlmap -u “www.example” --dbs
sqlmap -r xctfrequest.txt --dbs
sqlmap -r xctfrequest.txt -D news --dump
(2)慢慢爆
-
git泄露
url访问:http://111.198.29.45:46634/.git/,出现泄露的文件,因此得出存在git文件泄露
脚本:python GitHack.py http://111.198.29.45:31555/.git/ -
chrome://downloads,恢复恶意文件
-
下载到附件后,查看代码可以根据代码内容修改后缀名查看
-
浏览器会自动对url进行一次解码,有时需要两次编码
-
序列化和反序列化
- intval函数
去除小数点(0除外)的函数
注:
-
源码看不出东西就抓包,有些进行url超链接的需要抓包
-
POST提交数据:需要在最后一行添加Content-Type: application/x-www-form-urlencoded
-
find / -name flag.txt
-
有时候有id=xx并不是一定存在sql注入,而是存在id的爆破,多多尝试
-
copy 1.jpg/b + 1.php/a 11.jpg
-
==是判断返回true还是false
-
一定仔细看题目,那就是提示
-
extract(),查询php官网得知这个函数会将参数里数组的键名当作变量名,值作为变量的值。
-
上传时的1.php.jpg的00截断和Content-Type:
CG-CTF总结:
- 修改前端代码长度
- 图片源码查看可能有flag
- 源码页面层层递进
- 文字编码后,打开新txt,之后以Unicode格式保存(右键另存为),之后再放入控制台运行
- 页面存在超链接,注意真正的链接会被重定向,考虑查看源代码或者使用bp
- 文件包含伪协议php://filter/read=convert.base64-encode/resource=index.php
- 修改cookie
- robots.txt
- 引号被转义,可以使用%df和\合成運,注释符可以是%23(#如果被过滤的话就url编码)或者–+
- ereg()函数%00截断
ereg()在匹配字串是检测到%00会停止,而strpos()会继续,故构造nctf=1%00%23biubiubiu即可得到flag(%23因为浏览器会自动解吗一次,只使用#会被浏览器自动解码成空) - php弱类型
s878926199a
0e545993274517709034328855841020
s155964671a
0e342768416822451524974117254469 - post变量覆盖
register_global=ON时POST传入数据值会覆盖掉php中变量值,源码中对post数据进行了extract()处理,extract()函数会将数组中的值赋给对应索引 - 1.php%00截断不行,就把%00替换为空格标记该位置,在16进制中找到对应的位置,把20(空格的16进制是20)改为00截断
- sql注入有源码给你看时,可能需要构造payload
- strcmp()弱类型,传入数组时会返回null。所以post的数据为pass[]=1可以获取flag,pass=aa[]是不行的,必须要在参数pass后面加[]
- 本地登录:抓包添加Client-ip:127.0.0.1或x-forwarded-for:127.0.0.1
- 让两个数相等,要实现绕过还是可以使用16进制=10进制,十进制转16进制最好用python脚本,工具的转的hex(16进制不行)
- sql注入:clean()函数去掉转义,htmlentities($str, ENT_QUOTES)会转换单引号和双引号。这里我们只能通过引入反斜杠,转义原有的单引号,改变原sql语句的逻辑,导致sql注入
payload如下:?username=&password=%20or%201%23 - 遇到一大串代码,就放到控制台里运行,乱码的话就先右键保存,转码后再放入控制台,也要注意请求头,响应头有没有提示
如遇到history of bash,则url目录后访问/.bash_history,最后如果出现zip就下载
例:
zip -r mydata.zip mydata #压缩mydata目录 压缩成 mydata.zip 文件
unzip mydata.zip -d mydatabak #解压mydata.zip 解压到mydatabak目录下 - union前面的语句查询不成功的时候会执行后面的语句
- vim这个东西异常退出时会留下临时文件常常是.swp、.swo格式。或者可能会留下备份文件~结尾文件,所以可以寻找action文件,例如是submit.php,之后在原本action的基础上加.sumbit.php.swp来查看submint.php的源码
- 判断:0e11='0' //true 判断:000000...n个0='0' //true
- 伪协议php://input访问请求的原始数据的只读流,如果无法显示flag就使用bp来进行post请求
- 变量覆盖:foreach(name=meizijiu233 as $key => $value) //$key=name,$value=meizijiu233
注:PHP所使用的preg_match()函数从用户输入字符串获得参数,如果所传送的值为数组而不是字符串就会生成警告,警告消息中包含有当前运行脚本的完整路径
application/octet-stream 未知的应用程序文件
application/json json数据
text/plain 未知的文本文件(纯文本文件),浏览器会认为这是可以直接显示的
注:浏览器分辨文件是基于MIME的,而不会把文件打开查看是否是其他类型,例如用link链接了一个标记为text/plain的文件,就算此文件是css文件,就算其后缀是.css,浏览器依旧不认
text/css css文件
text/html HTML文件
image/gif gif文件
总结
以上是生活随笔为你收集整理的CTF个人总结指南(更新中)的全部内容,希望文章能够帮你解决所遇到的问题。
- 上一篇: 农村信用社贷款要求
- 下一篇: DVWA--Command Inject