记录一个hw面试复习

0x001 sql注入漏洞

概念:SQL注入即是指web应用程序对用户输入数据的合法性没有判断或过滤不严,攻击者可以在web应用程序中事先定义好的查询语句的结尾上添加额外的SQL语句,在管理员不知情的情况下实现非法操作,以此来实现欺骗数据库服务器执行非授权的任意查询,从而进一步得到相应的数据信息。

条件:①用户输入的数据被当作代码 ②用户可以控制输入

Mysql数据库

1.显错注入

显错注入的基本流程:
①判断是否存在注入
index.php?id=1 and 1=2 //如果页面显示错误则可能存在sql注入
或者是 index.php?id=1+1 //如果页面跳到id=2的页面则可能存在sql注入
②查看sql注入的字段数

ps:为什么要查看这个页面可传参数的字段数?由于我们接下来要执行union函数,union函数规定只有返回字段数相同的查询语句才可以正确执行,例如我们执行select 1,2,3 union select 1,2 数据库将报错

我们可以用order by来猜测可传参的字段数 如:order by 1就是按照第一个字段数排序
③查看回显点
index.php?id=1 union select 1,2,3 -- qwe
④查看表名
index.php?id=1 union select 1,2,table_name from information_schema.tables where table_schema=database() limit 1,1 -- qwe

ps:limit 0,1 意思是从第一行开始取一行数据 limit 0,2 意思是从第一行开始取两行数据 ,所以我们时常说select返回的内容实际上是返回了一个表

⑤查看字段
index.php?id=1 union select 1,2,column_name from information_schema.columns where table_name='error_flag' limit 2,1 -- qwe
⑥查看保存的数据
index.php?id=1 union select 1,2,flag from error_flag -- qwe

2.POST注入

POST注入与显错注入类似

3.Header注入

Header注入原理:在返回网站的请求头可以加入代码,使得人为更改的请求头被当作代码执行。
举例实现细节:利用了php的全局变量$_server获取用户相关信息且将数据存入数据库,利用updatexml函数语句构建特定的语句,报错返回数据库内的信息。
注入函数:①updatexml(需要替换的值,替换的文件在哪里,要替换成什么)//更新XML里面的内容,当路径中存在特殊符号时就会报错 ②concat(1,2,3,’asd’) 字符串拼接 ③同时还有其它的报错函数:https://www.cnblogs.com/ly2333/p/13628108.html

ps:在实践中header注入可能需要观察php源代码才能够确定可以注入的是哪一个请求头,所以header注入可能适用于源码已知的情况下。或者通过一个个尝试请求头的注入来实现。

我们可以观察下面这个例子

$username = $_POST['username'];
$password = $_POST['password'];
$uagent = $_SERVER['HTTP_USER_AGENT'];
$jc = $username.$password;
$sql = 'select *from user where username =\''.$username.'\' and password=\''.$password.'\'';
if(preg_match('/.*\'.*/',$jc)!== 0){die('为了网站安全性,禁止输入某些特定符号');}
mysqli_select_db($conn,'****');//不想告诉你库名
$result = mysqli_query($conn,$sql);
$row = mysqli_fetch_array($result);
$uname = $row['username'];
$passwd = $row['password'];
if($row){
$Insql = "INSERT INTO uagent (`uagent`,`username`) VALUES ('$uagent','$uname')";
$result1 = mysqli_query($conn,$Insql);
print_r(mysqli_error($conn));
echo '成功登录';

我们可以看到username和password都加入了过滤但是uagent没有于是我们可以修改它的ua头
到这里思路就很清晰了,还是老套路三步走,表名·字段名·取数据
①UA头注入 拿表名
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.159 Safari/537.36' or updatexml(1,concat(‘~’,(select table_name from information_schema.tables where table_schema=database() limit 0,1)),1),’1’) — qwe
......

4.布尔盲注、延时注入

原理见此:布尔盲注https://bbs.zkaq.cn/homework/40782.html 延时注入:https://bbs.zkaq.cn/homework/40808.html
这种注入我们一般用sqlmap来实现
sqlmap-master>python sqlmap.py -u http://inject2.lab.aqlab.cn/Pass-13/index.php?id=1 —level(等级) 3 —risk2(种类)
python sqlmap.py -u http://inject2b.lab.aqlab.cn/Pass-10/index.php?id=1 --dbs跑库名
image

5.sql注入的修复与预防

(1)所有查询语句都使用数据库提供的参数化查询接口,并且参数化语句使用参数,而不是将用户输入变量嵌入SQL语 句中。几乎所有当前的数据库系统都提供参数化的SQL语句执行接口。使用此接口可以有效地防止SQL注入攻击。

  (2)对进入数据库的特殊字符(’”<>&*;等)进行转义处理,或编码转换。

  (3)确认每个数据的类型。例如,数字数据必须是数字,并且数据库中的存储字段必须与int类型相对应。

  (4)应严格规定数据长度,以防在一定程度上正确执行较长的SQL注入语句。

  (5)网站每个数据层的编码是统一的。建议使用UTF-8编码。上下层编码不一致可能会导致某些过滤模型被绕过。

  (6)严格限制网站用户数据库的操作权限,并向该用户提供只能满足其工作要求的权限,从而最大程度地减少了注入攻击对数据库的危害。

  (7)阻止网站显示SQL错误消息,例如类型错误,字段不匹配等,以防止攻击者使用这些错误消息进行判断。

  (8)在网站发布之前,建议使用一些专业的SQL注入检测工具来及时检测和修补这些SQL注入漏洞。

数据库注入

1.Access注入——cookie注入

什么是cookie:

cookie就是代表你身份的一串字符串,网站根据cookie来识别你是谁,如果你获取了管理员的cookie,无需密码就可以直接登录管理员的账号。

cookie注入的原理:

在动态脚本语言中存在着超全局变量可以获取多种传参方式(基本上)
很多开发在开发的过程中考虑到要接受多种方式的传参,在接收参数的时候都是用多种解释传参的方法。例如:php中的$_REQUEST[]可以获取POST、GET、COOKIE传参。(php5.4以上版本就不会接受COOKIE传参了)

如何修改cookie:1.用burp抓包来修改网页cookie 2.用浏览器的console窗口:"document.cookie='id='+escape("171 and 1=1")"

基本思路:首先检查网页的注入点,然后查询数据库的表名,这次是access数据库,access数据库没有自带系统表,而且它没有库的概念。所以我们只能用爆破的方式来查找access数据库中的表与字段。

爆破方式:and exits(select*from 表名)如果页面正常,就是存在着这个表,exists这个函数就是检查子查询能否查询到数据,如果可以就返回一个true。

靶场:
探测出有10个字段,构建语句并得到回显位置
image

2.Access注入——偏移注入

3.MySQL 注入——Dns注入

4.Orcale注入——报错注入

0x002前端渗透XSS

1.反射性XSS

2.存储型XSS

3.Dom Based XSS

4.CSRF跨站请求伪造

0x003 文件上传解析漏洞

0x004漏洞原理到利用

1.SSRF 漏洞原理和利用

2.XXE实体注入

3.代码执行漏洞

0x005基础漏洞挖掘

posted @ 2022-03-23 01:16  smart_ql  阅读(60)  评论(0编辑  收藏  举报