PCTF{Interesting_U5er_d3fined_Function}
描述
咦,奇怪,说好的WEB题呢,怎么成逆向了?不过里面有个help_me函数挺有意思的哦。
下载文件:
https://dn.jarvisoj.com/challengefiles/udf.so.02f8981200697e5eeb661e64797fc172
分析
-
file看属性。
udf.so.02f8981200697e5eeb661e64797fc172: ELF 64-bit LSB pie executable, x86-64, version 1 (SYSV), BuildID[sha1]=20a47ef2eb6821a0982faffb75fd501579a172aa, dynamically linked, no section header
尝试ida64位打开……感觉不太对……看到个getflag的函数但不知道怎么get(……)
卡壳后求助场外,人家说“下载下来后文件名为udf.so.XXXXX,用mysql导入一下。”
知识点啊同志们!
扩展MySQL函数------ UDF
有时候我们需要对表中的数据进行一些处理而内置函数不能满足需要的时候,就需要对MySQL进行一些扩展,使用者自行添加的MySQL函数就称为UDF(User Define Function)。
- 所以这道题就是让我们在本地导入udf,然后去调用函数看结果呗!。
mysql> select @@plugin_dir;
#得到插件文件夹地址: D:\program\wamp\bin\mysql\mysql5.6.12\lib\plugin\
mysql> create function help_me returns string soname 'udf.so.02f8981200697e5eeb661e64797fc172';
ERROR 1126 (HY000): Can't open shared library 'udf.so.02f8981200697e5eeb661e64797fc172' (errno: 193 )
然后上网搜了下,破案了:You have to create a .dll file instead of creating .so file. .so file is used in Linux & .dll file is used in windows.
- 屈服于出题者的淫威,在linux上装mysql,到这里可能已经默默的开始下载安装包了……
docker可以直接pull mysql镜像!即pull即用,只有484MB!开不开心,神不神奇!!
>docker search mysql
Error response from daemon: Get https://index.docker.io/v1/search?q=mysql&n=25: dial tcp: lookup index.docker.io on 192.168.65.1:53: read udp 192.168.65.3:43547->192.168.65.1:53: i/o timeout
#重启解决(没有什么是重启解决不了的,如果有,就重装)
> docker pull mysql
> docker run -p 3306:3306 --name ctf-mysql -v D:\security\docker:/tmp -e LANG=C.UTF-8 -e MYSQL_ROOT_PASSWORD=123456 -d mysql
>docker exec -it ctf-mysql bash
root@72c3316058c9:/# mysql -u root -p
mysql> select @@plugin_dir;
root@72c3316058c9:/# cp ./udf.so.02f8981200697e5eeb661e64797fc172 /usr/lib/mysql/plugin/udf.so
mysql> create function help_me returns string soname 'udf.so';
Query OK, 0 rows affected (0.04 sec)
mysql> select help_me();
use getflag function to obtain your flag!!
mysql> create function getflag returns string soname 'udf.so';
Query OK, 0 rows affected (0.05 sec)
mysql> select getflag();
PCTF{Interesting_U5er_d3fined_Function}
总结
- 这道题其实也就是个知识点的问题,没有什么思维上的难度。udf是mysql自定义函数包,udf.so用于linux系统,udf.dll用于windows系统。使用以下命令调用(先cp至插件文件夹
(select @@plugin_dir)
):
create function f_name returns string soname 'udf.so';
select f_name;
如果题目没有给提示就ida打开瞅瞅,或者直接strings看有没有可疑的函数名。 - 自从接触了docker,感觉硬盘都变大了!谢谢docker!