第4週刊

第4週刊

————————————————————————————
今回の週報は、学ぶことが少なすぎるため、リリースするには少し恥ずかしい思いをします。
主観的な理由-怠惰な...
客観的な理由-数日間外出した後、コンピューターを持参するのを忘れました。

c言語を確認する

久しぶりに触ったし、忘れてしまったので、前に作ったc言語のメモを復習しました

SQLインジェクションを確認する

C言語と同様に、忘れてしまったこともたくさんあります。SQLステートメントと前のトピックを確認しました。

単純なアルゴリズムの問​​題

1.
バブルソートの適用バブルソートと構造の適用

#include <stdio.h>
struct student//运用一个结构体,进行分组的定义、输入
{
    
    
	char name[21];//字符类的都要运用 char 来进行定义
	char score;//分数可能带小数点,所以运用char类型
};
int main()
{
    
    
	struct student a[100],t;//a[100],t定义为结构体类型
	int i,j,n;
	scanf("%d",&n);//有多少个对象
	for(i=1;i<=n;i++)
		scanf("%s %d",a[i].name,&a[i].score);//输入结构体的形式a[i].XXXXX对应结构体中的格式
	for(i=1;i<=n-1;i++)//冒泡排序
	{
    
    
		for(j=1;j<=n-i;j++)
		{
    
    
			if(a[j].score<a[j+1].score)
			{
    
    
				t=a[j];//t代表的是整个结构体类型
				a[j]=a[j+1];
				a[j+1]=t;
			}
		}
	}
	for(i=1;i<=n;i++)
	{
    
    
		printf("%s\n",a[i].name);//名字、成绩是个整体。名字的排序会按照成绩进行排序。
	}
	return 0;
}
/*1
冒泡排序的实际应用:
知识点:结构体的定义、结构体形式的输入与输出、冒泡排序。
结构体的用来可方便的定义每一组数据、减少内存。*/

2.クイックソートの
速度ソート
クイックソートの名前は非常に高速であることを意味します。バブルソートとバケットソートと比較すると、クイックソートは両方の利点を兼ね備えています。高速でメモリを節約します。説明させてください。
栗をあげましょう:6 1 2 7 9 3 4 5 10 8
最初に、最初の番号6を参照番号として使用し(実際には参照番号です)、次に次の番号を分類します。 6より小さくなります。数字は6の右側に配置され、6より大きい数字は左側に配置されます。次のように。3 1 2 5 4 6 9 7 10 8(右から左にソートされ、3と6の位置が入れ替わります)このとき、最終的なベンチマーク番号が次のようになるまで、それぞれ左側と右側で同じ手順を実行します。両側で交換する必要はありません(機能はここで必要です)。しかし、これは私たちの考えです。
我々は、(偶数が問題ではありません)今回我々は途中で開くことができないが、第6は、その後数6及び中間交換位置の最初の番号を交換する、アレイを使用する数字のセットに直面し、
特定最初の注文プロセスは次のとおりです。6127
9 3 4 5 10 8
6 1 2 5 9 3 4 7 10 8
6 1 2 5 4 3 9 7 10 8
3 1 2 5 4 6 9 7 108繰り返します6の両側の上記の操作。あなたはそれについて自分で考えなければなりません。コードを提供します。

#include <stdio.h>
int a[100];//定义全局变量  有因为两个子函数都要用
void quicksort(int left,int right)
{
    
    
	int i,t,j,first;
	first=a[left];
	i=left;
	j=right;
	while(i!=j)//两边的下标不相同是可以进行循环,相当于从搜索到了中间
	{
    
    
		while(a[j]>=a[left] && i<j)//先从右向左寻找 
			j--;
		while(a[i]<=a[left] && i<j)//从左向右寻找
			i++;
		if(i<j)//进行交换
		{
    
    
			t=a[j];
			a[j]=a[i];
			a[i]=t;
		}

	}
	a[left]=a[i];
	a[i]=first;//基准数的位置交换
	quicksort(left,i-1);//左边交换一轮后 左边要长度要‘-1’因为基准数站了一个位子
	quicksort(i+1,right);//右边进行操作
}
int main()
{
    
    
	int i,n;
	printf("请输入数组的长度\n");
	scanf("%d",&n);
	printf("请输入要排序的数字\n");
	for(i=1;i<=n;i++)
	{
    
    
		scanf("%d",&a[i]);
		
	}
	quicksort(1,n);
	for(i=1;i<=n;++i)
	{
    
    
		printf("%d",a[i]);
	}
	getchar();getchar();//这里相当于system("pause");
	return 0;
}

3.バケットソート...
4。QQ番号を復号化します。

ブールブラインド

最初に理解することは、ブールブラインドとは何かです。
ブールブラインドノート:ブールブラインドノートは通常、エコーフィールドのないページに適用でき(ジョイントクエリはサポートされていません)、WebページはTrueまたはfalseを返します。より簡単に言えば、ステートメントを挿入すると、ページは「true」または「false」のみをエコーし​​ます。
1.発破データベースのライブラリ名

入力:python sqlmap.py -u"http://challenge-cb6615ef28a95b3d.sandbox.ctfhub.com:10080/?id=1" -batch -dbs
結果:ここに画像の説明を挿入

python sqlmap.py -u "XXX" -batchは、ブラストする必要のあるデータを指すためにURLに「-」を挿入することを意味するXXXXの基本構造です。「-Dbs」はデータベースを指します。

この図は、検索されたデータベースのタイプを示しています。

2.現在のデータベース内のテーブルの名前をブラストする
入力:python sqlmap.py -u"http://challenge-8400f0508f0ba587.sandbox.ctfhub.com:10080/?id=1" -batch -D"sqli" -tables
ここで、「D」はデータベースを意味し、「-tables」はブラストテーブルの名前を指します。
結果:ここに画像の説明を挿入

2つのテーブル名フラグとニュースを取得します。
3.ブラスト列名
入力:python sqlmap.py -u"http://challenge-8400f0508f0ba587.sandbox.ctfhub.com:10080/?id=1" -batch -D"sqli" -T"flag" -columns
「-T」はテーブル名を意味し、「-columns」はブラスト列名を指します
結果:ここに画像の説明を挿入

取得されるデータ型はvarcharです(VARCHAR(M)はCHARよりも柔軟なデータ型です。文字データの表現にも使用されますが、VARCHARは可変長の文字列を格納できます)。 ctfhubのフラグは毎回異なり、フラグは文字であるため、varcharに属します。

4.データ
入力をブラストします。python sqlmap.py -u"http://challenge-8400f0508f0ba587.sandbox.ctfhub.com:10080/?id=1" -batch -D"sqli" -T"flag" -C"flag" -dump
「C」は列名であり、「-dump」はデータをエクスポートすることを意味します。
結果:ここに画像の説明を挿入

フラグの取得に成功しました。

慣れていない場合は、これを使用してSQLの整数型と文字型をブラストできます。
手動注入についても学ぶことができますが、少し面倒です。

申し訳ありませんが、今週はたくさんのことを学びました。来週は状態を調整します。

おすすめ

転載: blog.csdn.net/m0_52699073/article/details/113072447